如何在程序运行的时禁止用户进行任何键盘和鼠标操作 写了一个键盘模拟程序,想在robot工作的时候暂时锁定键盘,不响应用户的任何键盘和鼠标操作,请问高手应该调用哪个api啊?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以找找全局键盘鼠标钩子,是Windows的Hook技术,Set一个全局的Hook就OK了。另外,这个Java本身是不可能完成的。必须jni。 class CKeyHook:public CObject { private: HHOOK glhHook; public: // 钩子类的构造函数 CKeyHook(); // 钩子类的析构函数 ~CKeyHook(); // 安装钩子函数 BOOL StartHook(HWND hWnd); // 卸载钩子函数 BOOL StopHook(); }; static HWND hIniDlg = NULL;//对话框句柄 CKeyHook::CKeyHook() { glhHook = NULL; } CKeyHook::~CKeyHook() { StopHook(); } LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) { HWND hFocus = ::GetActiveWindow(); //取得当前活动窗口句柄 if(nCode == HC_ACTION && hFocus == hIniDlg)//焦点在对话框 { BOOL bKeyDowm = (lParam & 0x80000000) ? FALSE : TRUE; if(bKeyDowm == TRUE) PostMessage(hFocus,WM_MY_HOTKEY,wParam,lParam);//自定义消息 return 1;//丢弃当前消息 } return 0;//向下传递当前消息 } BOOL CKeyHook::StartHook(HWND hWnd) { BOOL bResult=FALSE; hIniDlg = hWnd; glhHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,NULL,0); if(glhHook!=NULL) bResult=TRUE; return bResult; } BOOL CKeyHook::StopHook() { BOOL bResult=FALSE; if(glhHook) { bResult= UnhookWindowsHookEx(glhHook); glhHook=NULL; } return bResult; } //使用时设置键盘钩子 CKeyHook m_hook; m_hook.StartHook(this->GetSafeHwnd()); LRESULT CMakeDlg::OnMyHotKey(WPARAM wParam,LPARAM lParam) { int nVirtKey = (int) wParam; // virtual-key code long lKeyData = (long)lParam; switch(nVirtKey) { case 'Z': return 0; } } 仅供参考 HelloWorld .javapublic class HelloWorld {public native void displayHelloWorld();//定义本地方法,注意native关键字 static{ System.loadLibrary("hello"); } public static void main(String []args) { new HelloWorld().displayHelloWorld(); }}命令行运行javah -jni HelloWorld生成HelloWorld.h/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloWorld */#ifndef _Included_HelloWorld#define _Included_HelloWorld#ifdef __cplusplusextern "C" {#endif/* * Class: HelloWorld * Method: displayHelloWorld * Signature: ()V */JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif 好象LINUX下也可以实现,只是不知道具体怎么做... 不知道,都没有怎么摸过Linux。 大牛,高手都来..略显复杂 升星散分 如何输出正负数的二进制数,要八位的. java IO问题 怎么将String = "what" 转换成 Unicode 格式如:String = "\u00053......." 初学java,请问一下应该怎样实现这个值的传递?? 基础问题,关于'类'的一些问题 请问在哪里有javax.crypto包下载 请问jpx是可以直接运行的文件吗?等于exe吗? java中的内部类在调用.getClass()时为什么是class java.lang.Class java中父类与子类的问题 请大侠帮我看看???
{
private:
HHOOK glhHook;
public:
// 钩子类的构造函数
CKeyHook();
// 钩子类的析构函数
~CKeyHook();
// 安装钩子函数
BOOL StartHook(HWND hWnd);
// 卸载钩子函数
BOOL StopHook();
};
static HWND hIniDlg = NULL;//对话框句柄
CKeyHook::CKeyHook()
{
glhHook = NULL;
}
CKeyHook::~CKeyHook()
{
StopHook();
}
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
HWND hFocus = ::GetActiveWindow(); //取得当前活动窗口句柄
if(nCode == HC_ACTION && hFocus == hIniDlg)//焦点在对话框
{
BOOL bKeyDowm = (lParam & 0x80000000) ? FALSE : TRUE;
if(bKeyDowm == TRUE)
PostMessage(hFocus,WM_MY_HOTKEY,wParam,lParam);//自定义消息 return 1;//丢弃当前消息 }
return 0;//向下传递当前消息
}
BOOL CKeyHook::StartHook(HWND hWnd)
{
BOOL bResult=FALSE;
hIniDlg = hWnd;
glhHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,NULL,0);
if(glhHook!=NULL)
bResult=TRUE;
return bResult;
}
BOOL CKeyHook::StopHook()
{
BOOL bResult=FALSE;
if(glhHook)
{
bResult= UnhookWindowsHookEx(glhHook);
glhHook=NULL;
}
return bResult;
}
//使用时设置键盘钩子
CKeyHook m_hook;
m_hook.StartHook(this->GetSafeHwnd());
LRESULT CMakeDlg::OnMyHotKey(WPARAM wParam,LPARAM lParam)
{
int nVirtKey = (int) wParam; // virtual-key code
long lKeyData = (long)lParam;
switch(nVirtKey)
{
case 'Z':
return 0;
}
}
仅供参考
public native void displayHelloWorld();//定义本地方法,注意native关键字
static{
System.loadLibrary("hello");
}
public static void main(String []args)
{
new HelloWorld().displayHelloWorld();
}}
命令行运行
javah -jni HelloWorld生成
HelloWorld.h/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif