如何在Windows上自动化实现与Linux设备的蓝牙配对连接?
Windows端Linux设备蓝牙配对自动化方案
明确说:可以实现,核心是绕开或自动处理PIN确认弹窗,下面是几种靠谱的实操方法:
方法1:用预共享密钥(PSK)直接配对
如果你的Linux设备支持固定PIN码配对,直接在两端预设相同PIN就能跳过弹窗:
- Linux端:在
expect脚本里指定固定PIN(比如1234),确保配对请求用这个PIN发送 - Windows端:用Bluetooth Command Line Tools的
btpair命令提前指定配对PIN,命令格式:
两端用相同PIN发起配对,Windows不会弹出确认弹窗,直接完成配对流程btpair -n "Linux设备友好名称" -p 1234
方法2:修改Windows蓝牙策略(正确操作)
你之前改服务导致挂起是因为改错了地方,正确的做法是通过组策略关闭配对确认提示:
- 按
Win+R输入gpedit.msc打开组策略编辑器 - 导航到:计算机配置 > 管理模板 > Windows组件 > Bluetooth
- 找到允许蓝牙设备与计算机配对而无需用户交互,设置为已启用
- 再找到允许蓝牙设备与计算机连接而无需用户交互,同样设为已启用
- 打开
services.msc找到Bluetooth Support Service,右键重启服务
之后再用btpair命令配对,就不会弹出PIN确认窗口了
方法3:PowerShell自动点击弹窗(备选方案)
如果上面两种方法行不通,可以用PowerShell脚本自动识别并点击PIN确认弹窗:
- 先运行以下PowerShell脚本(需管理员权限),再执行配对命令:
脚本会持续监听配对弹窗,找到后自动点击“是”按钮Add-Type @" using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("user32.dll")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll")] public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); } "@ $BM_CLICK = 0x00F5 while ($true) { $hwnd = [Win32]::FindWindow("#32770", "蓝牙配对") if ($hwnd -ne [IntPtr]::Zero) { $button = [Win32]::FindWindowEx($hwnd, [IntPtr]::Zero, "Button", "是") if ($button -ne [IntPtr]::Zero) { [Win32]::SendMessage($button, $BM_CLICK, [IntPtr]::Zero, [IntPtr]::Zero) break } } Start-Sleep -Milliseconds 500 }
注意事项
- 确保Bluetooth Command Line Tools是最新版本,旧版本可能不支持PIN预设功能
- 组策略方法仅适用于Windows专业版/企业版,家庭版可通过修改对应注册表项实现相同效果
- PowerShell脚本必须以管理员权限运行,否则无法访问系统窗口控件
内容的提问来源于stack exchange,提问作者Samyukta Ramnath
相关产品推荐
相关产品推荐

