大局 SetWindowsHookEx 对其他程序没效果

全局 SetWindowsHookEx 对其他程序没效果?
全局 SetWindowsHookEx 对其他程序没效果?



BOOL STDCALL SetCallBack(FX_KEYBOARD_CALLBACK* pCallBack)
{
g_Callback = pCallBack;
return 1;
}

LRESULT CALLBACK KeyboardProc(
  int code,       // hook code
  WPARAM wParam,  // virtual-key code
  LPARAM lParam   // keystroke-message information
  )
{
if(VK_F4==wParam && (1==(lParam>>29 & 1)))
    {
SendMessage(g_Hwnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_KeyBoard);
        return 1;

    }
else
{
DWORD curProId = GetCurrentProcessId();
DWORD curThreadId = GetCurrentThreadId();
char szbuf[256]={0};
sprintf(szbuf,"curProId =%ld,curThreadId =%ld",curProId ,curThreadId );

MessageBox ( NULL, szbuf, NULL, MB_OK ) ;
if(g_Callback)
{
g_Callback->DataCallback(g_Callback);
}
}
  return CallNextHookEx ( hKeyboard, code, wParam, lParam ) ;
}

void STDCALL SetHookHwnd(HWND hwnd)
{
g_Hwnd = hwnd;
g_KeyBoard  = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
if(!g_KeyBoard)
{
DWORD dwErr = GetLastError();
int x = 0;
}
}
调用了SetCallBack,可以回调到外面的主程序,但是对其他的程序没有回调出来? 如果把g_Callback去掉,就可以弹出messagebox.
已经把回调函数设置成共享的



#pragma data_seg("MySec")

FX_KEYBOARD_CALLBACK* g_Callback = NULL;
HWND g_Hwnd = NULL;

HHOOK hKeyboard = NULL ;
HINSTANCE hDllInstance = NULL ;

#pragma data_seg()

#pragma comment(linker,"/section:MySec,RWS")

------解决方案--------------------
SetWindowsHookEx 只对当前进程有用。
------解决方案--------------------
你又用CallNextHookEx 把消息继续传给截获的程序了,所以没影响。你也可以不传递回去,就会其截获的程序照成影响了。
------解决方案--------------------
http://topic.****.net/t/20030513/03/1774836.html

这个回答的挺好 你看一下。
------解决方案--------------------
调用了SetCallBack,可以回调到外面的主程序,但是对其他的程序没有回调出来? 如果把g_Callback去掉,就可以弹出messagebox.
已经把回调函数设置成共享的
----------------------------
你应该调用的是在外面显式调用SetHookHwnd啊