Как отобразить функцию обратного вызова с собственным доступом Java (JNA) - PullRequest
5 голосов
/ 03 августа 2011

Как я могу установить хук Windows с WH_FOREGROUNDIDLE и следующие функции обратного вызова

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

Я пытаюсь определить, когда поток / процесс простаивает.

Я получил threadProccessId, используя следующие функции:

GetForegroundWindow -> GetWindowThreadProcessId.

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Расширьте StdCallCallback вместо Callback, чтобы вызвать обратный вызов с правильным соглашением о вызовах. Под win32 макрос "CALLBACK" обычно преобразуется в _stdcall.

0 голосов
/ 04 августа 2011
 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);

РЕДАКТИРОВАТЬ: добавлен оператор возврата.

...