2009-08-23 4 views
0

私はソフトウェアテスト自動化ソフトウェアを作りたいと思っています。私はそれをWindows Hooksで試しています。Windows Journal Record Hookのヘルプが必要

私は以下のCコードを作成しました。それを修正する方法を教えてもらえますか?

#include "windows.h" 

// the call back function 
LRESULT CALLBACK JournalRecordProc(int code, WPARAM wParam, LPARAM lParam) 
{ 

    HHOOK hhk = 0; 

    if (code > 0) 
    { 
     // save Data in File 
    } 

    if (code < 0) 
    { 
     // work done: now pass on to the next one that does hooking 
     CallNextHookEx(hhk, code, wParam, lParam); 
    } 

    /* 
    if (code ==) 
    { 
     // ESC button pressed -> finished recording 
     UnhookWindowsHookEx(hhk); 
    } 
    */ 

} 

int main() 

{ 
    int iRet = 0; 

    HHOOK hHook = 0; 

    HINSTANCE hMod = 0; 

    HOOKPROC (*hHookProc)(int, WPARAM, LPARAM); 

     hHookProc = &JournalRecordProc; 

    // type of hook, callback function handle, hinstance [dll ?], 0 for systemwide 
    hHook = SetWindowsHookEx(WH_JOURNALRECORD, hHookProc, hMod, 0); 

    return iRet; 
} 

私はこれをコンパイルするとき、私は、コンパイラのエラーを取得:

error C2440: '=': 'LRESULT (__stdcall 
*)(int,WPARAM,LPARAM)' kann nicht in 'HOOKPROC (__cdecl 
*)(int,WPARAM,LPARAM)' konvertiert werden (could not be converted) 

error C2440: 'Funktion': 'HOOKPROC (__cdecl *)(int,WPARAM,LPARAM)' kann nicht in 'HOOKPROC' konvertiert werden (could not be converted) 

warning C4024: 'SetWindowsHookExA': Unterschiedliche Typen für formalen und übergebenen Parameter 2 

答えて

2

別々hHookProc変数を宣言する必要はありません - ちょうど直接SetWindowsHookExにあなたの手順を渡す:

hHook = SetWindowsHookEx(WH_JOURNALRECORD, JournalRecordProc, hMod, 0); 

あなたは有効なモジュールハンドルが必要になります:

HINSTANCE hMod = GetModuleHandle(NULL); 

これらの編集を行い、JournalRecordProcが値を返すようにすると、すべてコンパイルされ、私のために働きます(とにかくSetWindowsHookExが成功します)。

+0

ありがとうございました!私は関数名(JournalRecordProc - 関数ハンドル用)をSetWindowsHookEx()のfunctioncallに直接入れることができるかどうか分からなかった:-) –