内容如题。
解决方案 »
- VC2008SP1修改了CREATESTRUCT的值可是改不了大小
- 关于vc2010 cstring的问题
- vc中执行存储过程
- 如何修改ShowMessageBox()对话框的"是""否"按钮的文字?
- 怎么在listctrl列表框里显示数据库里的数据?
- 急用,如何对tab控件上的标签图标进行编程?万分着急....
- 下面这个警告,看了都叫人心寒:截断呀!把一个大的东西放到一个小的东西里,都截断了.不出错我都有点担心
- 问一个问题:这个Project用C#还是VC++更合适?
- #define WM_XXXXXXXX WM_USER
- VC++bmp图像处理
- 请问大侠如何用Shell_NotifyIcon隐藏MSN Messenger在托盘内的图标?
- ★★★★★★★★★★★★★ ^-^请问: MFC 和 VCL 各自的 “消息机制” 哪个更高效率?
如果你只HOOK本进程得消息,可以把消息回调函数和调用钩子的函数写在一起,也就是只需要写个EXE就可以了。
如果要HOOK全局消息,需要全局钩子,这样,需要把你的HOOK代码注入到系统每个进程里面去。而实现这个最好的方法,就是用DLL来实现。系统会自动把该DLL注入到所有的进程空间中。所以,不一定是必须要写DLL来HOOK,看你用的范围来决定!!!
http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309
用钩子实现重现用户操作全局钩子
http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309
Windows XP系统中如何屏蔽 Ctrl+Alt+Del、Alt+Tab以及Ctrl+Esc键序列
http://www.csdn.net/develop/Read_Article.asp?id=26865深入浅出HOOKS
http://www.csdn.net/develop/Read_Article.asp?id=17914给DLL初学者——全程键盘钩子的一种简单实现
http://www.csdn.net/develop/read_article.asp?id=16499
如果是单对本进程而言,可以不用dll。
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
ULONG* dwExtraInfo;
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;把上面那一段声明加到你的程序里就可以了。
比如说我按每一个键都弹出一个MessageBox
应该怎么做呢?
Module: DisableLowLevelKeys.cpp
Notices: Written 2000 Jeffrey Richter
**************************************************************************/#define _WIN32_WINNT 0x0400
#include <Windows.h>/////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
WPARAM wParam, LPARAM lParam) { BOOL fEatKeystroke = FALSE; if (nCode == HC_ACTION) {
switch (wParam) {
case WM_KEYDOWN: case WM_SYSKEYDOWN:
case WM_KEYUP: case WM_SYSKEYUP:
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
fEatKeystroke =
((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
((p->vkCode == VK_ESCAPE) &&
((p->flags & LLKHF_ALTDOWN) != 0)) ||
((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) &
0x8000) != 0));
break;
}
}
return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam,
lParam));
}/////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) { // Install the low-level keyboard & mouse hooks
HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL,
LowLevelKeyboardProc, hinstExe, 0); // Keep this app running until we're told to stop
MessageBox(NULL,
TEXT("Alt+Esc, Ctrl+Esc, and Alt+Tab are now disabled.\n")
TEXT("Click \"Ok\" to terminate this application and re-enable
these keys."),
TEXT("Disable Low-Level Keys"), MB_OK);
UnhookWindowsHookEx(hhkLowLevelKybd); return(0);
}///////////////////////////// End Of File ///////////////////////////////这是msdn里的一个例程,希望对你有所帮助。
hhook=SetWindowsHookEx (WH_JOURNALRECORD,(HOOKPROC)HookProc, hInst, 0);
WH_JOURNALRECORD属于全局键盘钩子 我用它却不用写入DLL
但是同样的情况在2K下不再成立,dll装载于低2G中,即使是user32.dll这样的系统dll,也是每个进程有一个拷贝,所以你即使修改了本进程的dll,也不能影响到其他进程,要完成全局hook,就必须要将我们的hook dll自动加载到系统中每个进程当中去,对于将来运行的进程,也必须要自动加载才行,注册表中有一个表项,可以指定一个dll在每个进程启动的时候都必须自动加载,这样对于完成api hook稍微方便一点:)