SetWindowsHookEx的第四个参数到底是线程ID还是进程ID,高人给指点一下。看看下面的例子,想屏蔽扫雷中的鼠标作用。这是HOOKDLL1.CPP#include "stdafx.h"
#include<windows.h>HHOOK g_hMouse;
LRESULT CALLBACK MouseProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
return 1;
}void SetHook(DWORD THREADID)
{
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("HOOKDLL"),THREADID);}这个是加勾子的原程序
void CHOOKMINERDlg::OnButton1()
{
// TODO: Add your control notification handler code here hMineWnd = ::FindWindow(MINE_WINDOW_CLASS, MINE_WINDOW_TITLE); //查找窗口
if( hMineWnd<=0 )
return ; ::GetWindowThreadProcessId(hMineWnd, &dwMineProcId); //获取窗口进程ID
if( !dwMineProcId )
return ;
SetHook(dwMineProcId);
}
为什么这样做不可以呢??
#include<windows.h>HHOOK g_hMouse;
LRESULT CALLBACK MouseProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
return 1;
}void SetHook(DWORD THREADID)
{
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("HOOKDLL"),THREADID);}这个是加勾子的原程序
void CHOOKMINERDlg::OnButton1()
{
// TODO: Add your control notification handler code here hMineWnd = ::FindWindow(MINE_WINDOW_CLASS, MINE_WINDOW_TITLE); //查找窗口
if( hMineWnd<=0 )
return ; ::GetWindowThreadProcessId(hMineWnd, &dwMineProcId); //获取窗口进程ID
if( !dwMineProcId )
return ;
SetHook(dwMineProcId);
}
为什么这样做不可以呢??
解决方案 »
- MFC listctrl 背景透明,选中行的问题(100分求助)
- 关于控件透明背景和闪烁问题
- AnimateWindow函数为什么对CRichEditCtrl控件不起作用???
- 请教关于Windows下ASCII码的问题。
- 怎么使用datagrid?
- 关于CArray、CList的一些问题!请大家帮忙解答!谢谢!
- 两组字符串做比较的问题(求最佳算法)
- 奇怪,为什么我得到的时间总是早了8个小时呢?谢谢指教
- 现在要做三维分子和原子模型的程序,不知道都用哪些技术,望高手指点!
- C++操作excel,为什么workbooks没有open方法?
- 搞半天没搞懂的问题(新来的没分以后补上)
- vc怎么实现远程键盘记录及远程Shell
int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId
);得用线程 ID
LPDWORD lpdwProcessId
);你传的是进程ID,当然不对。GetWindowThreadProcessId的返回值才是线程IDThe return value is the identifier of the thread that created the window. 你要这么改DWORD dwThreadId=::GetWindowThreadProcessId(hMineWnd, &dwMineProcId); //获取窗口进程ID
if( !dwMineProcId )
return ;
SetHook(dwThreadId);
HWND hWnd,
LPDWORD lpdwProcessId
);Return ValueThe return value is the identifier of the thread that created the window.