讨教关于VXD的开发 (200分)

D

drank

Unregistered / Unconfirmed
GUEST, unregistred user!
不知各位大侠是否用过美萍的网管系统,<br>其中的键盘屏蔽相当不错。<br>在整个WIN98系统启动过程中一切键盘事件都没有了,<br>直至美萍的网管系统启动。<br><br>请大侠们赐教
 
无人问径吗?<br>
 
function BlockInput (fBlockInput : boolean) : DWord; stdcall; external 'user32.DLL'; <br><br>{block input/ blockieren} <br><br>procedure TForm1.Button1Click(Sender: TObject); <br>begin <br>&nbsp;BlockInput(true); <br>end; <br><br>{unblock input / Blockierung aufheben} <br><br>procedure TForm1.Button2Click(Sender: TObject); <br>begin <br>&nbsp;BlockInput(false); <br>end; <br><br>
 
我认为,如果你要想屏蔽win98系统启动的时候的键盘,不太现实,因为一个操作系统在启动<br>的时候为了系统的稳定建立,会屏蔽键盘响应的,而你的程序只有在运行的时候才有权得到系统的<br>控制权,所以,只有在系统建立起来的时候,立即加载你自己的程序,在你自己的程序中,屏蔽<br>输入响应。如果要锁定输入,可以考虑用挂钩:<br>function killinput(icode:integer;w:wparam;l:lparam):lresult;stdcall;<br>begin<br>&nbsp;if icode&lt;0 then<br>&nbsp; result:=callnexthookex(hhook,icode,w,l)<br>&nbsp;else<br>&nbsp; result:=1;<br>end;<br>如果锁定可以调用:<br>hhook:=setwindowshookex(WH_JOURNALPLAYBACK,@killinput,hinstance,0);<br>解锁可以调用:<br>unhookwindowhookex(hhook);
 
总算有人回复了,尽管回答不够理想. 谢谢大家<br><br>smilboy,little_mike<br>你们的办法都是在98系统运行了程序之后才取得控制的.这种方法好象不可能实现<br>对98系统启动时的输入进行全程监控和屏蔽.<br>因而从98启动到程序运行的这段时间里, 使用者可以很轻松的终止掉屏蔽的程序.<br><br>不知有没有人对美萍网管大师的输入屏蔽有所研究.
 
美萍网管大师也不是万能的,有一种方法很容易就能破解的。<br>至于它是怎么做到的,关注。<br><br>
 
//键盘屏蔽请用该程序,然后给我分<br>var<br>YourHook: HHOOK;<br><br>//定义用于HOOK的消息,也可以是windows的标准消息<br>const<br>WM_YourMessage = WM_USER + 2000;<br><br>//发送你需要的消息<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>PostMessage(self.Handle,WM_YourMessage,0,0);<br>end;<br><br>//你的HOOK处理函数<br>function YourHookProc(Code: Integer; WParam: Longint; var Msg: TMsg): Longint; stdcall;<br>begin<br>// if (Code = HC_ACTION) then<br>if Msg.Message = WM_YourMessage then<br>//调用你自己的HOOK函数<br>begin<br>showMessage('截获该消息');<br>end;<br>Result := CallNextHookEx(YourHook, Code, WParam, Longint(@Msg));<br>end;<br><br>//安装HOOK<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>YourHook := &nbsp;SetWindowsHookEx(WH_GETMESSAGE, @YourHookProc, 0, GetCurrentThreadID);<br>end;
 
//键盘屏蔽请用该程序,然后给我分<br>var<br>YourHook: HHOOK;<br><br>//定义用于HOOK的消息,也可以是windows的标准消息<br>const<br>WM_YourMessage = WM_USER + 2000;<br><br>//发送你需要的消息<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>PostMessage(self.Handle,WM_YourMessage,0,0);<br>end;<br><br>//你的HOOK处理函数<br>function YourHookProc(Code: Integer; WParam: Longint; var Msg: TMsg): Longint; stdcall;<br>begin<br>// if (Code = HC_ACTION) then<br>if Msg.Message = WM_YourMessage then<br>//调用你自己的HOOK函数<br>begin<br>showMessage('截获该消息');<br>end;<br>Result := CallNextHookEx(YourHook, Code, WParam, Longint(@Msg));<br>end;<br><br>//安装HOOK<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>YourHook := &nbsp;SetWindowsHookEx(WH_GETMESSAGE, @YourHookProc, 0, GetCurrentThreadID);<br>end;
 
请注意问题的关键<br>屏蔽是在98启动的全过程中进行的, 而不是在98运行了你的程序之后才开始的.<br>对于用hook进行键盘消息拦截的实现不是问题的所在.<br>问题在于如何能尽早的进行键盘消息的拦截.<br>不要告诉我放在系统启动的键值RUNSERVICES下.<br><br>sonicyou,金圣叹<br>抢钱????????<br>
 
有一点想法请叫各位<br>是否为了要尽早的在98系统下获取键盘控制权,需要用到VXD之类的技术。<br>仅仅是猜测,手边也没有关于VXD开发的书。<br>因而请路过的朋友提提意见<br><br>我不希望这个问题不了了之。<br>
 
您是否指win98启动时候的F4键之类的呢?<br>如果是,应该修改注册表。
 
晨晨<br>&nbsp; 修改注册表能屏蔽所有的按键吗<br>&nbsp; 或者说能屏蔽Ctrl+alt+del吗<br>
 
&gt;修改注册表能屏蔽所有的按键吗<br>不能<br><br>还是看看用VXD怎么写吧
 
高人何在??
 
无人能给出建议吗
 
必须用Vxd或者类似的service服务,才能在启动时接管键盘<br>而不给用户机会,具体没有做,但是原理肯定是这样的,<br>祝你好运,实现了也告诉我一声
 
同意SS2000。我也很想研究Vxd或WDM,不过最近没时间。<br>你若实现了,也请通知我。
 
很简单的两个driver就可以了<br>vxd比较简单,vtools里面有个函数hook_keyboard,好像是的<br>就能在系统前面接管所有的键盘了<br><br>sys麻烦一点,先要创建一个键盘驱动对象,然后ioattachdevice到键盘对象<br>就能接受所有的键盘irq了
 

Similar threads

D
回复
0
查看
708
DelphiTeacher的专栏
D
D
回复
0
查看
730
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部