在Windows 10上自动连接到MS无线显示

时间:2016-02-24 11:32:09

标签: c# miracast

我想编写Windows服务(在c#中)或PowerShell脚本,将我的笔记本电脑自动连接(启动或组合键合)到我的MS无线显示适配器以进行屏幕镜像。在Windows 10中,我只能通过转到通知手动执行此操作,然后单击连接> MS无线适配器>连接。

我发现有一个Miracast API(https://msdn.microsoft.com/en-us/library/windows/hardware/dn265515(v=vs.85).aspx),但没有太多关于如何使用它的文档。

我也发现了这个http://filelog.net/file/MiraDisp.dll/2c279c8d57a47a9ca06aa279bd9e0e8e22c7c1c1,并且有两个函数OpenMiracastSession和CloseMiracastSession。

问题是我不知道如何在c#中使用这些函数。我知道我可能不得不使用pInvoke。有人能指出我正确的方向吗?

6 个答案:

答案 0 :(得分:6)

首先,感谢@CodingGorilla对AutoHotkey的建议。在过去的几天里,我一直在玩这个游戏。

我使用了AutoHotkey路线,因为我找不到任何Windows 10 API的简单起点。各种各样的文件推送吐司通知,但我找不到任何控制行动中心的东西。 如果有人就此提出建议,请发布。

以下是我使用AutoHotkey的想法。非常简单但不是理想的解决方案,因为有一些变量。下面是我用来打开操作中心的AutoHotkey脚本代码,单击连接,然后单击列出最顶层的无线显示:

td

我还附上图片作为我所做的一个例子。 您需要制作自己的搜索图片。在制作这些图像之前,您还必须关闭操作中心的透明度,Windows 10中的“开始”和“任务栏” - “设置” - >“个性化 - &gt;颜色 - >开始,任务栏和操作中心透明 - &gt;关闭< / strong>即可。特别重要的是重做第二张图像作为我的图像列表&#34; Roku Stick&#34;在图像内。我不得不在我的桌面开发机器和MS Surface 3之间重做我的搜索图像。我正在运行这个脚本。决议等将在设备之间改变。按照如何在此处创建自己的搜索图像的说明进行操作:

https://autohotkey.com/docs/commands/ImageSearch.htm

最后,如果无线显示器已经连接,这可能不会起作用。在我的环境中连接无线显示器会导致平板电脑上的分辨率发生变化,因此无法在屏幕上找到图像。

Image of the connect button in Action Center
enter image description here

答案 1 :(得分:5)

首先,我想说@jaredbaszler提供了一个非常好的解决方案。它像魅力一样工作,谢谢你:))

我也在玩AutoHotkey,因为我想知道是否有另一种方法可以做到这一点。过了一会儿,我想出了以下脚本:

Send #k ; Sends Windows button + K to open the Action Center Connect window
Sleep, 3000 ; Wait some time so the wireless display dongle can be found
Send {Enter} ; Send ENTER key to connect to wireless display dongle (works when only 1 is found)
Send {Esc} ; Send ESC key to close the Action Center Connect window

确定。现在让我解释一下这个脚本是如何工作的:

  1. 首先它将按下WIN + K,这将打开“操作中心连接”窗口
  2. 然后它将等待3秒钟,以便找到无线显示加密狗(您可以根据需要调整此值,但我需要等待超过2秒才能显示无线显示加密狗)
  3. 等待后按ENTER键将自动选择列表中的第一个无线显示加密狗并触发连接功能(如果找不到无线显示加密狗,则默认浏览器将打开“帮助”链接)
  4. 脚本执行的最后一项操作是按ESC键关闭操作中心
  5. 嗯,就是这样。这没什么特别但它有效。我已经使用我的平板电脑和无线显示加密狗(我有一个here)测试了这个脚本几次,它似乎工作得很好。 不幸的是,如果您同时启动并运行多个无线显示加密狗,我的脚本将无法按预期工作,因为我的脚本将只选择显示的第一个加密狗。 (这对我来说不是问题,因为我只有一个无线显示加密狗)

答案 2 :(得分:2)

这个问题有点老了,但目前我遇到了同样的问题。

我建议根据Advanced casting sample中的示例5 + 6使用ProjectionManager类编写UWP App。

基本步骤是:

  • 获取DeviceID(例如,通过DevicePicker类进行选择)
  • 调用ProjectionManager.StartProjectingAsync(newViewId, currentViewId, selectedDeviceInformation)开始投影

可以使用获取的(和保存的)deviceId调用DeviceInformation来获取DeviceInformation.CreateFromIdAsync()对象。 投影无论如何都可以将viewIds设置为0(或其他无效值)。

如果开始投影,则可以关闭该应用,而投影仍保持活动状态。

如果有人对该解决方案感兴趣,我会将代码上传到GitHub。

答案 3 :(得分:2)

这是我编写的AutoHotKey脚本;

Run, explorer.exe ms-settings-connectabledevices:devicediscovery
Sleep, 800
Send, {Tab}
Send,+{Tab}
Send,{Enter}
Sleep, 200
; then next Send command types the first few letters of the name of the WiDi adaptor
Send, Microsoft
Sleep, 200
Send, {Tab}
Sleep, 200
Send, {Enter}

答案 4 :(得分:0)

要自动化和控制Miracast,您想使用UWP名称空间和Windows Universal Samples编写一个Windows.Media.Casting应用。

它们可以用许多通用语言编写,包括C#,C ++,Javascript和Visual Basic。

Windows提供了两组功能示例程序,以演示您可以使用Miracast进行的操作,这些功能可以作为Visual Studio解决方案(.sln)打开和启动。

Basic Casting

Advanced Casting

由于UWP应用旨在在Windows应用商店中提供,因此它们具有特定的功能要求和法规。 (我建议研究这些。)

也避免了我在开始编写通用程序,然后想知道Universal Windows库在哪里时遇到的陷阱:

Starting a UWP project

答案 5 :(得分:0)

我最终从这里使用了基于 vbs 的解决方案: https://superuser.com/questions/1062789/how-to-connect-to-a-wireless-display-adapter-automatically-through-scripts-or-ta

虽然它基本上执行相同的步骤,但我发现它比其他解决方案更强大。更重要的是,vbs 在大多数 Win 机器上都可用(我认为)。