如何屏蔽消息

zkfly 2005-11-16 05:46:56
我可以用PostMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1)关调显示器,但是如何在之后屏蔽调鼠标和键盘的消息,直到我按到某些特殊的按键。
因为只要键盘动一下或者鼠标动一下,显示器就重新开启。

请教各位高手?

好像我用日志钩子也无效。
...全文
407 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkfly 2005-11-21
  • 打赏
  • 举报
回复
谢谢。我在研究下。
给分了
柯本 2005-11-17
  • 打赏
  • 举报
回复
再给你一个思路:
1.将系统进入ring0级(网上有很多资料介绍)
2.用asm
禁键盘
IN AL,21H
OR AL,02H
OUT 21H,AL // 禁止8259发键中断
开键盘
IN AL,21H
OR AL,0FDH
OUT 21H,AL
这样绕过操作系统对硬件操作,应该没问题了
柯本 2005-11-17
  • 打赏
  • 举报
回复
这是网上抄来的一段话:
要阻止应用程序接收键盘及鼠标事件的话,可以使用BlockInput。需要注意的是,BlockInput函数不会影响异步的键盘输入状态表,也就是说,当输入被阻塞时,调用SendInput函数会改变异步键盘输入状态表。(译者注:原文直译可能让人更加摸不着北,应该是说,BlockInput函数不会影响异步的键盘输入,这个时候,调用SendInput的话,还是会改变异步的键盘输入状态信息)。
-----------------------------------------------------------------------
我理解是BlockInput肯定不可以了,只能再考虑其它方法

kongguangming 2005-11-17
  • 打赏
  • 举报
回复
试试钩子行不行。
zkfly 2005-11-17
  • 打赏
  • 举报
回复
keiy
THX,原来USER32.DLL里面还有这个函数。
为什么键盘的不行哪。
柯本 2005-11-16
  • 打赏
  • 举报
回复
我又试了一下,鼠标可以屏蔽,键盘好像还是不行
柯本 2005-11-16
  • 打赏
  • 举报
回复
function FunctionDetect (LibName, FuncName: String; var LibPointer: Pointer): boolean;
var
LibHandle:tHandle;
begin
Result := false;
LibPointer := NIL;
if LoadLibrary(PChar(LibName)) = 0 then exit;
LibHandle := GetModuleHandle(PChar(LibName));
if LibHandle <> 0 then
begin
LibPointer := GetProcAddress(LibHandle, PChar(FuncName));
if LibPointer <> NIL then Result := true;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
xBlockInput : function (Block: BOOL): BOOL; stdcall;
begin
if FunctionDetect ('USER32.DLL', 'BlockInput', @xBlockInput) then
begin
PostMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
Application.ProcessMessages; // 处理上面的消息
xBlockInput (True); // 禁止键盘鼠标
Sleep(10000); // 等待10秒
xBlockInput (False); // 允许键盘鼠标
end;
end;

1,183

社区成员

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

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