Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Shellexecute mit explorer.exe -> Fenster verhindern (https://www.delphipraxis.net/62255-shellexecute-mit-explorer-exe-fenster-verhindern.html)

Tannendiess 1. Feb 2006 22:25


Shellexecute mit explorer.exe -> Fenster verhindern
 
Hallo,

ich muss in meinem Programm zwischendurch die Registry neu laden. Dazu beende ich den Prozess explorer.exe und starte ihn mit
Delphi-Quellcode:
ShellExecute(0, Nil, PChar('explorer.exe'), nil, nil, SW_HIDE);
neu. Trotz des "SW_HIDE" erscheint nicht nur die Taskleiste wieder, sondern es öffnet sich auch ein Windows-Explorer-Fenster im Ordner "Eigene Dateien".

Wie kann ich verhindern, dass sich dieses Fenster öffnet?

Oder gibt es sogar noch eine einfachere Möglichkeit, die Registry neu zu laden?

Danke schonmal im Voraus!
Tannendieß

Jelly 1. Feb 2006 22:42

Re: Shellexecute mit explorer.exe -> Fenster verhindern
 
Ich seh den Zusammenhang zwischen Registry und Explorer nicht...

Wie greifst Du denn auf die Registry zu?

Tannendiess 1. Feb 2006 22:43

Re: Shellexecute mit explorer.exe -> Fenster verhindern
 
Dadurch, dass ich den Explorer beende und neu starte, wird die Registry neu geladen. Das geschieht bei jedem Start des Explorers.

retnyg 1. Feb 2006 22:53

Re: Shellexecute mit explorer.exe -> Fenster verhindern
 
probier mal bei dem ersten nil ein 'open' und das hide lass weg

ansonsten nimm CreateProcess

Tannendiess 2. Feb 2006 14:00

Re: Shellexecute mit explorer.exe -> Fenster verhindern
 
Zitat:

Zitat von retnyg
probier mal bei dem ersten nil ein 'open' und das hide lass weg

Dann öffnet er trotzdem das Explorer-Fenster.

Zitat:

Zitat von retnyg
ansonsten nimm CreateProcess

Hab ich mal probiert. Dazu habe ich mir folgende Funktion kopiert:
Delphi-Quellcode:
procedure TForm1.ExplorerStarten;
var aSi:TStartUpInfo;
aPI:TProcessInformation;
dwError:DWord;
begin
  FillChar(aSi,SizeOf(TStartupInfo),0);
  with aSI do
  begin
    cb:=SizeOf(TStartupInfo);
    dwFlags:=STARTF_USESHOWWINDOW;
    wShowWindow:=SW_HIDE;
  end;
  if not createprocess(
  CreateProcess(PChar('explorer.exe'),nil,nil,nil,false,
                       NORMAL_PRIORITY_CLASS,nil,nil,aSI,aPI) then
  begin
    dwError:= GetLastError;
    showmessage(Format('Programm kann nicht gestartet werden. Fehler : %d',[dwError]));
  end;
end;
Es funktioniert zwar alles, auch das Explorer-Fenster geht dann nicht mehr auf. Es kommt aber folgender Fehler: 'Programm kann nicht gestartet werden. Fehler : 2'.

Ich könnte natürlich einfach die Fehlermeldung deaktivieren, dann würde alles laufen. Aber der Fehler kommt ja nicht umsonst. Was bedeutet er und wie kann ich ihn verhindern?

Luckie 2. Feb 2006 14:03

Re: Shellexecute mit explorer.exe -> Fenster verhindern
 
Zitat:

C:\Dokumente und Einstellungen\Michael>net helpmsg 2

Das System kann die angegebene Datei nicht finden.

Tannendiess 2. Feb 2006 14:10

Re: Shellexecute mit explorer.exe -> Fenster verhindern
 
Sorry, das verstehe ich nicht ganz.

Welche Datei ist gemeint? Der Explorer startet ja schließlich.

retnyg 2. Feb 2006 15:25

Re: Shellexecute mit explorer.exe -> Fenster verhindern
 
warum 2x createprocess ? :roll:

Tannendiess 2. Feb 2006 15:58

Re: Shellexecute mit explorer.exe -> Fenster verhindern
 
Sorry, muss ich wohl falsch reinkopiert haben. So heißt es richtig:

Delphi-Quellcode:
procedure TForm1.ExplorerStarten;
var aSi:TStartUpInfo;
aPI:TProcessInformation;
dwError:DWord;
begin
  FillChar(aSi,SizeOf(TStartupInfo),0);
  with aSI do
  begin
    cb:=SizeOf(TStartupInfo);
    dwFlags:=STARTF_USESHOWWINDOW;
    wShowWindow:=SW_HIDE;
  end;
  if not
         CreateProcess(PChar('explorer.exe'),nil,nil,nil,false,
                       NORMAL_PRIORITY_CLASS,nil,nil,aSI,aPI) then
  begin
    dwError:= GetLastError;
    showmessage(Format('Programm kann nicht gestartet werden. Fehler : %d',[dwError]));
  end;
end;
Der Fehler tritt aber trotzdem auf.

retnyg 2. Feb 2006 16:11

Re: Shellexecute mit explorer.exe -> Fenster verhindern
 
'explorer' als 2 parameter hilft.

was auch hilft ist das PSDK oder die msdn seite, wo du dich über die befehle die du einsetzt, informieren kannst

sehr hilfreich ist auch, zu verstehen was die quelltexte machen die man verwendet und nicht blind drauflos-copy&pastet

und noch hilfreicher ist eine detaillierte fehlermeldung:

Delphi-Quellcode:
showmessage(Format('Programm kann nicht gestartet werden. Fehler : %s',[syserrormessage(dwError)]));


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr.
Seite 1 von 2  1 2      

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