一套键盘如何控制多台电脑?

article/2025/10/25 21:57:58

昨天在群里看见一个小伙伴问一套键盘如何控制多台电脑?正好勾起以前学习Windows时候的乐趣,其实这个也做过,是我的一个朋友需要,实现原理也比较简单,大概就是通过键盘钩子钩住按键,通过Socket发送到其他电脑上,其他电脑开始模拟按键,鼠标也是一样,大概会用法到以下API。

啥是钩子

Windows中的窗口程序是基于消息机制,事件驱动的,根据不同的消息完成不同的功能,钩子就是拦截Windows的某些消息,在这个消息到达指定窗口前会拦截下来,我们可以从中获取我们想要的信息,可以加工改变这个消息,也可以不作处理继续传递下去,还可以强制结束消息的传递。

以前的键盘记录程序也应该用到这个技术,但也有可能更高深,因为现在大部分出名软件都有反钩子技术,如QQ,但TIM好像可以,无法使用普通的技术拦截QQ窗口中输入的密码,反之其他程序可以。

SetWindowsHookEx

最开始我们会通过这个函数来增加一个消息钩子,第一个参数就是安装的钩子类型,有非常多,如果键盘的话我们选择WH_KEYBOARD_LL。

HHOOK SetWindowsHookExA(int       idHook,HOOKPROC  lpfn,HINSTANCE hmod,DWORD     dwThreadId
)

其余参数分别是 钩子子程的地址指针、应用程序实例的句柄、与安装的钩子子程相关联的线程的标识符, 如果为0,钩子子程与所有的线程关联,即为全局钩子。

CallNextHookEx

将挂钩信息传递到当前挂钩链中的下一个挂钩过程。

LRESULT CallNextHookEx(HHOOK  hhk,int    nCode,WPARAM wParam,LPARAM lParam
)

代码示例

Option Explicit
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lparam As Any) As Long
Private Const HC_ACTION = 0Public Const WH_KEYBOARD_LL As Long = 13
Public Const WM_KEYDOWN As Long = &H100
Public Const WM_KEYUP As Long = &H101
Public Const WM_SYSKEYDOWN As Long = &H104
Public Const WM_SYSKEYUP As Long = &H105
Public Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End TypePublic hHook As Long
Dim logTv As TextBoxPublic Sub EnableHook()Set logTv = Form1.Text1If hHook = 0 ThenhHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookProc, App.hInstance, 0)End If
End Sub
Public Sub FreeHook()If hHook <> 0 ThenCall UnhookWindowsHookEx(hHook)hHook = 0End If
End Sub
Public Function HookProc(ByVal nCode As Long, ByVal wParam As Long, lparam As KBDLLHOOKSTRUCT) As LongIf wParam = WM_KEYDOWN ThenlogTv.Text = logTv.Text & vbCrLf & "键盘按下  " & Chr(lparam.vkCode)ElseIf wParam = WM_KEYUP ThenlogTv.Text = logTv.Text & vbCrLf & "键盘抬起  " & Chr(lparam.vkCode)End IflogTv.SelLength = Len(logTv.Text)HookProc = CallNextHookEx(hHook, nCode, wParam, lparam)End Function

在这里插入图片描述

剩下的就是通过Socket发送到其他电脑上,使用keybd_event来模拟键盘按下、抬起。但是这个函数现在貌似被SendInput取代了。SendInput并没有研究过。

void keybd_event(BYTE      bVk,BYTE      bScan,DWORD     dwFlags,ULONG_PTR dwExtraInfo
);

http://chatgpt.dhexx.cn/article/8llcHyTv.shtml

相关文章

高效办公|用一套键鼠控制两台电脑解决方案

主要有两种方案&#xff0c;一种软件方案&#xff0c;一种硬件方案。&#xff0c;硬件方案要花钱&#xff0c;但软件肯定有方法能够白嫖。 软件篇 方案一&#xff1a;Synergy 官网&#xff1a;Synergy - Share one mouse & keyboard across computers 不过这是一个收费软…

一套键鼠控制多台电脑的使用方法,快收藏

如何使用一套键鼠控制多台电脑&#xff1f;小编在这里根据网络情况提四种方法&#xff0c;希望能帮到大家。 方案一&#xff1a;同一局域网内 *鼠标共享软件 软件&#xff1a;ShareMouse或Mouse without borders 第一步&#xff1a;分别在两台电脑上安装软件 第二步&#xff1a…

1个鼠标和1个键盘控制2台电脑(windows和linux系统)

由于写文章和跑实验的需要&#xff08;在windows下写文章比较方便&#xff0c;linux下跑实验比较方便&#xff09;&#xff0c;弄来了两台电脑。一个linux的系统&#xff0c;用来跑程序&#xff0c;一个windows系统&#xff0c;用来看文章和写文章。但是由于使用2个键盘和鼠标不…

QT QTime显示时间

前言&#xff1a; 转载请附上连接,本帖原创请勿照抄。 Qt中利用QTime类来控制时间 #include <QDateTime> QDateTime time QDateTime::currentDateTime(); QString str time.toString("yyyy-MM-dd hh:mm:ss dddd"); ui->label->setText(str); 其它格…

学习QT之QTime类

QTime类的currentTime()函数用于获取当前的系统时间&#xff1b;QTime的toString()函数用于将获取的时间转换为字符串类型。为了方便显示&#xff0c;toString()函数的参数需指定转换后时间的显示格式。 H/h&#xff1a;小时&#xff08;若使用H表示小时&#xff0c;则无论何时…

QTime::singleShot实现定时器

[static] void QTimer::singleShot(int msec, const QObject *receiver, const char *member) singleShot函数是一个静态函数&#xff0c;表示只会在被调用时会执行一次操作。其中msec参数是时间&#xff0c;单位为ms&#xff0c;借助此函数可以简单实现一个定时器&#xff0c;…

QT定时器之QTimer类加QTime类制作秒表

一、QTime时间类 QTime类提供时钟时间函数。 QTime对象包含一个时钟时间&#xff0c;即从午夜开始的小时、分钟、秒和毫秒数。它可以从系统时钟中读取当前时间&#xff0c;并测量运行时间的跨度。它提供了比较时间和通过添加若干毫秒来操作时间的函数。QTime使用24小时时钟格式…

时间类QTime/QTimer

目录 时间类QTime/QTimer 20210119 实例&#xff1a;电子时钟 代码及详细解释如下&#xff1a; 【digiclock.cpp】 【digiclock.h】 【main.cpp】 备注Configure Project 时间类QTime/QTimer 20210119 QTime的currentTime(); //获取当前的系统时间 QTime的…

QT学习:QTime类

QTime的currentTime()&#xff1a;用于获取当前的系统时间; QTime 的toString()&#xff1a;用于将获取的当前时间转换为字符串类型。 为了便于显示&#xff0c;toString()函数的参数需指定转换后时间的显示格式。 显示格式有如下几种&#xff1a; (1)H/h: 小时(若使用H表示小时…

【Qt开发】QTime类

QTime类为用户提供一系列时间的函数&#xff0c;封装的很全面&#xff0c;几乎满足了各种时间的需求。 常用方法介绍 1.QTime addMSecs(int ms) const 当前时间增加毫秒&#xff0c;ms可为负 2.QTime addSecs(int s) const 当前时间增加秒&#xff0c;s可为负 3.int elapsed…

Qt扫盲-QTime理论总结

QTime理论总结 一、概述二、使用1. 属性获取2. 时间加减3. 字符串与QTime互转 一、概述 QTime对象包含一个时钟时间&#xff0c;可以用小时数、分钟数、秒数和毫秒数来表示。它提供了比较时间和通过添加毫秒数来操作时间的函数。 QTime使用24小时时钟格式&#xff1b;它没有A…

0004:Qt常用类 - QTime

Qt常用类 - QTime 1 开发环境 在介绍内容之前&#xff0c;先说明一下开发环境&#xff0c;如下图&#xff1a; Qt版本&#xff1a;Qt5.3.2&#xff1b; Qt开发工具&#xff1a;Qt Creater 3.2.1&#xff1b; Qt构建工具&#xff1a;Desktop Qt 5.3 MinGW 32bit&#xff1b; …

QTime

一、描述 QTime 对象包含一个时钟时间&#xff0c;它可以表示为自午夜以来的小时数、分钟数、秒数、毫秒数。 它提供了比较时间和通过添加毫秒数来操纵时间的功能。 QTime 对象应该通过值而不是通过引用 const 来传递。 二、成员函数 1、QString toString(const QString &…

双边滤波+ 通俗自己理解

之前转了一篇文章&#xff1a;http://blog.csdn.net/chenlufei_i/article/details/78892758 详细的讲解了一下双边滤波的原理以及公式&#xff0c;这里主要总结一下自己的通俗理解&#xff0c;所谓双边滤波&#xff0c;就是在均值或者说普通加权滤波&#xff08;如高斯滤波&am…

双边滤波原理与参数的理解+双边滤波matlab实现

基本思路 高斯滤波是一种常用而且简单的降噪算法。但其缺点也很明显&#xff0c;就是会不加区分地将噪声与图像边缘等细节一起平滑处理。 而双边滤波是基于高斯滤波进行改进的方法。在高斯滤波的基础上&#xff0c;双边滤波引入了像素值相似性的权值&#xff0c;使得滤波的结…

双边滤波(Bilateral filter)原理介绍及matlab程序实现

双边滤波 1、原理介绍 双边滤波由C. Tomasi在1998年提出&#xff0c;是一种经典的非线性空间滤波方法。在滤波器稀疏的制定上&#xff0c;双边滤波同时考虑到了输出像素与邻域内其它像素的欧氏距离和取值的差异&#xff0c;即&#xff1a;同时考虑到了空间域和值域间的差别。…

双边滤波器的原理及实现

双边滤波器是什么? 双边滤波(Bilateral filter)是一种可以保边去噪的滤波器。之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。可以与其相比较的两个filter:高斯低通滤波器(http://en…

双边滤波原理浅析

前言 双边滤波&#xff08;Bilateral filtering&#xff09;是一种结合了图像像素空间位置关系和像素值大小的非线性组合的保边滤波算法&#xff0c;无需迭代计算&#xff0c;操作简单。从原理上讲&#xff0c;图像领域的滤波通常意义是希望去除噪声&#xff0c;使图像更加平滑…

双边滤波(Bilateral Filter)详解

原理分析: 双边滤波与高斯滤波器相比,对于图像的边缘信息能过更好的保存。其原理为一个与空间距离相关的高斯函数与一个灰度距离相关的高斯函数相乘。 空间距离:指的是当前点与中心点的欧式距离。空间域高斯函数其数学形式为: 其中(xi,yi)为当前点位置,(xc,yc)为中心点…

双边滤波和双边网格

双边滤波 双边滤波器也是一种保边滤波器&#xff0e;和导向图滤波器一样&#xff0c;可以达到在平坦区域进行均值&#xff08;高斯&#xff09;滤波的效果&#xff0c;在边缘不进行滤波的效果&#xff0e;其原理为一个与空间距离相关的高斯函数与一个灰度距离相关的高斯函数相…