2016-02-24 2 views
13

Я хочу написать службу Windows (в C#) или сценарий powershell, который автоматически подключает мой ноутбук (при загрузке или комбинации клавиш) к моему адаптеру беспроводной сети MS для экранирования экрана. В Windows 10 я могу сделать это вручную, перейдя к уведомлениям и нажав Connect> MS Wireless adapter> connect.Autoconnect to MS Wireless display на Windows 10

Я обнаружил, что существует 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. Может кто-то указать мне верное направление?

+0

@ MuratYıldız - Мы пытаемся подключиться к «беспроводному дисплею» - а не только к сети WiFi. – jaredbaszler

+2

Я не думаю, что эти API-интерфейсы Miracast - это то, что вы думаете о них, вероятно, именно то, что Windows использует сам (под капотом), чтобы сделать зеркальное отображение экрана, а не API для самого зеркального отображения экрана. Считаете ли вы что-то вроде [AutoHotKey] (https://www.autohotkey.com/), что вы можете по существу записывать макросы с клавишами + мышь и выполнять их нажатием клавиши – CodingGorilla

+0

В соответствии с приведенной вами документацией Miracast API является списком функций, которые должен выполнить драйвер; вы не можете вызвать их, потому что операционная система уже должна иметь сокет-соединение с устройством. Вы искали автоматизацию поверх API уведомлений? Это было бы наиболее вероятно, так как вы просто пытаетесь автоматизировать нажатие Connect -> MS Wireless adapter -> connect. –

ответ

5

Прежде всего, спасибо @CodingGorilla за предложение об AutoHotkey. Я играл с этим последние пару дней.

Я пошел по маршруту AutoHotkey, так как я не мог найти легкое место для запуска любого API Windows 10. Все виды документации для тотального оповещения, но я не мог найти ничего, чтобы контролировать центр действий. Если у кого-то есть предложения на этом фронте, пожалуйста, разместите их.

Вот что я придумал с помощью 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» внутри изображения. Мне пришлось повторить мое изображение поиска между моей машиной разработки на рабочем столе и MS Surface 3. Я запускаю этот скрипт. Решения и таковые будут меняться между устройствами. Следуйте инструкциям о том, как создать свой собственный поиск изображения здесь:

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

Наконец, это, вероятно, не будет работать, если беспроводной дисплей уже подключен. В моей среде подключение беспроводного дисплея приводит к изменению разрешения на планшете, и поэтому оно не может найти изображения на экране.

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

4

Прежде всего я хочу сказать, что @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, которая откроет окно Action Center Connect
  2. Тогда он будет ждать в течение 3 секунд, так что ключ беспроводного дисплея можно найти (Вы можете отрегулировать это значение по своему усмотрению, но мне нужно было подождать более 2 секунд, пока не появится мой экран для беспроводного дисплея.
  3. После ожидания нажмите клавишу ВВОД, которая автоматически выберет первый ключ беспроводного дисплея в списке и триггер функция подключения (Если не обнаружены ключи беспроводного дисплея, ваш браузер по умолчанию откроет ссылку «Справка»)
  4. T последнее, что он делает, это нажать клавишу ESC, чтобы закрыть Центр действий

Ну, вот и все. Это ничего особенного, но оно работает. Я несколько раз тестировал этот сценарий с помощью своего планшета и моего беспроводного экранного ключа (у меня есть этот here), и, похоже, он работает нормально. К сожалению, мой сценарий не будет работать так, как ожидалось, если у вас одновременно есть несколько беспроводных экранных ключей, потому что мой скрипт просто выберет первый, который появится. (Это не проблема для меня, так как у меня только один беспроводной экран для отображения)

+1

Это чрезвычайно простое решение, которое должно работать очень хорошо. Обратите внимание, что вы также можете отправить несколько клавиш {Tab}, чтобы переместить выделение по желаемому адаптеру, затем отправьте клавишу {Enter}, чтобы активировать ее. –

+0

Кроме того, если у вас несколько адаптеров, вы можете использовать {Tab}, чтобы выделить опцию «Поиск», затем отправить текст для поиска, затем {Tab} в результирующий адаптер и отправить {Enter}. –