我的dll部分代码:
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
SendMessage(g_hWnd, WM_KEYHOOK, wParam, lParam);
return CallNextHookEx(g_hMyHook, code, wParam, lParam);
}long WINAPI BeginHook(HWND hWnd)
{
g_hinst = (HINSTANCE)::GetModuleHandle("KeyHook.dll");
g_hMyHook = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, g_hinst, 0);
int i = ::GetLastError();
if(g_hMyHook != NULL)
{
g_hWnd = hWnd;
return 0;
}
else
{
g_hWnd = 0;
return 1;
}
}long WINAPI EndHook()
{
int iSuccess = 0;
iSuccess = ::UnhookWindowsHookEx(g_hMyHook);
if(iSuccess != 0)
{
return 0;
}
else
{
int i = ::GetLastError();
return 1;
}
}调用的exe的部分代码:
void CTestHookDlg::OnButton1()
{
// TODO: Add your control notification handler code here
// HINSTANCE hLib = ::LoadLibrary("KeyHook.dll");
// PBEGINHOOK pBeginHook = (PBEGINHOOK)::GetProcAddress((HMODULE)hLib, "BeginHook");
// pBeginHook(this->m_hWnd);
BeginHook(this->m_hWnd);
}void CTestHookDlg::OnButton2()
{
// TODO: Add your control notification handler code here
EndHook();
}LRESULT CTestHookDlg::MyWndProc(WPARAM wParam, LPARAM lParam)
{
::MessageBox(NULL, "a", "b", 0);
return 0;
}
问题是,我的钩子只对测试exe有效,在其他地方按键没任何反应,变成了局部钩子。
谁要是能帮我解决这个问题,我给他一元真钱:D:D:D:D:D
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
SendMessage(g_hWnd, WM_KEYHOOK, wParam, lParam);
return CallNextHookEx(g_hMyHook, code, wParam, lParam);
}long WINAPI BeginHook(HWND hWnd)
{
g_hinst = (HINSTANCE)::GetModuleHandle("KeyHook.dll");
g_hMyHook = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, g_hinst, 0);
int i = ::GetLastError();
if(g_hMyHook != NULL)
{
g_hWnd = hWnd;
return 0;
}
else
{
g_hWnd = 0;
return 1;
}
}long WINAPI EndHook()
{
int iSuccess = 0;
iSuccess = ::UnhookWindowsHookEx(g_hMyHook);
if(iSuccess != 0)
{
return 0;
}
else
{
int i = ::GetLastError();
return 1;
}
}调用的exe的部分代码:
void CTestHookDlg::OnButton1()
{
// TODO: Add your control notification handler code here
// HINSTANCE hLib = ::LoadLibrary("KeyHook.dll");
// PBEGINHOOK pBeginHook = (PBEGINHOOK)::GetProcAddress((HMODULE)hLib, "BeginHook");
// pBeginHook(this->m_hWnd);
BeginHook(this->m_hWnd);
}void CTestHookDlg::OnButton2()
{
// TODO: Add your control notification handler code here
EndHook();
}LRESULT CTestHookDlg::MyWndProc(WPARAM wParam, LPARAM lParam)
{
::MessageBox(NULL, "a", "b", 0);
return 0;
}
问题是,我的钩子只对测试exe有效,在其他地方按键没任何反应,变成了局部钩子。
谁要是能帮我解决这个问题,我给他一元真钱:D:D:D:D:D
解决方案 »
- VC 如何实现类似Windows记事本的"转到"功能!
- 【MFC】 GDI绘图
- h.264中提取运动矢量的问题(int16_t和int有何差别)
- Winse install system 9.0的问题
- 关于继承自CScrollView的文件显示。
- 嵌套对话框问题
- 很不好意思的问题~~~~请教大家
- 使用media player控件,如何获取当前的播放时间
- 编辑对话框资源时的复制问题
- ★★★快来抢500分★★★:重赏:解决下面2个问题者,除每道题100分外,加送300分,先答先得 url:topic/371/371311.shtm,topic/370/370580.shtm
- mfc 正规动态链接库在pb里为什么不能用?
- 在网上下载的传奇游戏的源码的注释怎么都是乱码啊 ???
你这样试试,要是好用,记得给我一元真钱。
在你的代码前加上#pragma data_seg("MySec")
HWND g_hWnd=NULL;
#pragma data_seg()#pragma comment(linker,"/section:MySec,RWS")祝你成功!!
[email protected]
g_hWnd应该能在进程间共享,否则在其他进程中无法给你的exe窗口发送消息。