---
title: "Döda fönster/program"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/27900-döda-fönster-program"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Alvar s"
published: "2001-03-31T19:36:00.000Z"
updated: "2001-04-09T22:03:00.000Z"
replies: 4
views: 474
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/27900-döda-fönster-program"
---

# Döda fönster/program

## #1 — Alvar s, 2001-03-31T19:36Z

**!!1:** Om jag har ett program som visar en popup varje gång det startas och jag vill inte att den popupen ska visas, går det att göra ett program som kan döda/dölja det fönstret?

Med programmet [ATM](http://atm.idic.caos.it) så kan man dölja hela fönstret genom att leta upp det i ”windows info”, högerklicka med musen, ta alternativet **Show control** och sen skicka kommandot **SW_HIDE** eller **SW_SHOWMINNOACTIVE**.

Går det att döda/dölja fönstret om man angiver titeln på fönstret? Kan inget om sånt här men om andra program har möjlighet att döda/dölja fönster så borde det ju gå att göra med delphi också :)

\--------------------------------------

2: Går det att döda ett program ifrån delphi om man har filnamnet, och hur isf?

Permalänk: https://www.webforum.nu/p/27900

## #2 — jt, 2001-04-04T07:27Z

1\.
Följande snutt döljer/visar notepad.

var
  wnd: HWnd;
begin
  wnd := Findwindow('Notepad', Nil);
  if wnd \<\> 0 then
  begin
    ShowWindow(wnd, SW_HIDE );
    Sleep(1000);
    ShowWindow(Wnd, SW_SHOW);
  end;
end;

2\.
Exempel på hur man kan döda ett program.

Du måste lägga till tlHelp32 i uses.

procedure KillExe(Namn: String);
var
  hSnapShot: THandle;
  EntryProcess: TPROCESSENTRY32;
  success: boolean;
  h: THandle;
begin
  hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if hSnapShot = -1 then
    exit;
  EntryProcess.dwSize := sizeof(EntryProcess);
  success := Process32First(hSnapShot, EntryProcess);
  while success do
  begin
    if UpperCase(ExtractFileName(entryProcess.szExeFile)) = UpperCase(Namn) then
    begin
       h:=OpenProcess(PROCESS_TERMINATE,Longbool(FALSE),entryProcess.th32ProcessID );
       TerminateProcess(h,0);
    end;
    success := Process32Next(hSnapShot, EntryProcess);
  end;
  CloseHandle(hSnapShot);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
KillExe('notepad.exe');
end;

Har inte kollat koden så noga men den ger kanske lite tips. TerminateProcess är ett ganska rått sätt att avsluta program.

Permalänk: https://www.webforum.nu/p/400662

## #3 — WiNNe, 2001-04-04T08:22Z

Vill man stänga ett annat program snyggare kan man be det snällt genom att skicka ett WM_CLOSE message till det. Först får man hitta rätt windows
handle precis som Notepad exemplet här ovan. Har gjort det här innan och har kod färdig hemma, ska lägga in det här
(blir inte förrän ikväll)

Permalänk: https://www.webforum.nu/p/400663

## #4 — jt, 2001-04-04T10:31Z

Att skicka WM_CLOSE(eller liknande) är ett mycket bättre sätt, funkar inte WM_CLOSE kan man använda TerminateProcess(tex om programmt inte svarar på meddelandet). 
Jag har för mig att det som krånglar till frågan är att fåtag i rätt windows handle när man bara har filens namn.
Den lösning jag använt krävde en kombination av EnumWindows, GetWindowThreadProcessID och CreateToolhelp32Snapshot för att lösa detta, har någon en smidigare lösning så är jag intresserad.

Permalänk: https://www.webforum.nu/p/400664

## #5 — WiNNe, 2001-04-09T22:03Z

Här är koden för att söka efter ett fönster och sen döda det programmet.

var
    program_to_close:string;

Function TWCallBack2(H : THandle; V : Longint) : longBool; stdcall;
Begin
     GetwindowText(H,@WName\[0\],100);
     If strpas(@WName\[0\])=program_to_close Then
     Begin
          if h\<\>null then PostMessage(h, WM_QUIT, 0, 0);
     End;
     Result := True;
End;

Procedure TForm1.Kill_Other_Program;
Var Dummy,i : Longint;
Begin
     Dummy:=0;
     If CB_Close.checked Then
     Begin
          For i:=0 to LB_Programs.Items.Count-1 do
          Begin
               program_to_close:=LB_Programs.Items.Strings;
               EnumWindows(@TWCallBack2,Dummy);  //Search through the windows
          End;
     End;
End;

Permalänk: https://www.webforum.nu/p/400665

---

Tråden på webben: https://www.webforum.nu/amne/programmering/27900-döda-fönster-program
