Проверьте, есть ли экран расширенного режима в Powershell (нужна помощь - переведите Autoit в Powershell v2) - PullRequest
0 голосов
/ 29 января 2020

Я хочу перевести этот скрипт AutoIt в Powershell v2. (AutoIt является бесплатным BASI C -подобным скриптингом https://www.autoitscript.com/site/autoit/downloads/)

#include <WinAPIGdi.au3>

Local $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
Local $colMonitors = $objWMIService.ExecQuery ("Select * from Win32_DesktopMonitor Where Availability=3", "WQL", 0x10 + 0x20)

If NOT IsObj($colMonitors) Then Exit

Local $iCount = 0
For $oMonitor In $colMonitors
    $iCount += 1
Next
MsgBox(0, "", "Number of monitors : " & $iCount)

$aMonitor = _WinAPI_EnumDisplayMonitors()
If @error Then Exit
ConsoleWrite   ("!! multiscreen mode:" & $aMonitor[0][0])            ;value equal one if there is one screen duplicated or not, if extended the value wille be greater than one. I don’t mind if the computer screen   are powered on or not. 
If $aMonitor[0][0] > 1 Then  
    MsgBox(0, "", "extended mode"&$aMonitor[0][0] )        ;give  2
Else
    MsgBox(0, "", "duplicate mode"&$aMonitor[0][0] )        ;give 1
EndIf


;---Excerpt from WinAPIGdi.au3  (included with AutoIt) :---
Func _WinAPI_EnumDisplayMonitors($hDC = 0, $tRECT = 0)
    Local $hEnumProc = DllCallbackRegister('__EnumDisplayMonitorsProc', 'bool', 'handle;handle;ptr;lparam')
    Dim $__g_vEnum[101][2] = [[0]]
    Local $aRet = DllCall('user32.dll', 'bool', 'EnumDisplayMonitors', 'handle', $hDC, 'struct*', $tRECT, _
            'ptr', DllCallbackGetPtr($hEnumProc), 'lparam', 0)
    If @error Or Not $aRet[0] Or Not $__g_vEnum[0][0] Then
        $__g_vEnum = @error + 10
    EndIf
    DllCallbackFree($hEnumProc)
    If $__g_vEnum Then Return SetError($__g_vEnum, 0, 0)

    __Inc($__g_vEnum, -1)
    Return $__g_vEnum
EndFunc   ;==>_WinAPI_EnumDisplayMonitors

Я пытался начать с этих команд в Powershell:

Get-Wmiobject win32_DesktopMonitor |format-list  
Get-Wmiobject -query "select Name,DeviceID,DisplayType from win32_DesktopMonitor where Availability=3"

Это работает, но на самом деле слишком коротко ...

1 Ответ

0 голосов
/ 29 января 2020

Можете ли вы указать, что вы хотели бы сделать? Я не уверен, что вы пытаетесь достичь.

Это работает, но на самом деле оно слишком короткое ...

Так что это работает. Это хорошо - верно?

Если вы хотите проверить, сколько экранов подключено, вы можете использовать следующий командлет:

Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBasicDisplayParams

Источник: Использование PowerShell для получения информации о нескольких мониторах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...