昨天在群里看见一个小伙伴问一套键盘如何控制多台电脑?正好勾起以前学习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
);

一套键盘如何控制多台电脑?相关推荐

  1. 无界鼠标:使用一套键盘鼠标控制多台电脑

    在办公室需要同时使用自己的电脑和公司的电脑,然而来回切换鼠标是真的麻烦,于是在网上找到并整合和相关方法,供大家参考使用: 无界鼠标百度云:链接:https://pan.baidu.com/s/1GI5 ...

  2. 使用Synergy控制实现一套键盘鼠标控制多台电脑(windows+linux)

    一,下载安装 Synergy windows版本下载地址:http://www.3322.cc/soft/14996.html Synergy linux版本下载地址:https://www.jb51 ...

  3. 如何把笔记本做台式机的副屏(一套键鼠控制两台电脑)

    通过一套键鼠控制两台电脑 前提 安装所需的软件 一. 简介 二. 安装 2.1 小技巧 前提 两台电脑在同一个局域网内,并且均为windows操作系统 例如两台电脑链接的同一个WIFI,或者笔记本无线 ...

  4. 一套键鼠操控多台电脑--Mouse Without Borders 设置教程(转载)

    这篇文字是转载的,地址一套键鼠操控多台电脑–Mouse Without Borders 设置教程 一套键鼠控多机+文件秒传 微软神器<Mouse Without Borders>实战 你或 ...

  5. 单键鼠控制多台电脑:无界鼠标简单教程

    https://www.bilibili.com/read/cv16470540 事情的起因是这样的,我在实验室有一台台式电脑,还有一个笔记本. 但是我只有一套好用的键盘鼠标.此前使用的时候,一般都是 ...

  6. Mouse Without Borders 一套鼠标键盘控制多台电脑

    当我的桌子上除了笔记本之外还多了一个台式机后,两个鼠标,两个键盘就显得十分多余,于是开始探索怎样用一套鼠标键盘控制多台电脑... 首先搜到的是这玩意--KVM切换器 在他49个赞的诱惑下,我还去淘宝搜 ...

  7. 一套鼠标键盘控制两台电脑-绝!

    Oliver's R&D Lab C/C++/Linux 一套鼠标键盘控制两台电脑-绝! 这个工具是推荐给双电脑工作人员的,不是的就不用往下看了,嗯. synergy-----按照它主页( h ...

  8. 一套鼠标键盘控制多台电脑,无界鼠标 (Mouse without Borders)控制界面的功能翻译

    一套鼠标键盘控制多台电脑,无界鼠标 (Mouse without Borders)控制界面的功能翻译: 易君对英语一窍不通 今天在网上找了很久 无界鼠标的使用安装教程倒是很多 但没有完整的功能界面翻译 ...

  9. 电脑小写字母怎么切换_macOS amp; Windows 通吃,一套键鼠就能控制多台电脑

    作为一名主力使用 macOS 办公的果粉,偶尔碰到一些功能比较顺手的软件,但却只提供 Windows 版本,这就不得不面临两个选择:要么给 Mac 装虚拟机运行 Windows,要么再配一台 Wind ...

最新文章

  1. 人工智能正在引领全球企业的创新
  2. SQL Server基础知识概念要点详细讲解
  3. Scala中可以定义多个package
  4. 今晚直播 | NeurIPS 2021论文解读:基于置信度校正的可信图神经网络
  5. python面向对象继承_Python 面向对象 --- 继承
  6. Android ProgressBar 反向进度条/进度条从右到左走
  7. PythonOpencv-分类器—SVM,KNearest,RTrees,Boost,MLP
  8. 【算法】剑指 Offer 67. 把字符串转换成整数
  9. Python 分析到底是谁操纵《庆余年》上了热搜?
  10. 设计模式--责任链模式
  11. python入门指南txt-【杂谈】爬虫基础与快速入门指南
  12. 《树莓派Python编程入门与实战(第2版)》——1.9 QA
  13. 【Spring-tx】关于spring事务的思考
  14. n行杨辉三角 Python
  15. 中国交通信号控制技术发展回顾
  16. 51单片机基本刷屏测试实验_320x240真彩TFT屏51单片机驱动刷屏程序
  17. 如何显示或隐藏mac文件后缀名
  18. 计算机考研855专业课,人大计算机855考研经验分享
  19. 计算机网络atm功能,自考计算机网络实用技术考核知识点之ATM原理
  20. Python学好兼职无忧,接单兼职平台曝光,除了主业,副业也能让你月入过万

热门文章

  1. 关于 Linux中数据备份的一些总结
  2. SAS 运行过程中出现‘SAS 磁盘已满 OUT OF RESOURCES’解决办法!
  3. 微信小程序之天气查询小案例
  4. 079-mxd-冒险岛-自主学习搭建-单机联机都可以,详细教程
  5. 开源夏令营《基于HackRF开发GPS信号仿真模拟器》开题报告
  6. BrainNet Viewer:人类大脑连接的网络可视化工具
  7. 将Visio图片导入到Latex
  8. VDI序曲十 ThinPC安装体验
  9. goplus (go+)初识
  10. 尚学堂就业怎么样?谈谈我在尚学堂的就业之路