Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi %programfiles% unter Windows 7 x64 (https://www.delphipraxis.net/141755-programfiles-unter-windows-7-x64.html)

Sereby 15. Okt 2009 23:00

Re: %programfiles% unter Windows 7 x64
 
das funzt nicht weil 0 = True :) also wird der das niemals machen und eine Fehlermeldung für Feherlcode 0 gibts meines wissens nach nicht aber ich kanns iwie nicht prüfen da der keine Messageboxen mehr zeigen möchte :)?
der geht da zwar hin aber ignoriert das einfach.. überpringt den code sozusagen!

edit.. so ka was ich gemacht hab aber nu gehts aber "Der Vorgang wurde erfolgreich beendet" ist wohl nicht der Fehler :)

himitsu 15. Okt 2009 23:05

Re: %programfiles% unter Windows 7 x64
 
http://msdn.microsoft.com/en-us/library/aa365743.aspx

Du hast dir auch schonmal den Abschnitt mit den Erläuterungen angesehn?
Da steht ein "wichtiger" Punkt, welchen ich in deinem Testprogramm nicht entdecken konnte.

oder erstellt dein Delphi außschließlich WinNT-Programme?
( PE-Flags + WIN32_WINNT )

Luckie 15. Okt 2009 23:08

Re: %programfiles% unter Windows 7 x64
 
Zitat:

Zitat von Sereby
das funzt nicht weil 0 = True :) also wird der das niemals machen

Wie kommst du denn darauf?
Zitat:

f the function fails, the return value is zero.

Sereby 15. Okt 2009 23:10

Re: %programfiles% unter Windows 7 x64
 
meinst du das mit "_WIN32_WINNT"?
wenn ja dann bitte ich dich mir zu erklären wie und wo ich das definieren muss ^^

wenn du das mit Revert meinst, dann habe ich das auch schon probiert ändert aber nichts an der tatsache, dass die umschaltung dann trotzdem funktionieren müsste!

@luckie:
aber errorcode 0 entspricht doch True wenn ich mich nich total irre.. zumindest dann bei LongBool

Luckie 15. Okt 2009 23:12

Re: %programfiles% unter Windows 7 x64
 
Nein. Null ist false und lies doch endlich mal die Dokumentation:
Zitat:

if the function fails, the return value is zero.
Wenn der Rückgabewert Null ist, ist die Funktion fehlgeschlagen.

Sereby 15. Okt 2009 23:14

Re: %programfiles% unter Windows 7 x64
 
ja das weiss ich doch :)
meine frage ist schon seit heut mittag warum das nicht funktioniert ;)

ich sehe keinen grund ausser dieses komische _WIN32_WINNT dingens was ich nicht weiss wo/wie das hin muss/darf

Luckie 15. Okt 2009 23:15

Re: %programfiles% unter Windows 7 x64
 
Was gibt denn jetzt MSDN-Library durchsuchenGetLastError zurück? dann hast du doch die Erklärung.

Sereby 15. Okt 2009 23:17

Re: %programfiles% unter Windows 7 x64
 
wie bereits vorhin erwähnt gibt GetLastError den Wert 0 zurück und SyserrorMessage macht daraus ein "Die Vorgang wurde erfolgreich beendet"

Luckie 15. Okt 2009 23:18

Re: %programfiles% unter Windows 7 x64
 
Das kann doch nicht sein. Zeig mal Code.

Sereby 15. Okt 2009 23:20

Re: %programfiles% unter Windows 7 x64
 
dein wunsch sei mir befehl :
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TWow64DisableWow64FsRedirection = function(var Wow64FsEnableRedirection: LongBool): LongBool; stdcall;
  TWow64EnableWow64FsRedirection = function(var Wow64FsEnableRedirection: LongBool): LongBool; stdcall;

var
  //64bit umleitung
  Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
  Wow64EnableWow64FsRedirection: TWow64EnableWow64FsRedirection;
  Wow64FsEnableRedirection: LongBool;
  KernelHandle: THandle;

  Form1: TForm1;

implementation

{$R *.dfm}

uses ShlObj;

function ExpandEnvStr(const szInput: String): String;
const MAXSIZE = 32768;
begin
  SetLength(Result,MAXSIZE);
  SetLength(Result,ExpandEnvironmentStrings(pchar(szInput),
    @Result[1],length(Result)));

  //unnötige #0 zeichen am ende entfernen
  Result := Trim(Result);
end;

function GetSpecialFolder(Folder: Integer): String;
var
  Path: array[0..MAX_PATH-1] of Char;
begin
  Result := '';
  if SHGetSpecialFolderPath(Application.Handle, @Path, Folder, False) then Result := Path;
end;

function ChangeFSRedirection(const DisableIT: Boolean): Cardinal;
begin
  if DisableIT then
  begin
    if (@Wow64EnableWow64FsRedirection <> nil) and (@Wow64DisableWow64FsRedirection <> nil) then
      Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection);
  end else
  begin
    if (@Wow64EnableWow64FsRedirection <> nil) and (@Wow64DisableWow64FsRedirection <> nil) then
      Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);
  end;
  Result := GetLastError;
end;

procedure Init64BitRedir;
begin
  if (KernelHandle = 0) then KernelHandle := LoadLibrary(kernel32);

  if (KernelHandle <> 0) then
  begin
    @Wow64DisableWow64FsRedirection := GetProcAddress(KernelHandle, 'Wow64RevertWow64FsRedirection');
    @Wow64EnableWow64FsRedirection := GetProcAddress(KernelHandle, 'Wow64EnableWow64FsRedirection');
  end;
end;

procedure Close64BitRedir;
begin
  if (KernelHandle <> 0) then
  begin
    FreeLibrary(KernelHandle);
    KernelHandle := 0;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Dir1,Dir2,Dir3,Dir4: String;
  Err1, Err2: Cardinal;
const
  CSIDL_PROGRAM_FILES   = '$26';
  CSIDL_PROGRAM_FILESX86 = '$2A';
  CRLF = #13#10;
begin
  Err1 := ChangeFSRedirection(True);
  Dir1 := 'x64: ' + ExpandEnvStr('%programfiles%');
  Dir2 := 'x86: ' + ExpandEnvStr('%programfiles(x86)%');
  Dir3 := 'x64: ' + GetSpecialFolder(StrToInt(CSIDL_PROGRAM_FILES));
  Dir4 := 'x86: ' + GetSpecialFolder(StrToInt(CSIDL_PROGRAM_FILESX86));
  Err2 := ChangeFSRedirection(False);

  Showmessage('Disable-Return: ' + IntToStr(Err1) + CRLF + Dir1 + CRLF + Dir2 + CRLF + Dir3 + CRLF + Dir4 + CRLF+  'Enable-Return: ' + IntToStr(Err2));
  Showmessage(SyserrorMessage(Err1));
end;

initialization
  Init64BitRedir;

finalization
  Close64BitRedir;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz