web-dev-qa-db-ja.com

Windows 10でのMSワイヤレスディスプレイへの自動接続

画面をミラーリングするために、ラップトップを自動的に(起動時またはキーの組み合わせで)MSワイヤレスディスプレイアダプターに接続するWindowsサービス(c#)またはPowerShellスクリプトを記述したいと思います。 Windows 10では、通知に移動して[接続]、[MSワイヤレスアダプター]、[接続]の順にクリックすることで、手動でしか実行できません。

私が見つけたのは Miracast API があることですが、それを使用する方法に関するドキュメントはあまりありません。

私はこれも見つけました MiraDisp.dllのドキュメント とOpenMiracastSessionとCloseMiracastSessionの2つの関数があります。

問題は、c#でこれらの関数を使用する方法がわからないことです。おそらくpInvokeを使用する必要があるでしょう。誰かが私を正しい方向に向けることができますか?

18

まず、@ 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

OK。では、このスクリプトのしくみについて説明しましょう。

  1. まず、WIN + Kを押すと、アクションセンターの[接続]ウィンドウが開きます
  2. 次に、3秒待ってワイヤレスディスプレイドングルが見つかるようにします(この値は自由に調整できますが、ワイヤレスディスプレイドングルが表示されるまで2秒以上待つ必要がありました)。
  3. 待機後、Enterキーを押すと、リストの最初のワイヤレスディスプレイドングルが自動的に選択され、接続機能がトリガーされます(ワイヤレスディスプレイドングルが見つからない場合は、デフォルトのブラウザーで[ヘルプ]リンクが開きます)
  4. スクリプトが行う最後のことは、ESCキーを押してアクションセンターを閉じることです。

まあ、それだけです。それは特別なことではありませんが、機能します。このスクリプトをタブレットとワイヤレスディスプレイドングルで数回テストしました(これがあります here )。問題なく動作するようです。残念ながら、複数のワイヤレスディスプレイドングルが同時に稼働している場合、スクリプトは期待どおりに機能しません。私のスクリプトは、最初に表示されるドングルを選択するだけだからです。 (私は1つのワイヤレスディスプレイドングルしか持っていないので、これは私にとって問題ではありません)

8
theezitguy

まず、AutoHotkeyに関する提案をしてくれた@CodingGorillaに感謝します。私は過去数日間それをいじっています。

Windows 10 APIで簡単に開始できる場所が見つからなかったので、AutoHotkeyルートを選びました。あらゆる種類のドキュメントがプッシュトースト通知にありますが、アクションセンターを制御するためのものが見つかりませんでした。 その面で誰か提案があれば、投稿してください。

これが私がAutoHotkeyを使って思いついたものです。かなり単純ですが、これにはいくつかの変数があるため、理想的なソリューションではありません。以下は、アクションセンターを開いて[接続]をクリックし、リストの一番上にあるワイヤレスディスプレイをクリックするために使用したAutoHotkeyスクリプトコードです。

Send #a ;Sends Windows button + A to open the action center
Sleep, 750 ; Give it some time to slide open
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\Connect.png ;Try to find the Connect button tile
if ErrorLevel = 2
    MsgBox Could not conduct the search for the connect button in action center. Make sure your search image is in the correct location.
else if ErrorLevel = 1
    MsgBox Connect button cannot be found on the screen.
else
    MoveMouseAndClick(FoundX, FoundY)
Sleep, 1250 ;Delay so the wireless displays have a chance to load into the Action Center window
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\WirelessDisplay.png
if ErrorLevel = 2
    MsgBox Could not conduct the search for the wireless display. 
else if ErrorLevel = 1
    {   
        ;Search image cannot be found. Try 1 more time in case it took a long time for the wireless displays to appear 
        Sleep, 750
        ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\WirelessDisplay.png ;try to find the first Wireless Display device listed
        if ErrorLevel = 1
            MsgBox Wireless display image cannot be found on the screen. Make sure the wireless device is turned on.
        else
            MoveMouseAndClick(FoundX, FoundY)
    }
else
    MoveMouseAndClick(FoundX, FoundY)
Send {Esc} ;Send Esc to get rid of the Action Center window
Return

MoveMouseAndClick(x, y) {
    MouseMove, x + 25, y + 25 ;Move it down the right a bit to make sure we click the button
    Sleep, 250 
    MouseClick, left
}

私が作ったものの例として、画像も添付しました。 独自の検索画像を作成する必要があります。これらの画像を作成する前に、Windows 10でアクションセンター、スタート、タスクバーの透過性をオフにする必要があります-設定->パーソナライゼーション->色->スタート、タスクバー、アクションセンターを透明にする->オフ。私の画像には画像内の「Roku Stick」がリストされているため、2番目の画像をやり直すことが特に重要です。デスクトップ開発マシンと、このスクリプトを実行しているMS Surface 3の間で検索イメージをやり直す必要がありました。解像度などはデバイスによって異なります。ここで独自の検索イメージを作成する方法の指示に従ってください:

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

最後に、ワイヤレスディスプレイがすでに接続されている場合、これはおそらく機能しません。私の環境では、ワイヤレスディスプレイを接続するとタブレットの解像度が変化するため、画面に画像が表示されません。

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

8
jaredbaszler

質問は少し古いですが、現在同じ問題に直面しています。

高度なキャストサンプル のサンプル5 + 6に従って、ProjectionManagerクラスを利用してUWPアプリを作成することをお勧めします。

基本的な手順は次のとおりです。

  • deviceIDを取得する(たとえば、DevicePickerクラスで選択する)
  • ProjectionManager.StartProjectingAsync(newViewId, currentViewId, selectedDeviceInformation)を呼び出して投影を開始します

DeviceInformationオブジェクトは、取得(および保存)されたdeviceIdを使用してDeviceInformation.CreateFromIdAsync()を呼び出すことで取得できます。 viewIdsは0(またはその他の無効な値)に設定されている場合がありますが、いずれにしても投影が開始されます。

プロジェクションが開始された場合、アプリを閉じることができます。プロジェクションは引き続き有効です。

誰かがソリューションに興味を持っている場合は、GitHubにコードをアップロードします。

2
Mike F.

これは私が書いた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}
2
Steve

Miracastを自動化して制御するには、Windows.Media.Casting名前空間とWindowsユニバーサルサンプルを使用してUWPアプリを作成します。

C#、C++、Javascript、Visual Basicなど、多くの一般的な言語で記述できます。

Windowsでは、Visual Studioソリューション(.sln)として開いて起動できるMiracastで何ができるかを示す2組の機能サンプルプログラムを提供しています。

基本的なキャスト

高度なキャスト

UWPアプリはWindowsアプリストアで利用できるように設計されているため、機能するための特定の要件と規制があります。 (私はこれらを研究することをお勧めします。)

また、汎用プログラムの作成を開始したときに作成した落とし穴を避け、ユニバーサルWindowsライブラリがどこにあるのか疑問に思いました。

WPプロジェクトの開始

0
Graeme Rock