![]() |
AW: Das Handle ist ungültig
Delphi-Quellcode:
hoffe es hilft!
function GetEnvVarValue(const VarName: string): string;
var BufSize: Integer; // buffer size required for value begin // Get required buffer size (inc. terminal #0) BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0); if BufSize > 0 then begin // Read env var value into result string SetLength(Result, BufSize - 1); GetEnvironmentVariable(PChar(VarName), PChar(Result), BufSize); end else // No such environment variable Result := ''; end; procedure TForm1.Button1(Sender: TObject); begin ShowMessage(GetEnvVarValue('SystemRoot')); end; edit
Delphi-Quellcode:
function ExpandEnvironment(const strValue: string): string;
var chrResult: array[0..1023] of Char; wrdReturn: DWORD; begin wrdReturn := ExpandEnvironmentStrings(PChar(strValue), chrResult, 1024); if wrdReturn = 0 then Result := strValue else begin Result := Trim(chrResult); end; end; |
AW: Das Handle ist ungültig
Diese Funktion beinhaltet die API ExpandEnvironmentStrings doch schon warum mehr schreiben als nötig?
Dann kann ich auch diese von HolgerX verwenden das funktioniert. ;) PS: Danke habe die zweite variante mit dem Array versucht Ok funktioniert es wäre ein Fehler wenn die Rückgabe 0 ist. so ist es richtig.
Delphi-Quellcode:
Manchmal wirklich :wall:
procedure TAudioVolume.LoadIconPathfromResource(IconPath: PWideChar);
var Module: HModule; Filename: WideString; lpDest: array[0..MAX_PATH] of WideChar; StrID: string; ID: DWORD; begin // 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); FillChar(lpDest, SizeOf(lpDest), 0); if ExpandEnvironmentStrings(PWideChar(Filename), lpDest, Length(lpDest)) <> 0 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
Delphi-Quellcode:
sicher das Length(lpDest) ausreicht? in meinem Beispiel wird von einem maximal wert ausgegangen und dann mit trim() gekürzt.
ExpandEnvironmentStrings(PWideChar(Filename), lpDest, Length(lpDest))
|
AW: Das Handle ist ungültig
Zitat:
Es heißt ja nicht umsonst MAX_PATH oder? gruss |
AW: Das Handle ist ungültig
Ich bin der Meinung EnvironmentStrings unterliegen nicht diesem Limit, ein Test kann ja nicht Schaden.
Zitat:
|
AW: Das Handle ist ungültig
Zitat:
Ok spätestens wenn es kracht was ich nicht glaube kann man es immer noch ändern. OK.. ![]() gruss |
AW: Das Handle ist ungültig
Meine Funktion zu ExpandEnvironmentStrings sieht so aus (ich glaub, die hab ich schonmal gepostet):
Delphi-Quellcode:
Grüße
function ExpandEnvStr(const sInput: string): string;
const MAXSIZE = 32768; // laut PSDK sind 32k das Maximum begin SetLength(Result, MAXSIZE); SetLength(Result, ExpandEnvironmentStrings(PChar(sInput), @Result[1], Length(Result))-1); //-1 um abschließendes #0 zu verwerfen end; Dalai |
AW: Das Handle ist ungültig
Zitat:
Mein letzter Post hier ![]() Es nimmt sonst kein Ende ;) Danke! Die 100 muss ich nicht unbedingt haben. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 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