Hallo,
ich habe hier 2 Funktionen (keine Ahnung mehr woher).
Die erste funktioniert unter windows 7 nur bedingt, da wenn keine Seriennummer abgefragt werden kann, er in Zeile 8 bei
For $colItems In $WMIWmiMonitorID
[/autoit]
abbricht.
Die 2.te Funktion unten bringt mir unter Windows 7 nicht immer eine Seriennummer, obwohl eine eingetragen ist. Wenn eine da ist, bringt mir die obere Funktion ebenso die Serial.
Ich würde gerne die obere nutzen, aber weiss grad nicht wie ich den Fehler oben abfangen soll, da ich mit WMI und dergleichen auf Kriegsfuss stehe.
Spoiler anzeigen
Func _CI_GetMonitor($LHost)
Local $colItems, $objWMIService, $WMIWmiMonitorID, $sMonitorInfo; $objItem,
$objWMIService = ObjGet('winmgmts:\\' & $LHost & '\root\wmi')
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
$WMIWmiMonitorID = $objWMIService.ExecQuery("SELECT * FROM WmiMonitorID WHERE Active='True'")
If IsObj($WMIWmiMonitorID) Then
For $colItems In $WMIWmiMonitorID
For $i = 0 To UBound($colItems.SerialNumberID) - 1
Local $sSerialNumberID = $colItems.SerialNumberID($i)
If StringLen($sSerialNumberID) <> 0 Then
$sMonitorInfo = $sMonitorInfo & String(Chr($sSerialNumberID))
EndIf
Next
Next
EndIf
Return $sMonitorInfo
EndFunc ;==>_CI_GetMonitor
Spoiler anzeigen
Func Monitor_XP($strComputer = $LHost)
Local $wbemFlagReturnImmediately = 0x10
Local $wbemFlagForwardOnly = 0x20
Local $objWMIService = ObjGet ("winmgmts:\\" & $strComputer & "\root\CIMV2")
[/autoit] [autoit][/autoit] [autoit]If Not IsObj($objWMIService) Then Return
[/autoit] [autoit][/autoit] [autoit]Local $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_DesktopMonitor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
Local $j = 0
If IsObj ($colItems) Then
For $objItem In $colItems
Local $PNPDeviceID = $objItem.PNPDeviceID
Local $screenwidth = $objItem.ScreenWidth
If $screenwidth = 0 Then ExitLoop
Local $monedid = RegRead("\\" & $strComputer & "\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\" & $PNPDeviceID & "\Device Parameters", "EDID")
if StringLen($monedid) >0 Then
Dim $edidarray[StringLen($monedid) ]
Else
Dim $edidarray[1]
EndIf
$edidarray[0]= (StringLen($monedid) / 2) + 1
For $i = 1 To StringLen($monedid) Step 2
$j = $j + 1
$edidarray[$j] = Dec(StringMid($monedid, $i, 2))
Next
Next
Local $sernumstr = ""
Local $sernum = 0
For $i = 1 To (UBound($edidarray) / 2) - 4
If $edidarray[$i] = "0" And $edidarray[$i + 1] = "0" And $edidarray[$i + 2] = "0" And $edidarray[$i + 3] = "255" And $edidarray[$i + 4] = "0" Then
$sernum = $i + 4
EndIf
Next
If $sernum <> 0 Then
Local $endstr = 0
$sernumstr = ""
For $i = 1 To 13
If $edidarray[$sernum + $i] = "10" Then
$endstr = 1
Else
If $endstr = 0 Then
$sernumstr = $sernumstr & Chr($edidarray[$sernum + $i])
EndIf
EndIf
Next
Else
$sernumstr = ""
EndIf
EndIf
Return $sernumstr
EndFunc