Проблема: у нас есть большой телевизор, который мы используем для презентаций, который не совсем 1920 × 1080 пикселей. Это выключено, и я не могу это контролировать. Что я могу контролировать, так это мой ноутбук с Windows, к которому я подключаюсь. Я искал способы получить все, что мне нужно, чтобы перейти к проектору, установить положение, которое будет смещено для хорошего просмотра на телевизоре, и установить ширину / высоту для того же.
Что было сделано: я могу использовать скрипт Boe Prox Get-Window (https://blogs.technet.microsoft.com/heyscriptingguy/2015/12/26/weekend-scripter-manage-window-placement-by-using-pinvoke/), и это работало нормально, чтобы получить размеры и смещение, которые мне нужны. Однако его ошибки Set-Window на мне как в WinPosh 5, так и в Posh 6 с правами администратора и без них. Другие потенциальные решения приводили к подобным ошибкам, поэтому я решил остаться со скриптом Прокса, так как он по моим стандартам эксперт.
Я оцениваю решения, упомянутые здесь, https://stackoverflow.com/questions/10392620/how-can-a-batch-file-run-a-program-and-set-the-position-and-size-of-the -окно / как возможные обходные пути. Однако решение PowerShell без каких-либо зависимостей от сторонних разработчиков было бы идеальным решением.
Вопрос в том, кто-нибудь решил, как заставить Set-Window мистера Прокса или что-либо еще установить положение и размер окна в PowerShell v5 или v6 прямо?
Сообщение об ошибке в Posh 5:
Cannot convert argument "hWnd", with value: "System.Object[]", for "GetWindowRect" to type "System.IntPtr": "Cannot
convert the "System.Object[]" value of type "System.Object[]" to type "System.IntPtr"."
At Z:\scripts\Set-Window.ps1:90 char:9
+ $Return = [Window]::GetWindowRect($Handle,[ref]$Rectangle)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
Сообщения об ошибках в Posh 6:
PS C:\> Set-Window -ProcessName notepad -X 1911 -Y "-369" -Width 266 -Height 113
Method invocation failed because [Window] does not contain a method named 'MoveWindow'.
At Z:\scripts\Set-Window.ps1:98 char:13
+ $Return = [Window]::MoveWindow($Handle, $x, $y, $Width, $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
PS C:\> Set-Window -ProcessName firefox -X "-9" -Y "-9" -Width "1938" -Height "1050"
Cannot convert argument "hWnd", with value: "System.Object[]", for "GetWindowRect" to type "System.IntPtr": "Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.IntPtr"."
At Z:\scripts\Set-Window.ps1:90 char:9
+ $Return = [Window]::GetWindowRect($Handle,[ref]$Rectangle)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
Примечание. Эти ошибки возникают в Windows 7 (некоторое время нет доступа к Win10).
Обновление: я заметил размер / положение окна Set (Many) программ, но модуль UIAutomation не поддерживается (codeplex заархивирован, и последнее сообщение в блоге автора для него было февраль 2014 г.).