请问大家:我想在我的程序里实现一个功能,即:特定条件下,可以封锁用户键盘和鼠标,使得系统对这两种消息都不响应,怎么才能做到?

kigy 2001-08-04 08:18:04
我发现真的很难实现,各位高手定然有良策吧,呵呵
谢谢

谢谢!!!
...全文
286 点赞 收藏 39
写回复
39 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jiagh 2001-08-08
最好的方法是:用VXD的!
回复
singlerace 2001-08-08
如果是在NT/2000下,其实有一个非常简单的办法:切换桌面。要知道,所有的线程都对应一个桌面,一个线程不能接收属于其他桌面的消息。
HDESK hDesk = ::CreateDesktop( szDesktop,
NULL,
NULL,
DF_ALLOWOTHERACCOUNTHOOK,
MAXIMUM_ALLOWED,
NULL);
if( hDesk ) SwitchDesktop(hDesk);
要想屏蔽Ctrl_Alt_Del也不难,
1)写一个Dll,注入到Winlogon.exe进程。
2)在Dll中,用
HWND hSasWnd = FindWindow(_T("SAS window class"), _T("SAS window") );
_prevWndProc = (WNDPROC)::SetWindowLong( hSasWnd, GWLP_WNDPROC, (LONG)WindowProc );
替换窗口过程。
3)在窗口过程中
UINT WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
case WM_HOTKEY:
return 1; // 返回1将屏蔽Ctrl_Alt_Del; 返回0不会屏蔽
}

return ::CallWindowProc( _prevWndProc, hwnd, uMsg, wParam, lParam );

}

回复
cghao 2001-08-08
http://www.csdn.net/soft/openfile.asp?kind=1&id=8093
这有一个
回复
cghao 2001-08-08
用键盘钩了锁定键盘,

::ClipCursor();
固定鼠标
SystemParametersInfo()
禁止系统热键
回复
luopeng 2001-08-07
ctrl+alt+del这三键可以用SystemParametersInfo这个函数进行屏幕的
回复
wzaen 2001-08-07
关注
回复
kigy 2001-08-07
用 BlockInput(TRUE)可以屏蔽掉除了 ctrl+alt+del 之外的一切按键和鼠标,像死机一样,可是那叁键怎么办啊?
回复
wenjunlin2000 2001-08-07
用VXD
回复
wenjunlin2000 2001-08-07
有钩子!
回复
horsehorse 2001-08-07
Total solution:
http://www.codeguru.com/misc/disable_alt_tab.shtml

Don't forget to give me your points!
回复
HowUCan 2001-08-06
特别关注
回复
lpt 2001-08-06
这个问题是有点答,特别是在NT下拦那3个并发键,谁做出来了,千万要EMAIL给我一份。
回复
无聊客 2001-08-06
用PerTrasnlateMessage屏蔽鼠标和键盘可以吗?
回复
kigy 2001-08-06
to: jink(想吃“软”饭)
钩子,是最先拦到键盘鼠标消息,但是,你只能加一些处理,不管你在处理函数里面是否调用后续的钩子,最终系统都会接手处理键盘鼠标消息,然后将它们显示出来,所以我的钩子是白拦截了啊!
回复
ximuwa 2001-08-05
这位老兄,如果做出来,千万给一份多谢

ximuwa@chinaren.com
回复
mashang 2001-08-05
vxd
回复
kigy 2001-08-05
楼上的方法也不行呀:这是 setcapture 的说明:
Only the foreground window can capture the mouse. When a background window attempts to do so, the window receives messages only for mouse events that occur when the cursor hot spot is within the visible portion of the window. Also, even if the foreground window has captured the mouse, the user can still click another window, bringing it to the foreground.

看来真的很难啊,难道我的程序到次要搁浅了吗????
回复
alexanderyu 2001-08-05
BlockInput试过吗?不过是98以上……

BlockInput
The BlockInput function blocks keyboard and mouse input events from reaching applications.

BOOL BlockInput(
BOOL fBlock // block option
);
回复
jink 2001-08-05
钩子现用现装,还怕什么前面后面的。我看你是概念搞晕了
回复
andyyang1978 2001-08-05
能不能这样做,在需要屏蔽鼠标和键盘消息时,先调用你主窗口的Setcapture函数,这样鼠标和键盘消息就都只被该窗口响应,然后你再处理鼠标键盘消息!
回复
加载更多回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-08-04 08:18
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……