是想要下边这效果吧, 注入的微信进程, show出一个窗口 然后再拦截api搞点事情.
说一下思路: 其实这种dllshow窗口和普通的一样, 只是需要在一个单独的线程里去show, 然后又因为创建的子线程非mfc线程(主线程),所以需要在这个子线程里show完窗口之后加一个消息循环就ok了,什么问题没有了.
DLL主要代码:
BOOL CInjectorApp::InitInstance()//这个dll在被注入到目标进程后会被调用,然后你懂得
{
CWinApp::InitInstance();
::CreateThread(NULL, 0, ShowInjectDialog, NULL, 0, NULL);//创建show窗口的线程.
return TRUE;
}
DWORD WINAPI ShowInjectDialog(void* p)//线程函数,在这里显示窗口并给show出来的这一个窗口加上消息循环
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CHookDialog* m_pHookdlg = new CHookDialog();
m_pHookdlg->Create(IDD_DIALOG_HOOK);
m_pHookdlg->ShowWindow(SW_SHOWNORMAL);
//非主线程创建的窗口的消息循环要在创建窗口的线程中(当初我也是卡在这里,后来在MSDN找到这段话,现在给你抄录下来)
//MSDN : It is important to note that the message loop and window procedure for the window must be in the thread that created the window.
MSG msg;
while (GetMessage(&msg, m_pHookdlg->m_hWnd, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)