如何从索引或名称获取监视句柄?

问题描述 投票:1回答:1

C ++版本(How can I get an HMONITOR handle from a display device name?)没有提供解决方案(至少在我的情况下需要非OOP代码,例如AutoIt)。

我正在调整使用WinAPI函数的AutoIt脚本来支持多监视器Windows 7+系统。我可以提供监视器/设备名称或它的索引,但有些功能需要HMONITOR句柄。

我无法通过Window或像素或点获得HMONITOR,这将非常容易。不,我只需要从名称或索引获取句柄,我需要一个非OOP解决方案(理想情况下,AutoIt和WinAPI调用,但非OOP伪代码会没问题)。

windows winapi autoit multiple-monitors
1个回答
0
投票

下面的函数返回以下结构的数组:

| hMonitor   | xPosMonitor | yPosMonitor | widthMonitor | heightMonitor |
| 0x00010001 | 0           | 0           | 1366         | 768           |
| 0x0001024  | 1366        | -236        | 1920         | 1080          |

码:

#include-once
#include <Array.au3>
#include <WinAPIGdi.au3>

Func _getMonitorInfos()
    Local $aPosition, $aMonitorData = _WinAPI_EnumDisplayMonitors()

    If IsArray($aMonitorData) Then
        ReDim $aMonitorData[$aMonitorData[0][0] + 1][5]
        For $i = 1 To $aMonitorData[0][0] Step 1
            $aPosition = _WinAPI_GetPosFromRect($aMonitorData[$i][1])
            For $j = 0 To 3 Step 1
                $aMonitorData[$i][$j + 1] = $aPosition[$j]
            Next
        Next

        Return $aMonitorData
    EndIf
EndFunc

Global $aMonitorData = _getMonitorInfos()

_ArrayDisplay($aMonitorData)

hMonitor值包含在数组$aMonitorData[1][1]中。

© www.soinside.com 2019 - 2024. All rights reserved.