![]() |
Bei Programmaufruf eigene Anwendung nicht beenden?
Hallo Alle!
Wenn ich aus mein Programm ein anderes Programm starten möchte z.B. mit
Delphi-Quellcode:
Klappt zwar der Aufruf, aber mein Programm beendet sich automatisch. Wie kann ich das verhindern? (Übrigens nicht bei jedem Programm.)
ExecuteFile(C:\WINDOWS\System32\sndrec32.exe,'', '', SW_SHOWNORMAL);
Gruß Heike |
Re: Bei Programmaufruf eigene Anwendung nicht beenden?
Guten Morgen,
bekommst Du irgendeine Fehlermeldung wenn sich Dein Programm verabschiedet? Grüße Klaus |
Re: Bei Programmaufruf eigene Anwendung nicht beenden?
Woher kommt denn das ExecuteFile? Standard-Delphi ist es nicht...
|
Re: Bei Programmaufruf eigene Anwendung nicht beenden?
Moin,moin,
Heike, probier es mal mit nachfolgendem Codeschnipsel. Hier wird zudem der Mehrfachstart einner Anwendung unterbunden.
Delphi-Quellcode:
Grüße // Martinprocedure 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; |
Re: Bei Programmaufruf eigene Anwendung nicht beenden?
Zitat:
Nein, kommt keine Fehlermeldung. Gruß Heike |
Re: Bei Programmaufruf eigene Anwendung nicht beenden?
Zitat:
Gruß Heike |
Re: Bei Programmaufruf eigene Anwendung nicht beenden?
Zitat:
Da tut sich bei mir nichts. Kommt auch keine Fehlermeldung. Vieleicht rufe ich es auch falsch auf. Wir ist der Aufruf? Gruß Heike |
Re: Bei Programmaufruf eigene Anwendung nicht beenden?
Hallo Heike,
ich benutze meistens diesen Code:
Delphi-Quellcode:
Habe das mal mit dem Aufruf von SondRec ausprobiert, aber das Programm stürzt nicht ab.
{ 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; Kannst Du Deine Anwendung eventuell mal auf einem andern Rechner ausprobieren? Vielleicht ist etwas mit dem Speicher? Grüße Klaus |
Re: Bei Programmaufruf eigene Anwendung nicht beenden?
Warum immer mit so komplizierten und großen proceduren?
Warum nicht einfach Shellexecute?
Delphi-Quellcode:
:?:
uses shellapi;
Shellexecute(handle,'open',Pchar(Filename),'','',SW_SHOW);
Delphi-Quellcode:
funktioniert bei mir ohne Probleme!
Shellexecute(handle,'open',Pchar('sndrec32.exe'),'','',SW_SHOW);
Gruß Neutral General |
Re: Bei Programmaufruf eigene Anwendung nicht beenden?
Wieso nicht einfach ShellExecute?
EDIT: Roter Kasten? :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz