可以用HOOK或子类化
如果只是捕获的话用HOOK比较方便,但要用代码代替可能就要用子类化了,但是只能用于已经得到窗口句柄的情况下,你查一下这几个函数的用法应该就行了
SetWindowsHook ,SetWindowLong 与 GetAsyncKeyState
以上只是我的想法,并没有实际做过
如果只是捕获的话用HOOK比较方便,但要用代码代替可能就要用子类化了,但是只能用于已经得到窗口句柄的情况下,你查一下这几个函数的用法应该就行了
SetWindowsHook ,SetWindowLong 与 GetAsyncKeyState
以上只是我的想法,并没有实际做过
解决方案 »
- vs2005,找不到ctime.h文件
- 求VC下用代码解包格式为GZIP的压缩包
- XP下如何改变快速启动栏中图标的顺序?
- FillRect,BitBlt等函数的内部可能实现?
- 如何在chtmlview 中加入INewWindowManager接口,来监视showmodeldialog弹出的窗口程序?
- 哪位给讲一下CreateFile的用法,越详细越好哦
- 如何编程实现对CTreeCtrl的节点进行多选?
- 怎样才能使用 iphlpapi.dll ??
- 3道汇编题目,麻烦各位大虾帮忙!(急)
- 如何获得EDITVIEW中的某一行文本? 急急急!!!马上给分!
- !!很简单--求救!!
- 怎样用vc生成文件
http://www.csdn.net/expert/topic/119/119578.shtm
要是截全部进程的话只好架钩子了。
#include "windows.h"
#define VK_X 0x58
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
if (!CreateMutex(NULL,TRUE,"No Previous Instance!"))
{
MessageBox(NULL,"创建Mutex失败!","NoPrev",MB_OK|MB_SYSTEMMODAL);
return FALSE;
}
if (GetLastError()==ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,"已有NoPrev的一个实例在运行, 当前实例将被终止!",
"NoPrev",MB_OK|MB_SYSTEMMODAL);
return FALSE;
}
if(!RegisterHotKey(NULL,0x00001,MOD_CONTROL|MOD_SHIFT,VK_X))
{
MessageBox(NULL,"注册热键Ctrl+Shift+X失败!",
"NoPrev",MB_OK|MB_SYSTEMMODAL);
return FALSE;
}
MessageBox(NULL,"NoPrev已启动!\n\n按下热键Ctrl+Shift+X将终止NoPrev.",
"NoPrev",MB_OK|MB_SYSTEMMODAL);
MSG msg;
while (GetMessage(&msg,NULL,0,0))
{
switch (msg.message)
{case WM_HOTKEY:
if (int(msg.wParam)==0x0001)
if (MessageBox(NULL,"终止NoPrev?",
"NoPrev",MB_YESNO|MB_SYSTEMMODAL)==IDYES)
return TRUE;
}
}
return TRUE;
}