peterleb
Goto Top

VBScript Laufzeitfehler 800A004C bei LoadPicture()

Hallo Leute,

Ich lese den Namen des aktuellen Desktopwallpapers aus der Registry in einem VB-Script aus.
Das klappt auch wunderbar.
In einem weiteren Schritt möchte ich die tatsächlichen Abmessungen des Bildes ermitteln.

Dim strValue, strKeyPath, strValueName
Dim objPicture, oReg
Dim nHeight, nWidth

Function ShowImage(Source)
   ......
End Function

strKeyPath = "Control Panel\Desktop"  
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  
strValueName = "WallPaper"  
oReg.GetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValue

If inStr(1, strValue, "TranscodedWallpaper", 0) > 0 Then  
	strValueName = "TranscodedImageCache"  
	oReg.GetBinaryValue HKEY_CURRENT_USER, strKeyPath, strValueName, iValues
	strValue = ""  
	For i = 24 to uBound(iValues)
		If iValues(i) > 31 Then  'The numbers from 0 to 31 represents nonprintable ASCII codes  
		strValue = strValue & chr(iValues(i))
		End If
	Next
End If

Set objPicture = LoadPicture(strValue)
nHeight = round(objPicture.height/2540*96) 'Umrechnung HiMetric zu Pixel  
nWidth = round(objPicture.width/2540*96)

ShowImage strValue

Leider bricht das Script immer wieder mit o. g. Laufzeitfehler "Der Pfad wurde nicht gefunden.: 'LoadPicture'" ab.
Fehlt hier noch irgendeine Deklaration? Wo liegt der Fehler?
Selbst wenn ich mal testweise
Set objPicture = LoadPicture("C:\Bild1.jpg")  
schreibe (das Bild ist natürlich physikalisch vorhanden), kommt der Laufzeitfehler.

Vielen Dank für gute Tipps.
Peter

Content-ID: 1702553982

Url: https://administrator.de/contentid/1702553982

Ausgedruckt am: 19.11.2024 um 04:11 Uhr

mbehrens
mbehrens 08.01.2022 um 18:00:30 Uhr
Goto Top
Zitat von @PeterleB:

Ich lese den Namen des aktuellen Desktopwallpapers aus der Registry in einem VB-Script aus.

Leider bricht das Script immer wieder mit o. g. Laufzeitfehler "Der Pfad wurde nicht gefunden.: 'LoadPicture'" ab.
Fehlt hier noch irgendeine Deklaration? Wo liegt der Fehler?

In der 64-Bit Umgebung.
PeterleB
PeterleB 08.01.2022 um 21:54:45 Uhr
Goto Top
Hallo,

dann ist das doch richtig, dass LoadPicture nur in 32-bit Umgebung funktioniert!

Zur Vorgeschichte muß ich noch erklären, dass ich mein System mit einem ca. 5 Wochen altem Abbild wiederherstellen mußte.
Aber ich bin mir sicher, dass das Script zuvor funktionierte.
Welche Alternative zu LoadPicture gibt es für x64?

Gruß
Peter
PeterleB
Lösung PeterleB 08.01.2022 aktualisiert um 22:47:29 Uhr
Goto Top
Hallo Leute,

habe es selbst herausbekommen:

Function ShowImage(Source)
   ......
Dim objImage
Set objImage = CreateObject("WIA.ImageFile")  
	objImage.LoadFile Source
	nWidth = objImage.Width
	nHeight = objImage.Height
objImage = Nothing
   ......
End Function

Werte in Pixel und nicht in HiMetric.
Keine Variablenumwandlungen nötig.

Ich bin ganz schön stolz auf mich (bei stackoverflow gefunden).

Gruß
Peter
PeterleB
PeterleB 10.01.2022 um 07:12:31 Uhr
Goto Top
Hallo Leute,

ich muß nochmal was dazu sagen.
Ich hatte auch gelesen, dass LoadPicture() nur für 32-bit Systeme ist.
Und wieso funktioniert das alte Script dann auf einem gleichartigen Rechner mit Windows 10 (19044.1415) x64?

Gruß
Peter
rubberman
rubberman 10.01.2022 um 20:24:34 Uhr
Goto Top
Und wieso funktioniert das alte Script dann auf einem gleichartigen Rechner mit Windows 10 (19044.1415) x64?

Vermutlich weil das Script aus irgendeinem Grund im WOW64 Modus läuft und wscript.exe und Bibliotheken aus dem syswow64 Verzeichnis nutzt. Das ist aber Glaskugellesen. Schau in den Taskmanager. Im "Prozesse" Tab sollte der Prozess dann mit (32 Bit) markiert sein. Alternativ gehe auf den "Details" Tab und blende die Spalte für die Befehlszeile ein.

Steffen