setwindowshook,启动钩子。
由参数决定监控哪种消息。
在dll中写调用函数。
详细请参看msdn。我不可能讲得比它更好。
由参数决定监控哪种消息。
在dll中写调用函数。
详细请参看msdn。我不可能讲得比它更好。
解决方案 »
- 如何用C++做带动画的界面?
- 用DoModal()显示的对话框如何在另一线程中强行关闭?
- vc重装不能调试,F5不能使用了,点了没反应?
- 怎么与com exe通信
- 大家帮忙分析一下,这段代码会不会出现异常
- DLL初学者的困惑!~~
- 关于RichEditCtrl字体效果设置
- 怎样通过进程ID获得该进程的主窗体句柄(如果存在的话)?
- DLL显式调用遇到的问题(100分奉上)
- CRecordset 怎么调用MSSQL的存储过程
- 我现在知道开始时间是:某一年,某一月,星期几,并且知道一个时间间隔;现在我要得到:某一个COleDateTime类型的时间 是否在这个时间间隔内?我想了好久,头都晕了,99wb:)!
- 用对话框生成的一个类,怎么打包用在其它的工程中?
{
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;
}
}