web-dev-qa-db-fra.com

Connexion automatique à l'écran MS Wireless sous Windows 10

Je souhaite écrire un service Windows (en c #) ou un script PowerShell qui connecte automatiquement mon ordinateur portable (au démarrage ou à une combinaison de touches) à ma carte d'affichage sans fil MS pour la mise en miroir d'écran. Dans Windows 10, je ne peux le faire que manuellement en accédant aux notifications et en cliquant sur Connecter> Adaptateur MS Wireless> se connecter.

Ce que j'ai trouvé, c'est qu'il y a Miracast API mais il n'y a pas beaucoup de documentation sur la façon de l'utiliser.

J'ai également trouvé cela documentation sur MiraDisp.dll et il y a deux fonctions OpenMiracastSession et CloseMiracastSession.

Le problème est que je ne sais pas comment utiliser ces fonctions en c #. Je sais que je devrai probablement utiliser pInvoke. Est-ce que quelqu'un peut-il me montrer la bonne direction?

18
Brecht Baekelandt

Je veux d'abord dire que @jaredbaszler a fourni une très bonne solution. Cela a fonctionné comme un charme merci :)

Je jouais aussi avec AutoHotkey car je voulais savoir s'il y avait une autre façon de le faire. Après un certain temps, j'ai trouvé le script suivant:

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

D'accord. Maintenant, laissez-moi vous expliquer comment ce script fonctionne:

  1. Tout d'abord, il appuiera sur WIN + K, ce qui ouvrira la fenêtre Action Center Connect
  2. Ensuite, il attendra 3 secondes pour que le dongle d'affichage sans fil puisse être trouvé (vous pouvez ajuster cette valeur à votre guise, mais j'ai dû attendre plus de 2 secondes pour que mon dongle d'affichage sans fil apparaisse)
  3. Après l'attente, il appuiera sur ENTER qui choisira automatiquement le premier dongle d'affichage sans fil dans la liste et déclenchera la fonction de connexion (si aucun dongle d'affichage sans fil ne peut être trouvé, votre navigateur par défaut ouvrira le lien "Aide")
  4. La dernière chose que fait le script est d'appuyer sur la touche ESC pour fermer le Centre d'action

Eh bien c'est ça. Ce n'est rien de spécial mais ça marche. J'ai testé ce script à plusieurs reprises avec ma tablette et mon dongle d'affichage sans fil (j'ai celui-ci ici ) et il semble très bien fonctionner. Malheureusement, mon script ne fonctionnera pas comme prévu si vous disposez de plusieurs dongles d'affichage sans fil en fonctionnement en même temps, car mon script choisira simplement le premier qui apparaît. (Ce n'est pas un problème pour moi car je n'ai qu'un seul dongle d'affichage sans fil)

8
theezitguy

Tout d'abord, merci à @CodingGorilla pour la suggestion sur AutoHotkey. J'ai joué avec ça ces derniers jours.

J'ai suivi la route AutoHotkey car je ne pouvais pas trouver un endroit facile pour commencer avec n'importe quelle API Windows 10. Toutes sortes de documentation pour envoyer des notifications toast, mais je n'ai rien trouvé pour contrôler le centre d'action. Si quelqu'un a des suggestions à ce sujet, veuillez les poster.

Voici ce que j'ai trouvé en utilisant AutoHotkey. Assez simple mais pas une solution idéale car il y a quelques variables avec cela. Ci-dessous se trouve le code de script AutoHotkey que j'ai utilisé pour ouvrir le centre d'action, cliquez sur se connecter, puis sur l'affichage sans fil le plus haut répertorié:

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
}

J'ai également joint les images comme exemple de ce que j'ai fait. Vous devrez créer vos propres images de recherche. Avant de créer ces images, vous devez également désactiver la transparence du Centre d'action, du démarrage et de la barre des tâches dans Windows 10 - Paramètres-> Personnalisation-> Couleurs-> Rendre le démarrage, la barre des tâches et le centre d'action transparents-> Désactivé . Il est particulièrement important de refaire la 2ème image car l'image de la mienne répertorie "Roku Stick" dans l'image. J'ai dû refaire mon image de recherche entre ma machine de développement de bureau et la MS Surface 3 sur laquelle j'exécute ce script. Les résolutions et autres changeront entre les appareils. Suivez les instructions sur la façon de créer votre propre image de recherche ici:

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

Enfin, cela ne fonctionnera probablement pas si l'écran sans fil est déjà connecté. Dans mon environnement, la connexion de l'écran sans fil entraîne une modification de la résolution de la tablette et, par conséquent, il ne trouve pas les images à l'écran.

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

8
jaredbaszler

La question est un peu ancienne, mais actuellement j'ai rencontré le même problème.

Je suggère d'écrire une application UWP en utilisant la classe ProjectionManager selon l'exemple 5 + 6 dans le exemple de casting avancé .

Les étapes essentielles sont les suivantes:

  • obtenir un DeviceID (par exemple en choisissant avec la classe DevicePicker)
  • appeler ProjectionManager.StartProjectingAsync(newViewId, currentViewId, selectedDeviceInformation) pour démarrer la projection

L'objet DeviceInformation peut être obtenu en appelant DeviceInformation.CreateFromIdAsync() en utilisant le deviceId acquis (et enregistré). Les viewIds peuvent être définis sur 0 (ou d'autres valeurs non valides), la projection démarre de toute façon.

Si la projection a commencé, l'application peut être fermée, la projection est toujours en vie.

Si quelqu'un est intéressé par la solution, je téléchargerai le code sur GitHub.

2
Mike F.

C'était le script AutoHotKey que j'ai écrit;

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

Pour automatiser et contrôler Miracast, vous souhaitez écrire une application UWP à l'aide de Windows.Media.Casting namespace et Windows Universal Samples.

Ils peuvent être écrits dans de nombreux langages courants, notamment C #, C++, Javascript et Visual Basic.

Windows a fourni deux ensembles d'exemples de programmes fonctionnels pour montrer ce que vous pouvez faire avec Miracast qui peuvent être ouverts et lancés en tant que solutions Visual Studio (.sln).

Casting de base

Casting avancé

Étant donné que les applications UWP sont conçues pour être mises à disposition sur la boutique d'applications Windows, elles ont des exigences et des réglementations spécifiques pour leur fonctionnement. (Je recommande de rechercher ces derniers.)

Évitez également l'écueil que j'ai fait lorsque j'ai commencé à écrire un programme générique, puis je me suis demandé où était la bibliothèque Windows universelle:

Démarrage d'un projet UWP

0
Graeme Rock