2011-08-03 13 views
5

は、私はスレッド/プロセスがアイドル状態になったときを検出しようとしていますウィンドウがWH_FOREGROUNDIDLEでフックし、次のコールバック関数は、Javaのネイティブアクセス(JNA)とコールバック関数をマッピングする方法を

DWORD CALLBACK ForegroundIdleProc(__in int code, DWORD wParam, LONG lParam); 

設定するにはどうすればよいです。

私は、次の機能を使用してthreadProccessIdを取得している:

GetForegroundWindow -> GetWindowThreadProcessId. 

答えて

0
public static interface ForegroundIdleProc extends Callback(){ 
    int invoke(int code, int wParam , NativeLong lParam); 
} 

/*....Usage....*/ 
ForegroundIdleProc proc = new ForegroundIdleProc(){ 
    int invoke(int code, int wParam , NativeLong lParam){ 
     /* Handle callback */ 
     /*Make sure you define this function first.*/ 
     return NativeLibrary.Instance.CallNextHookEx(NULL , code , wParam , lParam); 
    } 
} 

NativeLibrary.Instance.SetWindowsHookEx(WH_FOREGROUNDIDLE , proc , etc etc); 

EDIT:return文を追加しましたが。

+0

返品は何ですか?呼び出しボタンをオーバーライドすると、何かを返すように要求されます。 msdnは、ForegroundIdleProcが0を返すときにCallNextHookExを呼び出さなければならないと言っています。私は少しここで混乱しています。 – paktrick

+0

MSDNに従って 'コードがゼロより小さい場合、フックプロシージャはCallNextHookExによって返された値を返さなければなりません。 コードが0以上の場合は、CallNextHookExを呼び出して返される値を返すことを強くお勧めします。そうしないと、WH_FOREGROUNDIDLEフックをインストールした他のアプリケーションはフック通知を受信せず、結果として誤って動作する可能性があります。フックプロシージャがCallNextHookExを呼び出さない場合、戻り値はゼロでなければなりません。 – Abhijith

0

適切な呼び出し規約で呼び出されるコールバックを取得するために、コールバックの代わりにStdCallCallbackを拡張します。 win32では、マクロ "CALLBACK"は通常_stdcallに解決されます。

関連する問題