Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi beliebiges programm schließen und wieder neu öffnen (https://www.delphipraxis.net/55338-beliebiges-programm-schliessen-und-wieder-neu-oeffnen.html)

mr.unbekannt 19. Okt 2005 20:32


beliebiges programm schließen und wieder neu öffnen
 
hi@all! ich bräuchte mal schnell nen source code, um ein beliebiges offenes programm zu schließen und dnan wieder neu zu starten! kann mir da mal jmd schnell helfen!

mfg mr.unbekannt

storm1988 19. Okt 2005 21:05

Re: beliebiges programm schließen und wieder neu öffnen
 
Um ein Programm zu öffnen verwendest du einfach die API funktion Shellexecute

Bsp:
Delphi-Quellcode:
ShellExecute(Handle, 'open',DEIN PROGRAMM, nil, nil, SW_Show);
Wie man ein beliebiges Programm schließt weis ich auf anhieb jedoch nicht :?

ichbins 19. Okt 2005 21:08

Re: beliebiges programm schließen und wieder neu öffnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
vielleicht kannst du mit der Unit von Luckie was anfangen:

[siehe download]

ich habs schon fertiggebracht damit eine art taskmanager zu proggen.

mr.unbekannt 19. Okt 2005 21:10

Re: beliebiges programm schließen und wieder neu öffnen
 
und iwe eisht es mit dem shcließen aus?

ShellExecute(Handle, 'close',DEIN PROGRAMM, nil, nil, SW_Show);

klappt net!

Palando 19. Okt 2005 21:12

Re: beliebiges programm schließen und wieder neu öffnen
 
Delphi-Quellcode:
SendMessage(Handle.desProgramms, WM_SYSCOMMAND, SC_CLOSE, 0);
Für weitere Möglichkeiten: MSDN-Library durchsuchenWM_SYSCOMMAND

storm1988 19. Okt 2005 21:14

Re: beliebiges programm schließen und wieder neu öffnen
 
Also ich hab jetzt nachgeschaut und folgendes gefunden:

Delphi-Quellcode:
Sendmessage( Handle ,WM_Close,0,0)

ichbins 19. Okt 2005 21:15

Re: beliebiges programm schließen und wieder neu öffnen
 
mit "meiner" Unit kannste ganz gewalttätig gleich den Prozess aus dem Arbeitsspeicher löschen, ohne ihm noch Zeit für Userfragen und on-close-events zu lassen. musste aber erst mal durchblicken.

mr.unbekannt 19. Okt 2005 21:16

Re: beliebiges programm schließen und wieder neu öffnen
 
dnake erstmal für die antwort, teste es schnell! uhm naja ich habe ein beliebieges prog offen, und ich habe den link dafür da. ich will es erst schließen und dann wieder starten!

habe es noch nicht zum laufen gekriegt, dass starten geht, schlißen noch nicht, hat da jmd ne funktion parat?

storm1988 19. Okt 2005 21:26

Re: beliebiges programm schließen und wieder neu öffnen
 
So müsste es gehn:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Handle: HWND;
begin
    Handle:=GetWindow(GetDesktopWindow(),GW_CHILD);
    while (Handle<>0) do
    begin
    if (IsMainAppWindow(Handle) and (AnsiContainsStr(GetWindowCaption(Handle),NAME DEINES PROGRAMMS))) then
    begin

      SendMessage(handle, WM_CLOSE, 0, 0);
      break;
    end;
    Handle:=GetWindow(Handle,GW_HWNDNEXT);
    end;
end;
//EDIT

Du musst aber noch diese Units hinzufügen: JclSysInfo und StrUtils
Wobei die JclSysInfo bei den Jedis dabei ist!!

mr.unbekannt 19. Okt 2005 21:31

Re: beliebiges programm schließen und wieder neu öffnen
 
hmm geht das net ganz einfach über die shellexecute ein prog zu schlißen was den unden pfad hat?

storm1988 19. Okt 2005 21:36

Re: beliebiges programm schließen und wieder neu öffnen
 
Also mit der ShellExecute kann man meines Wissend keine Programm beenden (wie sollte dass auch nur aufrung des Pfades funktionieren??).

Es gibt schon noch andere Möglichkeiten ein Programm zu beenden, aber die sind nur noch länger :wink:

Palando 19. Okt 2005 21:37

Re: beliebiges programm schließen und wieder neu öffnen
 
Zitat:

Zitat von storm1988
So müsste es gehn:

Delphi-Quellcode:
*code*
//EDIT

Du musst aber noch diese Units hinzufügen: JclSysInfo und StrUtils
Wobei die JclSysInfo bei den Jedis dabei ist!!


Warum nicht einfach mit MSDN-Library durchsuchenFindWindow arbeiten?

@mr. unbekannt: Es könnte höchstens die Möglichkeit geben den Namen der Ausführbaren Datei rauszufinden (also z.b. notepad.exe) und dann zu überprüfen, ob irgendeinem laufenden Prozess eine Ausführbare Datei namens "notepad.exe" zugrunde liegt. Wie man das aber realisieren würde, weiß ich nicht...

mr.unbekannt 19. Okt 2005 21:39

Re: beliebiges programm schließen und wieder neu öffnen
 
bei deinem vorigen beispiel geht es nicht! nochmal ganz einfach mein prob! ich möchte eigentlich ein progrmm schließen und dann sofort wieder starten. ich könnte es auch beim anfang starten. und dann eben nach 15 min wieder schließen und neustarten1 hätte da jmd einen kompletten code für mich. delphi 6 personal!

storm1988 20. Okt 2005 14:23

Re: beliebiges programm schließen und wieder neu öffnen
 
Du könntest uns mal posten welches Progamm du eigentlich beenden bzw. starten willst, dann könnten wir dir vielleicht besser helfen. :wink:

mr.unbekannt 20. Okt 2005 15:04

Re: beliebiges programm schließen und wieder neu öffnen
 
uhm, es geht um ein normales prog, welches von creative labs ist, rehct alt und für spracheingabe benutzt wird. weiteres kann ich auch net sagen, ich habe nur die verknüpfung da!

ManuMF 20. Okt 2005 15:20

Re: beliebiges programm schließen und wieder neu öffnen
 
Zitat:

Zitat von ManuMF
Wenn der Name des Fensters bekannt ist:
Delphi-Quellcode:
var Window : hWnd;

Window := FindWindow(nil, 'Name des Fensters');
if Window <> 0 then PostMessage(Window, wm_close, 1, 1);
Funktioniert aber nicht, wenn das Programm z.B. eine Abfrage beim Beenden anzeigt

Wenn der Dateiname des Programms bekannt ist:
Delphi-Quellcode:
uses TlHelp32;

// Funktion
function KillTask(const AExeName: string): boolean;
var
  p: TProcessEntry32;
  h: THandle;
begin
  Result := false;
  p.dwSize := SizeOf(p);
  h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0);
  try
    if Process32First(h, p) then
      repeat
        if AnsiLowerCase(p.szExeFile) = AnsiLowerCase(AExeName) then
          Result := TerminateProcess(OpenProcess(Process_Terminate,
                                                 false,
                                                 p.th32ProcessID),
                                     0);
      until (not Process32Next(h, p)) or Result;
  finally
    CloseHandle(h);
  end;
end;

// Aufruf
if not (KillTask('NameDesProgramms.exe') then
  {z.B.} showmessage('Programm konnte nicht beendet werden.');
Die harte Methode ;-) , von dsdt.info

In deinem Fall:
Delphi-Quellcode:
if (KillTask('NameDesProgramms.exe') then
  ShellExecute(...);
Gruß,
ManuMF

mr.unbekannt 20. Okt 2005 17:58

Re: beliebiges programm schließen und wieder neu öffnen
 
danke für die antwort, ich glaueb das habe ich jett kapiert!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 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