#include <windows.h>
HHOOK g_hKey;LRESULT CALLBACK KeyboardProc(
  int code,       // hook code
  WPARAM wParam,  // virtual-key code
  LPARAM lParam   // keystroke-message information
)
{
if(wParam==VK_F2)
{
keybd_event(0x48,MapVirtualKey(0x48,0),0,0);
keybd_event(0x48,MapVirtualKey(0x48,0),KEYEVENTF_KEYUP,0);
keybd_event(0x45,MapVirtualKey(0x45,0),0,0);
keybd_event(0x45,MapVirtualKey(0x45,0),KEYEVENTF_KEYUP,0);
keybd_event(0x4C,MapVirtualKey(0x4C,0),0,0);
keybd_event(0x4C,MapVirtualKey(0x4C,0),KEYEVENTF_KEYUP,0);
keybd_event(0x4C,MapVirtualKey(0x4C,0),0,0);
keybd_event(0x4C,MapVirtualKey(0x4C,0),KEYEVENTF_KEYUP,0);
keybd_event(0x4F,MapVirtualKey(0x4F,0),0,0);
keybd_event(0x4F,MapVirtualKey(0x4F,0),KEYEVENTF_KEYUP,0);
}
if(wParam==VK_F4)
{
UnhookWindowsHookEx(g_hKey);
} return CallNextHookEx(g_hKey,code,wParam,lParam);

}void Start()
{
g_hKey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
}void Stop()
{
UnhookWindowsHookEx(g_hKey);
}问题1:为什么按f2键会连续输出两个hello
2:为什么按F4键后不卸载钩子,然后按F2还会继续输出
3:怎样才能在按F2后每隔一段时间输出hello

解决方案 »

  1.   

    g_hKey要放到共享数据段里,如
    #pragma data_seg(".SHARED") 
    HHOOK g_hKey=NULL; 
    #pragma data_seg() 
    #pragma comment(linker, "/section:.SHARED,rws") 
      

  2.   

    设置一个开关,按F2后打开,弄个BOOL变量就好, 这个变量也要放到共享数据段里
    要每隔一段时间输出就弄个定时器吧,settimer
      

  3.   

    为什么按f2键会连续输出两个hello 
    ==================
    按一次键会触发两次,一个是按下,一个是弹起
      

  4.   

    2:为什么按F4键后不卸载钩子,然后按F2还会继续输出 
    ====================
    这个你看一下它的返回值,看是不是成功了,不成功的话调用GetLastError看一下原因
      

  5.   

    g_hKey要放到共享数据段里,如 
    #pragma data_seg(".SHARED") 
    HHOOK g_hKey=NULL; 
    #pragma data_seg() 
    #pragma comment(linker, "/section:.SHARED,rws") 解决了第二个问题,谢谢!!!我在看看其他地方
      

  6.   

    用lparam判断是否按下,解决了第一个问题。还有dll里定时器问题没能解决,定时器里的时间间隔设置不起作用,我感觉是回调函数没做好,谁能告诉我回调函数里该怎么做?