如何屏蔽系统热键的问题!

tianlei521 2003-07-08 09:09:21
在程序中如何屏蔽掉系统的热键?分不够再加!
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
痞子酷 2003-07-08
  • 打赏
  • 举报
回复
win9x:
SystemParametersInfo(SPI_SCREENSAVERRUNNING,true,NULL,0);//屏蔽

SystemParametersInfo(SPI_SCREENSAVERRUNNING,false,NULL,0);//恢復

win2k,winxp,win2003:
你自己编写吧,很麻烦。
tianlei521 2003-07-08
  • 打赏
  • 举报
回复
不行啊,是不是在不同的操作系统下不一样用啊!
编译失败 2003-07-08
  • 打赏
  • 举报
回复
SystemParametersInfo(SPI_SCREENSAVERRUNNING,true,NULL,0);//屏蔽

SystemParametersInfo(SPI_SCREENSAVERRUNNING,false,NULL,0);//恢復
jishiping 2003-07-08
  • 打赏
  • 举报
回复
你向屏蔽哪些热键?有些可以屏蔽,有些不可以屏蔽(比如Ctrl+Alt+Del,需要用到一些
非常特殊的方法,以前CSDN上有好几个这样的帖子)。对于一般的系统热键,可以通过低级
键盘钩子(系统钩子)来实现。代码需要做在一个DLL里面。下面是实现低级键盘钩子的DLL
的源程序。EXE中调用DLL的EnableKBHook(TRUE);就可以了:

//---------------------------------------------------------------------------
#include <windows.h>
//---------------------------------------------------------------------------
HHOOK OldHook=NULL;
HINSTANCE DllHinst;

BOOL CALLBACK EnableKBHook(BOOL);

int WINAPI DllEntryPoint(HINSTANCE hinst, DWORD dwReason, void*)
{
if (dwReason==DLL_PROCESS_ATTACH)
DllHinst = hinst;
else if(dwReason==DLL_PROCESS_DETACH)
EnableKBHook(FALSE);
return 1;
}

long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *pkbhs;

if (code < 0)
return CallNextHookEx(OldHook,
code, wParam, lParam);

pkbhs = (KBDLLHOOKSTRUCT*) lParam;
if (pkbhs->vkCode==VK_ESCAPE &&
GetAsyncKeyState(VK_CONTROL)<0)
return 1; //Disable CTRL+ESC

if (pkbhs->vkCode==VK_TAB && pkbhs
->flags&LLKHF_ALTDOWN)
return 1; //Disable ALT+TAB

if (pkbhs->vkCode==VK_ESCAPE &&
pkbhs->flags&LLKHF_ALTDOWN)
return 1; //Disable ALT+ESC

if (pkbhs->vkCode==VK_SNAPSHOT)
return 1; //Disable Print Screen

return CallNextHookEx(OldHook,
code, wParam, lParam);
}

__declspec(dllexport)
BOOL CALLBACK __export EnableKBHook(BOOL Enable)
{
if (Enable) {
if (OldHook == NULL)
OldHook = SetWindowsHookEx(
WH_KEYBOARD_LL, (HOOKPROC
)KeyProc, DllHinst, NULL);
return OldHook ? TRUE : FALSE;
}
else {
if (OldHook==NULL) return TRUE;
if (!UnhookWindowsHookEx(OldHook))
return FALSE;
OldHook = NULL; return TRUE;
}
}
tianlei521 2003-07-08
  • 打赏
  • 举报
回复
我要的就是2K和XP下面的啊!怎么实现啊!

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧