AGB  ·  Datenschutz  ·  Impressum  







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

Explorer mit WinEXEC starten

Ein Thema von Franz100 · begonnen am 1. Aug 2005 · letzter Beitrag vom 2. Aug 2005
Antwort Antwort
Franz100

Registriert seit: 1. Aug 2005
17 Beiträge
 
#1

Explorer mit WinEXEC starten

  Alt 1. Aug 2005, 17:09
Hallo

ich starte den Explorer aus dem Programm heraus mit:
WinExec('explorer.exe Fotos',1);

Das funktioniert auch super. Nur wird das Explorer-Fenster in voller Größe geöffnet. Ich möchte aber nur so 300 x 200 ungefähr. Soll nur zum Nachsehen im Ordner FOTOS dienen, wie der Name des Fotos ist, um den Namen richtig in die Datenbank einzutragen.

Wie kann ich dem Explorer für dieses Fenster die Größe geben?
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#2

Re: Explorer mit WinEXEC starten

  Alt 1. Aug 2005, 17:22
Du könntest versuchen den Explorer mit CreateProcess zu starten, da können Parameter für die Position und Größe angegeben werden.

Etwa so:

Delphi-Quellcode:
var StartupInfo:TStartupInfo;
begin
  FillChar(StartupInfo, SizeOf(TStartupInfo),0);
  StartupInfo.lpReserved:=NIL;
  StartupInfo.cb:=SizeOf(TStartupInfo);
  StartupInfo.dwX:=x; // Linksoben
  StartupInfo.dwY:=y; //
  StartupInfo.dwXSize:=XSize; //
  StartupInfo.dwYSize:=YSize; //
  StartupInfo.dwFlags:=STARTF_USEPOSITION+STARTF_USESIZE;
  If CreateProcess(.....
  Mit Zitat antworten Zitat
Franz100

Registriert seit: 1. Aug 2005
17 Beiträge
 
#3

Re: Explorer mit WinEXEC starten

  Alt 1. Aug 2005, 18:38
Was muß ich bei if(CreateProcess ... reinschreiben?
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#4

Re: Explorer mit WinEXEC starten

  Alt 1. Aug 2005, 18:47
Kleines Beispiel aus dem "Easy Delphi Helper" zur Verwendung von "CreateProcess"
Zitat:
Um ein anderes Programm zu starten sollte man CreateProcess benutzen, da diese Funktion sehr viele Parameter kennt. Hier eine Funktion, die den Umgang damit erleichtert. In AFilename wird der Dateiname des Programms übergeben, in AParameter kann die Parameterzeile angegeben werden, in ACurrentDir übergibt man ein alternatives Startverzeichnis, bei einem leeren String wird das Verzeichnis der Exe benutzt. Setzt man ACurrentDir auf ein nicht vorhandenes Verzeichnis, startet die Anwendung nicht. Wenn AWait True ist, wartet das Programm darauf, dass das aufgerufene Programm beendet wird.
Übergibt man den optionalen Parameter AOnWaitProc, so wird diese Funktion etwa alle 50 ms aufgerufen, bis das gestartete Programm wieder geschlossen wird. Über die Parameter, die AOnWaitProc übergeben werden, kann man auf den Prozess zugreifen und ihn ggf. beenden.
Delphi-Quellcode:
type
TExecuteWaitEvent = procedure(const ProcessInfo: TProcessInformation;
                                    var ATerminate: Boolean) of object;

procedure ExecuteFile(const AFilename: String;
                 AParameter, ACurrentDir: String; AWait: Boolean;
                 AOnWaitProc: TExecuteWaitEvent=nil);
var
  si: TStartupInfo;
  pi: TProcessInformation;
  bTerminate: Boolean;
begin
  bTerminate := False;

  if Length(ACurrentDir) = 0 then
    ACurrentDir := ExtractFilePath(AFilename);

  if AnsiLastChar(ACurrentDir) = '\then
    Delete(ACurrentDir, Length(ACurrentDir), 1);

  FillChar(si, SizeOf(si), 0);
  with si do begin
    cb := SizeOf(si);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_NORMAL;
  end;

  FillChar(pi, SizeOf(pi), 0);
  AParameter := Format('"%s&" %s', [AFilename, TrimRight(AParameter)]);

  if CreateProcess(Nil, PChar(AParameter), Nil, Nil, False,
                   CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or
                   NORMAL_PRIORITY_CLASS, Nil, PChar(ACurrentDir), si, pi) then
  try
    if AWait then
      while WaitForSingleObject(pi.hProcess, 50) <> Wait_Object_0 do
      begin
        if Assigned(AOnWaitProc) then
        begin
          AOnWaitProc(pi, bTerminate);
          if bTerminate then
            TerminateProcess(pi.hProcess, Cardinal(-1));
        end;

        Application.ProcessMessages;
      end;
  finally
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
  end;
end;
Beispielaufruf (kein Warten)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ExecuteFile('c:\windows\notepad.exe', '', '', false);
end;
Beispielaufruf (mit Warten)

Die Anwendung wird mit Button1 gestartet und kann mit Button2 beendet werden.
Delphi-Quellcode:

type
TForm1 = class(TForm)
  ...
private
  FTerminate: Boolean;
  procedure DoOnExecuteWait(const ProcessInfo: TProcessInformation;
                                   var ATerminate: Boolean);
end;


procedure TForm1.DoOnExecuteWait(const ProcessInfo: TProcessInformation;
                                   var ATerminate: Boolean);
begin
  ATerminate := FTerminate;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FTerminate := False;
  ExecuteFile('C:\Windows\notepad.exe', '', '', True, DoOnExecuteWait);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FTerminate := True;
end;
Im Gegensatz zu Shellexecute können so wirklich nur ausführbare Programme gestartet werden.

Nähere Informationen sind im PSDK unter dem Stichwort Process_Information zu finden.
Ich hoffe, das beantwortet deine Fragen.

(Ja, Copy & Paste ist einfach, ich weiß)


  Mit Zitat antworten Zitat
Franz100

Registriert seit: 1. Aug 2005
17 Beiträge
 
#5

Re: Explorer mit WinEXEC starten

  Alt 1. Aug 2005, 19:56
Ja, das kommt so ungefähr hin, wie ich es mir gedacht habe.

Vielen Dank!
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: Explorer mit WinEXEC starten

  Alt 2. Aug 2005, 09:55
Bitte nie nie nie nie nie dieses unsägliche WinExec() benutzen!


WinExec ist eine Funktion, die aus Win16 stammt und auch nur dorthin gehört. Sie existiert, genau wie das Delphi-Keyword object aus der gleichen Ära, nur aus Kompatibilitätsgründen und es steht nicht umsonst ein Hinweis vor der eigentlichen Funktionsdeklaration im PSDK:
Im PSDK steht:
Note This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:15 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