Avatar billede r.hegaard Nybegynder
26. februar 2004 - 19:52 Der er 9 kommentarer og
1 løsning

Lukke et program

Hvordan lukker man et andet program med et Delphi program ??
Avatar billede geek Nybegynder
26. februar 2004 - 20:12 #1
function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
                        OpenProcess(PROCESS_TERMINATE,
                                    BOOL(0),
                                    FProcessEntry32.th32ProcessID),
                                    0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  KillTask('IEXPLORE.EXE');
end.
Avatar billede geek Nybegynder
26. februar 2004 - 20:13 #2
for at lukke IE self :)
Avatar billede r.hegaard Nybegynder
26. februar 2004 - 20:43 #3
OK, tak for det.
Er det den eneste måde at gøre det på ??
Jeg havde regnet med at der fantes en simpel måde at på.
Avatar billede netpxg Nybegynder
26. februar 2004 - 20:57 #4
Det kan måske gøres med FindWindow og SendMessage i user32.dll
Få fat i handle til det pågældende vindue med Findwindow og send det en "close" med SendMessage
Avatar billede r.hegaard Nybegynder
26. februar 2004 - 20:58 #5
Jeg beklager, men jeg forstår ikke helt hvad du mener med det sidste.
Avatar billede r.hegaard Nybegynder
26. februar 2004 - 21:08 #6
Når jeg forsøger at køre ovenstående, så kommer følgende fejl:
[Error] Unit1.pas(35): Undeclared identifier: 'TProcessEntry32'
[Error] Unit1.pas(38): Undeclared identifier: 'CreateToolhelp32Snapshot'
[Error] Unit1.pas(38): Undeclared identifier: 'TH32CS_SNAPPROCESS'
[Error] Unit1.pas(39): Missing operator or semicolon
[Error] Unit1.pas(40): Undeclared identifier: 'Process32First'
[Error] Unit1.pas(44): ')' expected but identifier 'szExeFile' found
Avatar billede r.hegaard Nybegynder
26. februar 2004 - 21:13 #7
Jeg har fundet ud af hvad fejlen var, så nu virker det. Der manglede Tlhelp32 i uses.
Er der en simpel måde at fjerne iconet for det lukkede program i processlinien (ved siden af uret) ??
Avatar billede geek Nybegynder
27. februar 2004 - 18:21 #8
Er ikke sikker, men tror du vil kunne bruge
UpdateWindow(taskbarhandle)
Så skal du bare lige finde handlet for taskbaren (mener det er det den hedder)
Avatar billede r.hegaard Nybegynder
27. februar 2004 - 18:25 #9
OK, det må jeg kigge lidt på. Tak for hjælpen.
Avatar billede geek Nybegynder
27. februar 2004 - 21:01 #10
Var så lidt!
og tak for point.

-Ge3k
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester