AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bei Programmaufruf eigene Anwendung nicht beenden?
Thema durchsuchen
Ansicht
Themen-Optionen

Bei Programmaufruf eigene Anwendung nicht beenden?

Ein Thema von smart · begonnen am 23. Aug 2006 · letzter Beitrag vom 23. Aug 2006
Antwort Antwort
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#1

Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 09:41
Hallo Alle!

Wenn ich aus mein Programm ein anderes Programm starten möchte z.B. mit
ExecuteFile(C:\WINDOWS\System32\sndrec32.exe,'', '', SW_SHOWNORMAL); Klappt zwar der Aufruf, aber mein Programm beendet sich automatisch. Wie kann ich das verhindern? (Übrigens nicht bei jedem Programm.)

Gruß
Heike
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 09:48
Guten Morgen,

bekommst Du irgendeine Fehlermeldung wenn sich Dein Programm verabschiedet?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 10:39
Woher kommt denn das ExecuteFile? Standard-Delphi ist es nicht...
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#4

Re: Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 10:47
Moin,moin,

Heike, probier es mal mit nachfolgendem Codeschnipsel. Hier wird zudem der Mehrfachstart
einner Anwendung unterbunden.

Delphi-Quellcode:

procedure TForm1.Application_Start
(const ApplicationName : string;
 const AppParamString : string);
var
    rect : TRect;
    Wnd : HWND;
begin
   Wnd := FindWindow ( nil, PChar(copy( ApplicationName,1,abs(length( ApplicationName )-4 ))) );
   if Wnd <> 0 then SetForegroundWindow( Wnd )
   else
   begin
         SystemParametersInfo(SPI_GETWORKAREA, 0, @Rect, 0);
         Application.ProcessMessages;
         ShellExecute
         ( 0,
            'open',
            PChar( ExtractFilePath(application.ExeName)+ApplicationName),
          // PChar( AppParamString ),
            '',
            '',
            SW_SHOWNORMAL
         );
   end;
   Application.ProcessMessages;
   SleepEx( 1000, false );
end;
Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 12:22
Zitat von Klaus01:
Guten Morgen,

bekommst Du irgendeine Fehlermeldung wenn sich Dein Programm verabschiedet?

Grüße
Klaus
Hallo Klaus!

Nein, kommt keine Fehlermeldung.

Gruß
Heike
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 12:23
Zitat von Flocke:
Woher kommt denn das ExecuteFile? Standard-Delphi ist es nicht...
Kammt aus der Unit FmxUtils.Pas. War glaube ich, auf der Delhpi 7 CD.

Gruß
Heike
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 12:37
Zitat von mschaefer:
Moin,moin,

Heike, probier es mal mit nachfolgendem Codeschnipsel. Hier wird zudem der Mehrfachstart
einner Anwendung unterbunden.

Grüße // Martin
Hallo Martin!

Da tut sich bei mir nichts. Kommt auch keine Fehlermeldung. Vieleicht rufe ich es auch falsch auf. Wir ist der Aufruf?

Gruß
Heike
Heike Kretschmann
Viele Grüße aus Bochum

kaum denkt man alles ist fertig, da fängt man wieder von Vorn an.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 12:55
Hallo Heike,

ich benutze meistens diesen Code:

Delphi-Quellcode:
{ WindowState is one of the SW_xxx constants.
  Look up ShowWindow in the API help for a list.}

function ExecAndWait(const Filename, Params: string;wait:Boolean;WindowState: word): boolean;
{$IFDEF WIN32}
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Enclose filename in quotes to take care of
    long filenames with spaces. }

  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;
  try
    Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE,
                            CREATE_NEW_CONSOLE or
                            NORMAL_PRIORITY_CLASS, NIL,
                            PChar(ExtractFilePath(Filename)),
                            SUInfo, ProcInfo);
  except
    on E: Exception do
      begin
        Result:=false;
      end;
  end;

  { Wait for it to finish. }
  if Result and wait then
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);

{$ELSE}
var
  InstanceID : THandle;
  Buff: array[0..255] of char;
begin
  StrPCopy(Buff, Filename + ' ' + Params);
  InstanceID := WinExec(Buff, WindowState);
  if InstanceID < 32 then
  { a value less than 32 indicates an Exec error }
    Result := FALSE
  else begin
    Result := TRUE;
    if wait then
      repeat
        Application.ProcessMessages;
      until Application.Terminated or (GetModuleUsage(InstanceID) = 0);
  end;
{$ENDIF}
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ExecandWait('C:\WinNT\System32\sndrec32.exe','',false,sw_normal);
end;
Habe das mal mit dem Aufruf von SondRec ausprobiert, aber das Programm stürzt nicht ab.

Kannst Du Deine Anwendung eventuell mal auf einem andern Rechner ausprobieren?
Vielleicht ist etwas mit dem Speicher?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 13:00
Warum immer mit so komplizierten und großen proceduren?
Warum nicht einfach Shellexecute?

Delphi-Quellcode:
uses shellapi;

Shellexecute(handle,'open',Pchar(Filename),'','',SW_SHOW);


Shellexecute(handle,'open',Pchar('sndrec32.exe'),'','',SW_SHOW); funktioniert bei mir ohne Probleme!

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Bei Programmaufruf eigene Anwendung nicht beenden?

  Alt 23. Aug 2006, 13:00
Wieso nicht einfach ShellExecute?

EDIT: Roter Kasten?
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  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 20:16 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