画面をミラーリングするために、ラップトップを自動的に(起動時またはキーの組み合わせで)MSワイヤレスディスプレイアダプターに接続するWindowsサービス(c#)またはPowerShellスクリプトを記述したいと思います。 Windows 10では、通知に移動して[接続]、[MSワイヤレスアダプター]、[接続]の順にクリックすることで、手動でしか実行できません。
私が見つけたのは Miracast API があることですが、それを使用する方法に関するドキュメントはあまりありません。
私はこれも見つけました MiraDisp.dllのドキュメント とOpenMiracastSessionとCloseMiracastSessionの2つの関数があります。
問題は、c#でこれらの関数を使用する方法がわからないことです。おそらくpInvokeを使用する必要があるでしょう。誰かが私を正しい方向に向けることができますか?
まず、@ 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。では、このスクリプトのしくみについて説明しましょう。
まあ、それだけです。それは特別なことではありませんが、機能します。このスクリプトをタブレットとワイヤレスディスプレイドングルで数回テストしました(これがあります here )。問題なく動作するようです。残念ながら、複数のワイヤレスディスプレイドングルが同時に稼働している場合、スクリプトは期待どおりに機能しません。私のスクリプトは、最初に表示されるドングルを選択するだけだからです。 (私は1つのワイヤレスディスプレイドングルしか持っていないので、これは私にとって問題ではありません)
まず、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
最後に、ワイヤレスディスプレイがすでに接続されている場合、これはおそらく機能しません。私の環境では、ワイヤレスディスプレイを接続するとタブレットの解像度が変化するため、画面に画像が表示されません。
質問は少し古いですが、現在同じ問題に直面しています。
高度なキャストサンプル のサンプル5 + 6に従って、ProjectionManager
クラスを利用してUWPアプリを作成することをお勧めします。
基本的な手順は次のとおりです。
DevicePicker
クラスで選択する)ProjectionManager.StartProjectingAsync(newViewId, currentViewId, selectedDeviceInformation)
を呼び出して投影を開始しますDeviceInformation
オブジェクトは、取得(および保存)されたdeviceIdを使用してDeviceInformation.CreateFromIdAsync()
を呼び出すことで取得できます。 viewIdsは0(またはその他の無効な値)に設定されている場合がありますが、いずれにしても投影が開始されます。
プロジェクションが開始された場合、アプリを閉じることができます。プロジェクションは引き続き有効です。
誰かがソリューションに興味を持っている場合は、GitHubにコードをアップロードします。
これは私が書いた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}
Miracastを自動化して制御するには、Windows.Media.Casting
名前空間とWindowsユニバーサルサンプルを使用してUWP
アプリを作成します。
C#、C++、Javascript、Visual Basicなど、多くの一般的な言語で記述できます。
Windowsでは、Visual Studioソリューション(.sln)として開いて起動できるMiracastで何ができるかを示す2組の機能サンプルプログラムを提供しています。
UWPアプリはWindowsアプリストアで利用できるように設計されているため、機能するための特定の要件と規制があります。 (私はこれらを研究することをお勧めします。)
また、汎用プログラムの作成を開始したときに作成した落とし穴を避け、ユニバーサルWindowsライブラリがどこにあるのか疑問に思いました。