AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows 7 64Bit Redirection

Ein Thema von amigage · begonnen am 10. Nov 2010 · letzter Beitrag vom 29. Nov 2010
Antwort Antwort
Seite 1 von 3  1 23      
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#1

Windows 7 64Bit Redirection

  Alt 10. Nov 2010, 16:26
Hallo liebe Gemeinde,

ich versuche mit einem 32 Bit Programm unter 64 Bit ein Systemprogramm aufzurufen, z.B. die Bildschirmtastatur.

Ich habe mich in die Problematik der 64Bit Redirection hier im Forum eingelesen und einige gute Ansätze gefunden. Leider funktionieren die bei mir nicht?

Debuggen kann ich leider nur über Meldungen, da mein Delphi 2009 nicht auf dem 64Bit System installiert ist.

Delphi-Quellcode:
procedure TFormDlg.BitBtn1Click(Sender: TObject);
var
  is64Bit : boolean;
begin
  is64Bit := Is64BitViaRegistry;
  showmessage('is64Bit : ' + BoolToStr(is64Bit));
  if (is64Bit = true) then
    ChangeFSRedirection(true); // Redirect stoppen
  showmessage ('start von osk.exe');
  ShellExecute(handle, 'open', PChar('%WinDir%\system32\') + 'osk.exe'), NIL, NIL, SW_SHOW);
  if (is64Bit = true) then
    ChangeFSRedirection(false); // Redirect wieder starten
end;
Die Funktion ChangeFSRedirection() habe ich hier aus dem Forum und nur um die Meldungen erweitert.

Delphi-Quellcode:
function ChangeFSRedirection(bDisable: Boolean): Boolean;
type
     TWow64DisableWow64FsRedirection = Function(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
     TWow64EnableWow64FsRedirection = Function(var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
var
    hHandle: THandle;
    Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
    Wow64EnableWow64FsRedirection: TWow64EnableWow64FsRedirection;
    Wow64FsEnableRedirection: LongBool;
begin
  Result := false;

  try
    hHandle := GetModuleHandle('kernel32.dll');
    @Wow64EnableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64EnableWow64FsRedirection');
    @Wow64DisableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64DisableWow64FsRedirection');

    if bDisable then
    begin
     if (hHandle <> 0) and (@Wow64DisableWow64FsRedirection <> nil) then
     begin
       showmessage('Abschaltung starten');
       Result := Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection);
       showmessage('disabled : ' + BoolToStr(Result));
     end;
    end else
    begin
     if (hHandle <> 0) and (@Wow64EnableWow64FsRedirection <> nil) then
     begin
       showmessage('Abschaltung wieder einschalten');
       Result := Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);
       showmessage('enabled : ' + BoolToStr(Result));
       Result := True;
     end;
    end;
  Except
  end;
end;
Statt
  1. is64Bit : true
  2. Abschaltung starten
  3. disabled : true
  4. start von osk.exe
  5. Abschaltung wieder einschalten
  6. enabled : true

wird mir folgende, unlogische Abfolge unter 64Bit angezeigt:
  1. is64Bit : true
  2. Abschaltung starten
  3. enabled : true

Kann mir jemand bei der Fehlersuche behilflich sein? Liegt es am Delphi 2009?

Vielen Dank im Voraus.
Amigage
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Windows 7 64Bit Redirection

  Alt 10. Nov 2010, 16:53
Versuch mal, ob es vielleicht mit einem verändertem Pfad klappt:
Zitat:
%windir%\Sysnative\osk.exe
http://msdn.microsoft.com/en-us/libr...87(VS.85).aspx
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#3

AW: Windows 7 64Bit Redirection

  Alt 10. Nov 2010, 17:46
Moin,

also erstmal solltest du nicht die alten Funktionen verwenden, sondern die neuen: MSDN-Library durchsuchenWow64RevertWow64FsRedirection und MSDN-Library durchsuchenWow64DisableWow64FsRedirection.

Zitat:
Wow64EnableWow64FsRedirection Function

Enables or disables file system redirection for the calling thread.

This function may not work reliably when there are nested calls. Therefore, this function has been replaced by the MSDN-Library durchsuchenWow64DisableWow64FsRedirection and MSDN-Library durchsuchenWow64RevertWow64FsRedirection functions.
Und wenn du ein kleines Beispielprojekt anhängst, kann ich oder jemand anderes auch gern mal live auf einem x64 testen

Nur um es hervorzuheben, denn es muß ja nicht zwangsläufig spezifisch Windows 7 sein, auch wenn's im Thementitel steht:

Zitat:
Windows Server 2003 and Windows XP: The Sysnative alias was added starting with Windows Vista.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)

Geändert von Assarbad (10. Nov 2010 um 17:48 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Windows 7 64Bit Redirection

  Alt 10. Nov 2010, 19:18
Zitat:
wird mir folgende, unlogische Abfolge unter 64Bit angezeigt:
1.is64Bit : true
2.Abschaltung starten
6.enabled : true
Sieht für mich logisch aus - mit der Abschaltung von 32Bit FS werden wohl auch Bildschirmausgaben mit ShowMessage gestört.
Deshalb fehlen dann die Punkte 3. bis 5.
Andreas
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Windows 7 64Bit Redirection

  Alt 11. Nov 2010, 17:51
@Assarbad:
Besten Dank für den Hinweis, bezüglich Wow64RevertWow64FsRedirection, jedoch besteht ja bei mir das Problem bereits bei Wow64DisableWow64FsRedirection, denn da scheint ja schon irgendwie etwas schief zu laufen. Ich habe trotzdem mal eine Änderung vorgenommen. The same procedure.

Ich habe mal ein Beispielprojekt angelegt. Eine kompilierte Exe ist auch beigelegt. Würde mich freuen, wenn ihr das mal testen und über den Quellcode schauen könntet (speziell die Funktion ChangeFSRedirection() ).

@shmia:
Für mich ist die Schlussfolgerung nicht ganz nachzuvollziehen, denn dann hätte ja zumindest die Bildschirmtastatur starten müssen, oder?

Ich danke Euch im Voraus für jede Hilfe und jeden Hinweis.
Angehängte Dateien
Dateityp: zip 64BitRedirect.zip (272,5 KB, 40x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#6

AW: Windows 7 64Bit Redirection

  Alt 11. Nov 2010, 18:22
Du benutzt es aber so wie du es schriebst, oder? Also nicht innerhalb verschiedener Threads oder ähnliches?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Windows 7 64Bit Redirection

  Alt 11. Nov 2010, 19:08
Nein, ganz normal bei Klick auf eine Schaltfläche. Keine Threads!
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: Windows 7 64Bit Redirection

  Alt 11. Nov 2010, 19:15
Nein, ganz normal bei Klick auf eine Schaltfläche. Keine Threads!
Okay, gucke nachher mal drüber.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Windows 7 64Bit Redirection

  Alt 11. Nov 2010, 19:50
Ich denke shima hat recht
nimm statt showmessage mal Memo1.lines.add

is64Bit : true
Abschaltung starten
disabled : true
start von osk.exe
Abschaltung wieder einschalten
enabled : true

OSK öffnet sich
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: Windows 7 64Bit Redirection

  Alt 11. Nov 2010, 20:03
Ich denke shima hat recht
nimm statt showmessage mal Memo1.lines.add

is64Bit : true
Abschaltung starten
disabled : true
start von osk.exe
Abschaltung wieder einschalten
enabled : true

OSK öffnet sich
Schließe mich an. Getestet auf Win 7 x64.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
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