我是用在dll中设置HOOK来解决这个问题的,但编译通过,结果却出不来
dll部分代码:
#include "stdafx.h"#pragma comment(linker,"section:Shared,rws")
#pragma data_seg("Shared")
HHOOK hook;
#pragma data_seg()LRESULT CALLBACK KeyboardProc(int code,       // hook code
                              WPARAM wParam,  // virtual-key code
                              LPARAM lParam   // keystroke-message information
                              )
{
    if(code==HC_ACTION && wParam==VK_F12) {
    AfxMessageBox("OOOOOOKKKKKK");}
    return 1;
}extern "C" _declspec(dllexport) BOOL install()
{
    hook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,0);
    if(hook!=NULL)    return TRUE;
    else return FALSE;
}extern "C" _declspec(dllexport) BOOL unstall()
{
    UnhookWindowsHookEx(hook);
    return TRUE;
}
接下来是新建1个Dialog程序,在OnInitDialog里添加如下代码:
HINSTANCE hin=::LoadLibrary("HotKeyHook.dll");
    if(hin==NULL)    AfxMessageBox("load HotKeyHook.dll failed");
    else
    {
        FARPROC prog=::GetProcAddress(hin,"install");
        if(prog!=NULL)(*prog)();
    }
为什么结果出不来,高手帮下啊 
如果有类似代码的,也可以发给我,邮箱:[email protected]
谢谢!!!

解决方案 »

  1.   

    #include "stdafx.h"#pragma comment(linker,"section:Shared,rws")
    #pragma data_seg("shareddata")
    HINSTANCE          g_hInst = NULL;
    HHOOK g_hKeyHook = NULL;
    #pragma data_seg()BOOL APIENTRY DllMain(HANDLE hModule,
    DWORD ul_reason_for_call, 
                      LPVOID lpReserved)
    {
           switch(ul_reason_for_call)
           {
           case DLL_PROCESS_ATTACH:
                g_hInst = (HINSTANCE)hModule;
           case DLL_PROCESS_DETACH:
                break;
           }    return TRUE;
    }LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam);extern "C" __declspec(dllexport) BOOL InstallKeyHook()
    {
    g_hKeyHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hInst,0);

    if(g_hKeyHook == NULL)
    return FALSE; return TRUE;
    }extern "C" __declspec(dllexport) BOOL RemoveKeyHook()
    {
    if(g_hKeyHook)
       return UnhookWindowsHookEx(g_hKeyHook); return FALSE;
    }LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
    {
        if(wParam == VK_F12)
           MessageBox(NULL, "test", "Tips", MB_OK);    return CallNextHookEx(g_hKeyHook, code, wParam, lParam);
    }
      

  2.   

    谢谢,可以运行了。
    想问下,问题到底出在哪里?
    是没定义     HINSTANCE g_hInst = NULL;的原因?
    还是没这个   return CallNextHookEx(......);    的原因?
      

  3.   

    有两个地方值得怀疑一是没有加实例句柄
    二是你多加了一判断code==HC_ACTION具体我也没有测试,只是拿我原的代码改了一下,我想应该没有问题.