关于远程控制鼠标和键盘的那些事
在我们使用远程电脑控制软件时候,见得最多的除了画面,就是鼠标和键盘的操作了,那些远程控制的软件是如何工作的呢?经过与秒点远程控制工程师的深入交流,小编今天给大家讲讲其中原理。
其实远程控制软件的工作原理就是:A端操作,然后通过网络传输到B端,B端收到消息后做出相应的动作;然后动作的结果再通过画面形式传输回A端显示出来。今天我们就来讲讲鼠标和键盘在windows下远程控制的实现。有多种方法可以实现鼠标和键盘模拟,我们就介绍几种比较典型的。
1、局部级模拟
局部级模拟就是鼠标键盘事件只能把消息发送到指定的窗口。那么它是如何工作的呢?最直接的方法就是:直接伪造一个键盘消息发给目标程序。Windows提供了几个这样的API函数可以实现直接向目标程序发送消息的功能,常用的有SendMessage和PostMessage,它们的区别就是PostMessage函数异步的消息丢给目标程序后就不管了,而SendMessage同步的消息发出去后,还要等待目标程序的返回结果,如果一直没有结果返回,就会阻塞在那里,导致线程阻塞。所以模拟鼠标键盘消息最好是用PostMessage函数是比较好的选择。
但是,PostMessage这个方法发送消息,要事先知道对方的窗口句柄。要知道对方的窗口句柄就要使用到另外一函数,那就是FindWindow来查找目标窗口。HWND FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName);这个方法FindWindow局限性比较大,就是要事先知道这个窗口的类名或者窗口名。在远程控制过程中我们要对不同的窗口做控制,而且还要知道这个窗口的信息才能有针对性的发消息才行。所以这不是一个很好的方案。这种方法以只适合做一些比较特别的动作。比如我们的窗口已经最小化到拖盘了,用户以为客户端还没启动,就会在桌面快捷方式中双击打开,但是我们程序又是不支持多开的,这种情况下,就用我们现在方法就可以解决这个问题。
HWND hwnd = FindWindow(null,&34;);
if (hwnd != NULL) {
PostMessage(hwnd,WM_SHOWWINDOW ,0,0)
SetForegroundWindow(hwnd);
}
当对方窗口收到消息的时候就可以做显示到前台了。
2、全局级模拟
比如mouse_event,keybd_event,SendInput,但是微软建议用SendInput代替另外两个,这里我们就讲讲SendInput举个例子,我们平时用的比较多的Win + D,可以快速切换到桌面。那这个一套按键是如何模拟的呢?
INPUT inputs[4] = {};
ZeroMemory(inputs,sizeof(inputs));
inputs[0].type = INPUT_KEYBOARD;åå
安装步骤: 1、在电脑关机的状态下,先把无线键盘的无线USB接口与电脑主机的USB接口相连接,这时候你的键盘已经接收到电脑的无线信号了。 2、无线键盘因为没有电源线的连接,所以我们需要给电脑安装电池,这时候把无线。
inputs[0].ki.wVk = VK_LWIN;
inputs[1].type = INPUT_KEYBOARD;
inputs[1].ki.wVk = VK_D;
inputs[2].type = INPUT_KEYBOARD;
inputs[2].ki.wVk = VK_D;
inputs[2].ki.dwFlags = KEYEVENTF_KEYUP;
inputs[3].type = INPUT_KEYBOARD;
inputs[3].ki.wVk = VK_LWIN;
inputs[3].ki.dwFlags = KEYEVENTF_KEYUP;
用接收器连接。需要的工具:正常运行的电脑。无线键盘和接受器。两节有电的五号电池。具体步骤:1、首先要对无线键盘进行连接,无线键盘的连接方法很简单。在关机的状态下,将无线键盘的无线USB接口与电脑主机的USB借口相连接,。
UINT uSent = SendInput(ARRAYSIZE(inputs),inputs,sizeof(INPUT));
if (uSent != ARRAYSIZE(inputs)) {
}
那我们秒点远控如何解决这个问题呢,那么就是我们接下来要讲的BOSS级的驱动级模拟了。
驱动级模拟
什么是驱动级模拟呢?首先,要普及一下设备驱动程序的知识了。
驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备进行相互通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。因此,驱动程序被比作“ 硬件的灵魂”、“硬件的主宰”、“硬件和系统之间的桥梁”等。
在系统内核里面操作I/O端口,给连接键盘的集成电路发送指令,让它产生一个按下按键的信息,这样你的模拟输入对于所有程序来说就是从一个真实的设备发出的,而且可以绕过很多保护。从而达到模拟鼠标和键盘消息的输入事件。
我们在键盘上按下一个按键时,键盘会产生一个硬件中断,Windows会捕捉到这个中断,从而得知键盘上有了操作,然后由驱动来读取及处理键值。驱动程序的入口函数是
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject。
IN PUNICODE_STRING RegistryPath
)
无线键连接电脑的步骤,具体如下:1、给无线键盘装上电池;2、将无线接收器插在电脑的USB接口处;3、等待无线键盘安装完驱动就完成了。无线键盘是键盘盘体与电脑间没有直接的物理连线,通过红外线或无线电波将输入信息传送给。
里面主要的工作:
1、注册驱动卸载。
企业回连接器,即CONNECTOR。国内亦称作接插件、插头和插座。一般是指电连接器。即连接两个有源器件的器件,传输电流或信号。 连接器是我们电子工程技术人员经常接触的一种部件。它的作用非常单纯:在电路内被阻断处或孤立不通的电路之间,架起沟通的。
2、注册通用IRP分发。
3、注册读取IRP分发。
4、注册电源IRP分发。
5、注册即插即用IRP分发。
6绑定设备。
如果我们想对键盘的输入做一些改变,比如替换键值,就可以在第3步的时候读取键盘的输入值,并做相应的替换就行了。这个时候对于电脑操作系统看起来,传送过去的键盘鼠标信号,看起来都是物理的鼠标与键盘.