标签:
/ MFC_DLL.cpp : 定义 DLL 的初始化例程。 // #include "stdafx.h" #include "MFC_DLL.h" #include "WgDlg.h" #include <Windows.h> #ifdef _DEBUG #define new DEBUG_NEW #endif CWgDlg * GameForm = NULL; HWND GameHwnd = NULL; void StartHook(); // //TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的, // 则从此 DLL 导出的任何调入 // MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到 // 该函数的最前面。 // // 例如: // // extern "C" BOOL PASCAL EXPORT ExportedFunction() // { // AFX_MANAGE_STATE(AfxGetStaticModuleState()); // // 此处为普通函数体 // } // // 此宏先于任何 MFC 调用 // 出现在每个函数中十分重要。 这意味着 // 它必须作为函数中的第一个语句 // 出现,甚至先于所有对象变量声明, // 这是因为它们的构造函数可能生成 MFC // DLL 调用。 // // 有关其他详细信息, // 请参阅 MFC 技术说明 33 和 58。 // // CMFC_DLLApp BEGIN_MESSAGE_MAP(CMFC_DLLApp, CWinApp) END_MESSAGE_MAP() // CMFC_DLLApp 构造 CMFC_DLLApp::CMFC_DLLApp() { // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CMFC_DLLApp 对象 CMFC_DLLApp theApp; CWgDlg * pWgdlg; DWORD WINAPI ShowWgdlg(LPARAM lpData) { StartHook(); MSG msg; while (GetMessage(&msg, NULL, 0, 0)){ TranslateMessage(&msg); DispatchMessage(&msg); } return TRUE; } // CMFC_DLLApp 初始化 BOOL CMFC_DLLApp::InitInstance() { CWinApp::InitInstance(); ::CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ShowWgdlg, NULL, NULL, NULL); return TRUE; } //钩子回调函数 LRESULT CALLBACK GameProc(int nCode, WPARAM wParam, LPARAM lParam) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); PMSG pMsg = (PMSG)lParam; if (pMsg->message == WM_KEYUP) { if (pMsg->wParam == VK_HOME) { if (GameForm == NULL) { GameHwnd = pMsg->hwnd; GameForm = new CWgDlg(); GameForm->Create(IDD_DIALOG_WG); GameForm->ShowWindow(TRUE); } else if (GameForm->IsWindowVisible()) { GameForm->ShowWindow(FALSE); } else { GameForm->ShowWindow(TRUE); } } } return CallNextHookEx(0, nCode, wParam, lParam); } //安装钩子 void StartHook() { sleep(5000); AFX_MANAGE_STATE(AfxGetStaticModuleState()); HWND hGame = FindWindow(_T("Notepad++"), NULL); if (hGame == 0) { MessageBox(NULL, _T("未找到"), _T("提示"), NULL); return; } DWORD tid = GetWindowThreadProcessId(hGame, NULL); ::SetWindowsHookEx(WH_GETMESSAGE, GameProc, ::GetModuleHandle(_T("MFC_DLL.dll")), tid); }
标签:
原文地址:http://www.cnblogs.com/wumac/p/4488811.html