[求助]vc里面怎么把系统热键屏蔽掉???

CityofSky 2003-08-12 07:05:55
我用ddraw写了一个游戏,但是这个游戏在运行中的时候,如果你按下了alt+tab
或者ctrl+alt+del的话,游戏就不能再进行了,所以我想把那些热键屏蔽掉!但是我不知道用什么API!
...全文
53 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dream_pzy 2003-08-29
  • 打赏
  • 举报
回复
mark
shootingstars 2003-08-15
  • 打赏
  • 举报
回复
不好意思,上面的代码屏蔽了所有的键盘操作(除ctrl+alt+del外)
所以你使用时需要修改
shootingstars 2003-08-15
  • 打赏
  • 举报
回复
如果你觉得以上答案对你有用,请到
http://expert.csdn.net/Expert/topic/2148/2148457.xml?temp=.7383844
帮我顶一顶,谢谢
shootingstars 2003-08-15
  • 打赏
  • 举报
回复
在win2000屏蔽alt+tab可以采用设置低级键盘钩子实现。
hLLKeyboardHook = SetWindowsHookEx(
WH_KEYBOARD_LL, // Hook in before msg reaches app
(HOOKPROC) LowLevelKeyboardFilterProc,// Hook procedure
hInstance,// This DLL instance
0L // Hook in to all apps
);

LRESULT CALLBACK LowLevelKeyboardFilterProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// Are we expected to handle this callback?
if (nCode == HC_ACTION)
{
// Is this keyboard event "real" or "injected"
// i.e. hardware or software-produced?
KBDLLHOOKSTRUCT *hookStruct = (KBDLLHOOKSTRUCT*)lParam;
if (!(hookStruct->flags & LLKHF_INJECTED)) {
// Message was not injected - reject it!
return TRUE;
}
}

// Otherwise, pass on the message
return CallNextHookEx(hLLKeyboardHook, nCode, wParam, lParam);
}
programmer200x 2003-08-15
  • 打赏
  • 举报
回复
有没有人知道啊?
shootingstars 2003-08-14
  • 打赏
  • 举报
回复
如果在win2000下,想要编程屏蔽掉ctrl+alt+del是不能的。
只能采用替换掉windows本身的dll来实现。
CityofSky 2003-08-14
  • 打赏
  • 举报
回复
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,1,NULL,0);
这种方法我试过,不知道什么原因,不行!
楼上的提到的PreTranslateMessage,因为我是用纯API写的,没有用MFC,所以那个PreTranslateMessage方法能用吗?
CityofSky 2003-08-14
  • 打赏
  • 举报
回复
如果要屏蔽alt+tab呢?有办法吗?
CityofSky 2003-08-14
  • 打赏
  • 举报
回复
那就没有办法了!我确实是在2000下的!
flinming 2003-08-12
  • 打赏
  • 举报
回复
在PreTranslateMessage事件里拦截这些键的消息,比如下面这段代码只能输入0-9
BOOL CCsDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->hwnd==m_edit.m_hWnd)
{
if(pMsg->message==WM_KEYDOWN)
{
int a = pMsg->wParam;
CString b;
b.Format("%d",a);
//AfxMessageBox(b);
this->SetWindowText(b);
if((a<48&&a!=8&&a!=40&&a!=39&&a!=38&&a!=37)||(a>59&&a<96)||(a>105&&a!=187&&a!=189))
{
pMsg->wParam = 0;
}
}
}

return CDialog::PreTranslateMessage(pMsg);
}
flinming 2003-08-12
  • 打赏
  • 举报
回复
在事件PreTranslateMessage拦截这些键消息,比如下面这段代码只能输入0--9
BOOL CCsDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->hwnd==m_edit.m_hWnd)
{
if(pMsg->message==WM_KEYDOWN)
{
int a = pMsg->wParam;
CString b;
b.Format("%d",a);
//AfxMessageBox(b);
this->SetWindowText(b);
if((a<48&&a!=8&&a!=40&&a!=39&&a!=38&&a!=37)||(a>59&&a<96)||(a>105&&a!=187&&a!=189))
{
pMsg->wParam = 0;
}
}
}

return CDialog::PreTranslateMessage(pMsg);
}
gzshd 2003-08-12
  • 打赏
  • 举报
回复
就是楼上所说的:
屏蔽系统热键:
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,1,NULL,0);
恢复系统热键:
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,0,NULL,0);
gentlelotus 2003-08-12
  • 打赏
  • 举报
回复
我曾经看到别人说可以向系统发送一个“当前正在屏幕保护”的消息欺骗系统就可以,但我也不知道怎么发。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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