Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 150
  • Last Modified:

closing other running applications

How can I close/kill/interrupt a running application/dll/... from my delphi application?

SkAtAn
0
skatan187
Asked:
skatan187
  • 3
  • 3
  • 2
  • +1
1 Solution
 
rwilson032697Commented:
Send it a WM_QUIT message or use TerminateProcess...
0
 
viktornetCommented:
you use sendmessage or postmessage with the message WM_QUIT or WM_CLOSE (WM_CLOSE is better because it forces the window to close).,,,,

here is an example...


var
  h : HWND;
begin
  h := FindWindow(nil, 'Notepad - Untitled');
  if h <> 0 then begin
    SendMessage(h, WM_CLOSE, 0, 0);
    ShowMessage('Well, we just kill notepad :)');
  end else ShowMessage('There is no such a window at the moment');
end;

Hope this helps...
0
 
MadshiCommented:
If you want the program to ask the user if he/she wants to save the currently opened file, you have to send a WM_CLOSE to the main window.
If you don't like this, send a WM_QUIT either to the main window or (and that is what I'm normally doing) to the main thread by using PostThreadMessage(tid,WM_QUIT,0,0);
You can use TerminateProcess, too. But that's quite ugly, because it does NOT perform a CLEAN program shutdown. (Read the documentation of TerminateProcess)

Regards, Madshi.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
skatan187Author Commented:
Ok this worked.. is there alse a way to get all running application (titles) in a tstrings/list/array ?


SkAtan
0
 
MadshiCommented:
If you look at this question (hurry, it's still open in the moment)

http://www.experts-exchange.com/topics/comp/lang/delphi/Q.10117362

you'll find a solution for that for win95/98.

If you need it to run under NT4, too, and you have Delphi 4, you can download my "enumStuff" unit from my homepage "http://www.madshi.com" in the "sources" section. This unit gives you some handy functions to enumerate all running applications, but it runs only under Delphi 4.

Regards, Madshi.
0
 
skatan187Author Commented:
ok thx alot.. Madshi
and viktornet for the correct answer :-)

SkAtAn
0
 
skatan187Author Commented:
>>

You can use TerminateProcess, too. But that's quite ugly, because it does NOT perform a CLEAN program shutdown. (Read the documentation of TerminateProcess)

<<

jep.. this is what I need.. the program ABSOLUTLY MUST SHUT DOWN without doing furter actions.. I already accepted this question.. but ofcourse you may gimme a sample for this.. (probebly I'll find it myself.. oh well! :-)

SkAtan


0
 
MadshiCommented:
Use this function. But you must give in the processID of the process you want to shut down. You get the processID from both the sources of the other question I mentioned or from the functions in my "enumStuff" unit.

procedure ShutUp_Process(processID: cardinal);
var c1 : cardinal;
begin
  c1:=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
  if c1<>0 then
    try
      TerminateProcess(c1,0);
    finally CloseHandle(c1) end;
end;

Regards, Madshi.
0
 
viktornetCommented:
you can use EnumWindows() to get all windows in a TStringList or Listbox or whatever..if you need an example let me know.... yeah Madshi is right.. TerminateProcess() is another way to shut down a process...

Madshi, you've given your procedure a nice name :))

-Viktor
--Ivanov
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 3
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now