Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Prevent shutdown of program

Posted on 1998-05-25
9
228 Views
Last Modified: 2010-04-06
How can I prevent people from shutting down one of my programs. The program must run in the background, I can set the CanClose to false, but when you press Ctrl-Alt-Delete and choose end task, the program comes with the not responding message after a while, and then you can choose to shut it down
0
Comment
Question by:carceri
9 Comments
 

Expert Comment

by:gnom
ID: 1347652
hi carceri

why do you need that ?

in WindowsNT there is no way to prevent people from shutting down any process.
and i think this is very good because if a process hangs you can shut it down, no matter what kind of process.

maybe it's enough do hide your program from the taskbar so the average user does not know how to shut down your program.... ?

dejan
0
 
LVL 4

Expert Comment

by:d003303
ID: 1347653
On NT you could run your app as a service. The service process cannot be killed in task manager, only on the command line with kill (included in the NT ResKit) or in the service control manager. For both of that, you need administrative privilegues.

Slash/d003303
0
 
LVL 4

Expert Comment

by:BoRiS
ID: 1347654
carceri

the other option is to disable ctrl + alt + del and ctrl + tab totally while you app is running, that way until you kill your app no one can get to the end task etc.(unless they run taskman from start/run)

If you want the code let me know

Later
BoRiS
0
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 
LVL 2

Expert Comment

by:rene100
ID: 1347655
if the program runs everytimes in the background, you could start
to instances of it, and every instance checks if the other is still running and restart it when needed.
(very strange, i know)

regards
0
 
LVL 5

Expert Comment

by:JimBob091197
ID: 1347656
Hi all

rene100's solution is a reasonable solution under Win 95.  Another method (which I have used) needs only one instance of the exe, instead of rene100's 2 instanced which check each other.

(gnom: if you hide your app from the taskbar, it still shows up in the Task Manager.)

I have noticed that when you Ctrl-Alt-Del & End Task, the tasks main window gets a WM_DESTROY, but NOT a WM_CLOSE.  (Normally the app gets a WM_CLOSE and then a WM_DESTROY.  But when you select End Task the WM_CLOSE doesn't arive.)

Thus, you can check in the WM_DESTROY if a WM_CLOSE has been called.  If not, then re-run the app.  (It's also not elegant, because the app has to be restarted...)

E.g.  Declare a form variable called IsClosing, and check this variable in WM_DESTROY.  (You also need to override the WndProc for the form.)

procedure TMyForm.WndProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_DESTROY:
      if (not IsClosing) then
        WinExec(PChar(ParamStr(0)), SW_SHOWNORMAL);
    WM_CLOSE:
      IsClosing := True;
    WM_QUERYENDSESSION:
      begin
        IsClosing := True;
        Close;
      end;
  end;
  inherited WndProc(Message);
end;

Cheers,
JB
0
 
LVL 7

Expert Comment

by:ahalya
ID: 1347657
The best way to do this would be to hide the program from the task list. (so that the user cannot "End Task" from the task list.)

This can be done for Win95, by making your program a "simple service". i can let you know the details if you like. (This DOESN'T work on NT though)
0
 

Author Comment

by:carceri
ID: 1347658
Yes, please !
0
 
LVL 7

Accepted Solution

by:
ahalya earned 50 total points
ID: 1347659
Declare this external function just above your implementation section:

function RegisterServiceProcess (ThreadID : THandle; Flags : Integer):
Integer; stdcall; external kernel32 name 'RegisterServiceProcess';

and in your FormCreate  call the function.
e.g:-

const      r = 1;
                 u = 0;

if RegisterServiceProcess (0, r) = 0
   then  ShowMessage ('Error Hiding Application')
   else  ShowMessage ('Application is now hidden from the task list !')

This hides your program from the win95 tasklist and you can now have a program that's always alive !

(if you want to show it back in the tasklist then call it with the argument of 0 -my const "u").
0
 

Author Comment

by:carceri
ID: 1347660
Thanks, that's just what I need !
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

791 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question