模拟任意按键(驱动级)

昨儿装了一XP的离开模式补丁,愕然发现自己的键盘没有Sleep键……
无奈开始着手写一个模拟按键的小程序,就这么一个小东西算是难住我了。
先后试了 SendKeys 、keybd_event 、PostMessage 都就不能模拟Sleep键,别的都行。

最后终于baidu到了方法~ 奉上。

驱动级模拟:直接读写键盘的硬件端口

在这里我们可以使用一个组件WINIO来完成读写端口操作。什么是WINIO?WINIO是一个全免费的、无需注册的、含源程序的WINDOWS2000 端口操作驱动程序组件(可以到http://www.internals.com/上 去下载)。它不仅可以操作端口,还可以操作内存;不仅能在VB下用,还可以在DELPHI、VC等其它环境下使用,性能特别优异。下载该组件,解压缩后可 以看到几个文件夹,其中Release文件夹下的3个文件就是我们需要的,这3个文件是WinIo.sys(用于win xp下的驱动程 序),WINIO.VXD(用于win 98下的驱动程序),WinIo.dll(封装函数的动态链接库),我们只需要调用WinIo.dll中的函数, 然后WinIo.dll就会安装并调用驱动程序来完成相应的功能。值得一提的是这个组件完全是绿色的,无需安装,你只需要把这3个文件复制到与你的程序相 同的文件夹下就可以使用了。用法很简单,先用里面的InitializeWinIo函数安装驱动程序,然后就可以用GetPortVal来读取端口或者用 SetPortVal来写入端口了。好,让我们来做一个驱动级的键盘模拟吧。先把winio的3个文件拷贝到你的程序的文件夹下,然后在VB中新建一个工 程,添加一个模块,在模块中加入下面的winio函数声明:

 

Code

再添加下面五个过程: 

Code


在From_Load事件加载驱动,Form_FormClosing卸载驱动:

Code

调用方法:

Code


试试看NumLock灯是不是有变化?

将按键改成 Keys.Sleep 就可以休眠了。

原文地址:http://hi.baidu.com/skyue4me/blog/item/bbf913588d57e584810a180d.html

里面还有 keybd_event 、PostMessage 的VB6用法。

PS:有网友说要程序,这就奉上。

https://files.cnblogs.com/mx1700/休眠.rar

posted @ 2008-08-08 15:05  mx1700  阅读(6272)  评论(18编辑  收藏  举报