如何映射回调函数与Java本机访问(JNA)



如何使用WH_FOREGROUNDIDLE和以下回调函数设置windows钩子

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

我正在尝试检测线程/进程何时空闲。

我用以下函数得到了threadProccessId:

GetForegroundWindow -> GetWindowThreadProcessId.
 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);

编辑:添加返回语句

扩展StdCallCallback而不是Callback,以便使用正确的调用约定调用回调。在win32下,宏"CALLBACK"通常解析为_stdcall。

最新更新