关于WinUser键盘鼠标钩子,该如何处理
关于WinUser键盘鼠标钩子
以上代码
为什么执行 User32.INSTANCE.GetMessage(msg,null,0,0);
才有HOOKPROC的callBack调用?
有没有去掉GetMessage就可调用callBack的方法
主要是因为GetMessage阻塞了线程;
MFC的系统钩子我也看过了
对这块很不理解
抛砖引玉 多指教分多多送
------解决方案--------------------
没玩过jna,帮你顶下。
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.platform.win32.WinDef.HMODULE;
import com.sun.jna.platform.win32.WinDef.LRESULT;
import com.sun.jna.platform.win32.WinDef.WPARAM;
import com.sun.jna.platform.win32.WinUser.HHOOK;
import com.sun.jna.platform.win32.WinUser.HOOKPROC;
import com.sun.jna.platform.win32.WinUser.KBDLLHOOKSTRUCT;
import com.sun.jna.platform.win32.WinUser.LowLevelKeyboardProc;
import com.sun.jna.platform.win32.WinUser.MSG;
/**
* @author Administrator
*/
public class MyHooker extends Thread{
private static HHOOK kHHOOK=null;
private static HHOOK mHHOOK=null;
private static HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
private static MSG msg=new MSG();
public void run(){
HOOKPROC kHOOK=new LowLevelKeyboardProc(){
public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam) {
MyThread.i=0;
return User32.INSTANCE.CallNextHookEx(kHHOOK, nCode,wParam,lParam.getPointer());
}
};
HOOKPROC mHOOK=new LowLevelKeyboardProc(){
public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam) {
MyThread.i=0;
return User32.INSTANCE.CallNextHookEx(mHHOOK, nCode,wParam,lParam.getPointer());
}
};
kHHOOK= User32.INSTANCE.SetWindowsHookEx(WinUser.WH_KEYBOARD_LL,kHOOK,hMod,0);
mHHOOK= User32.INSTANCE.SetWindowsHookEx(WinUser.WH_MOUSE_LL,mHOOK,hMod,0);
System.out.println("^^^^^^^^^^^^^^^^");
User32.INSTANCE.GetMessage(msg,null,0,0);
/*while(true){
boolean a=User32.INSTANCE.PeekMessage(msg,null,0,0,1);
System.out.println("PeekMessage:"+a);
}*/
System.out.println("$$$$$$$$$$$$$$$$");
}
public static void unHook(){
System.out.println("unHook start...");
//User32.INSTANCE.DispatchMessage(msg);
User32.INSTANCE.UnhookWindowsHookEx(kHHOOK);
User32.INSTANCE.UnhookWindowsHookEx(mHHOOK);
System.out.println("unHook end");
}
}
以上代码
为什么执行 User32.INSTANCE.GetMessage(msg,null,0,0);
才有HOOKPROC的callBack调用?
有没有去掉GetMessage就可调用callBack的方法
主要是因为GetMessage阻塞了线程;
MFC的系统钩子我也看过了
对这块很不理解
抛砖引玉 多指教分多多送
------解决方案--------------------
没玩过jna,帮你顶下。