![]() |
AW: Das Handle ist ungültig
Zitat:
DisplayName wurde mit deiner Funktion bearbeitet. Das heißt egal welches Windows System welchen String übergibt. %windir%, %SystemRoot%, %futz% ;) Deine Funktion den richtigen Pfad zurück gibt vorausgesetzt er existiert in der Realität. Nun! Die kann ich aber für das Icon nicht verwenden. Also nutze ich jetzt meine Extrakt Routine mit %SystemRoot% und ein andere hat aber %Windir% was passiert? Richtig das Icon wird falsch angezeigt oder hast du das nicht gesehen auf dem Screenshot? Zitat:
Langsam sollten die ihre Bibliotheken mal aktualisieren. Sonst kann man direkt wieder nach VB6 zurück gehen da musste man auch alle API's zusammen suchen. Zitat:
Delphi-Quellcode:
if SHLoadIndirectString(PWideChar(IconPfad), Lbuf, Length(Lbuf), Pointer(nil^)) = S_OK then
gibt zurück = '' = nothing. Weil der IconPfad zur IconResource keinen string enthält ist ja auch logisch da liegt ein Icon.- gruss |
AW: Das Handle ist ungültig
@HolgerX:
Schau mal auf die von Emil geposteten Bilder - es geht nicht um Slash und Backslash sondern um ein völlig anderes Zeichen auf dem koreanischen System. Zitat:
Zitat:
Zitat:
Zitat:
Grüße Dalai |
AW: Das Handle ist ungültig
Zitat:
Ich verwende deine Funktion aber sie nutzt mir für den IconPfad nichts. Weil ich hier nach einem Icon suche nicht nach einem String in der Ressourcen Datei. Die API wird zwar den Pfad %Windir%\System32 intern richtig verarbeiten gibt aber nichts zurück weil die gesamte API den Ressourcenstring als Rückgabe beinhaltet. Diese gibt mir wie schon gesagt nix zurück. Glaube aber es liegt nicht am Koreanischen System sondern an der Windows Version er verwendet W10 Scheint das die Umgebungsvariable dort geändert wurde. Von SystemRoot nach Windir Was ich also benötige ist eine API welche die Umgebungsvariable egal welche ich übergebe als korrekten Pfad zurückgibt ohne das ich den String selbst extrahieren muss. Das dürfte schwer sein mit der angehängten ID des Icon ;) OK die könnte ich notfalls wegmachen. gruss |
AW: Das Handle ist ungültig
Hmm..
Zitat:
Delphi-Quellcode:
function ExpandEnvVars(const Str: string): string;
var BufSize: Integer; // size of expanded string begin Result := Str; // Get required buffer size BufSize := ExpandEnvironmentStrings(PChar(Str), nil, 0); if BufSize > 0 then begin // Read expanded string into result string SetLength(Result, BufSize); ExpandEnvironmentStrings(PChar(Str), PChar(Result), BufSize); end; end; |
AW: Das Handle ist ungültig
Zitat:
gruss |
AW: Das Handle ist ungültig
OK, ich beschreibe nochmals den Weg, den ich gehen würde, ausgehend von der folgenden Struktur des indirekten Ressourcen-Strings (völlig egal ob für Strings, Icons oder sonstwas) - @<Pfad_zur_Datei>,-<ID_der_Ressource>:
Grüße Dalai |
AW: Das Handle ist ungültig
Jetzt habe ich verstanden.. Warum schwer machen wenn es auch einfach geht.
Delphi-Quellcode:
Kann hier den Filename "StrID" noch splitten damit falls die ID mal <> 3 sein sollte es immer noch funktioniert.
procedure TAudioVolume.LoadIconPathfromResource(IconPath: PWideChar);
var Module: HModule; Filename: string; StrID: string; ID: DWORD; lpDest: PWideChar; begin lpDest := nil; // Remove First @ Letter Filename := MidStr(IconPath, 2, Length(IconPath)); // Extract ID StrID := MidStr(Filename, Length(Filename) - 2, 4); ID := StrToInt(StrID); // Remove ID from Path Filename := LeftStr(Filename, Length(Filename) - 5); ExpandEnvironmentStrings(PWideChar(Filename), lpDest, Length(Filename)); if Assigned(lpDest) then begin // Load the Lib Module := LoadLibraryExW(lpDest, 0, LOAD_LIBRARY_AS_DATAFILE); // check for error if Module <> INVALID_HANDLE_VALUE then begin Icon := TIcon.Create; Icon.Handle := LoadIcon(Module, MakeIntResource(ID)); if Module <> 0 then FreeLibrary(Module); end; end; end; gruss |
AW: Das Handle ist ungültig
Man kann auch "Alles" an ExpandEnvironmentStrings übergeben und es werden alle bekannten %xxx% ersetzt.
Aber für den Zugriff muß man es dennoch zerlegen. Das @ gibt an, dass es kein direkter Text oder Pfad zu einem Icon ist, sondern eine Referenz auf eine Ressource. |
AW: Das Handle ist ungültig
Zitat:
Grüße Dalai |
AW: Das Handle ist ungültig
Zitat:
Sie sucht nach dem Komma zerlegt den String in ein Array und das höchste davon ist dann die ID.. PS: ExpandEnvironmentStrings scheint nicht zuverlässig zu funktionieren. Irgendwas falsch? lpDest ist Nil und dann mal wieder nicht. sorry wieder 2 Bilder.. Ich glaube mache langsam einen neuen Thread auf das hat ja langsam nichts mehr mit dem eigentlichen Thema "Handle" zu tun. Wenn das Problem beseitigt ist. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz