Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: nonVCL Kontextsensitive Hilfe unter Vista

  Alt 19. Jun 2007, 07:22
Zitat von Luckie:
PS: Installier dir gefälligst mal wieder Delphi.
Dann sollen die eins bringen, bei dem ich nicht das .NET 1.1 samt SDK brauche. Dann gern.


Mal als Reaktion auf diesen Beitrag: Wie schon erwähnt, ist der Registrywert und Vista ein REG_EXPAND_SZ. Es sind also zwei Schritte erforderlich: zum einen muss der Typ mit kontrolliert werden, und nach dem Auslesen des Pfades müssen evtl. vorhandene Umgebungsvariablen à la "%system%" umgewandelt werden. Die Funktion in der angepassten Unit aus den Tutorials sieht also so aus:
Delphi-Quellcode:
function GetOCXPath(var Path: string): Boolean;
const
  HHPathRegKey = 'CLSID\{adb880a6-d8ff-11cf-9377-00aa003b7a11}\InprocServer32';
var
  rgHandle : HKEY;
  lpType, cbData : dword;
  pBuffer : array[0..MAX_PATH]of char;
begin
  Result := false;
  lpType := REG_NONE;

  if(RegOpenKeyEx(HKEY_CLASSES_ROOT,HHPathRegKey,0,KEY_QUERY_VALUE,
    rgHandle) = ERROR_SUCCESS) then
  try
    lpType := REG_NONE;
    cbData := 0;

    if (RegQueryValueEx(rgHandle, nil, nil, @lpType,
          nil, @cbData) = ERROR_SUCCESS) and
       ((lpType = REG_SZ) or (lpType = REG_EXPAND_SZ)) and // <-- Typ
       (cbData > 1) then
    begin
      if RegQueryValueEx(rgHandle, nil, nil, @lpType,
           @pBuffer, @cbData) = ERROR_SUCCESS then
      begin
        Path := string(pBuffer);
        Path := ExpandEnvStr(Path); // <-- Umgebungsvariable
                                      // (Funktion in "MSysUtils.pas")
        Result := (Path <> '') and (fileexists(Path));
      end;
    end;
  finally
    RegCloseKey(rgHandle);
  end;
end;
Voilà.
  Mit Zitat antworten Zitat