[ --ja-- @ 15.10.2003. 20:45 ] @
Problem je sljedeći, treba na neki način presresti signal za gašenje kompjutera, znači kad se odabere opcija shutdown iz start menija ili na bilo koji drugi način (npr. iz nekog drugog programa), moj program treba presresti taj signal i poništiti ga ako neki dani uvjet nije zadovoljen ili dozvoliti gašenje ako uvjet je zadovoljen. Kako ovo najjednostavnije izvesti (je li uopće moguće??)? Tnx
[ silverglider @ 15.10.2003. 22:25 ] @
Da bi detektovao shutdown, treba da presretnes WM_QUERYENDSESSION, tj. napravis handler za nju. Vise o tome mozes procitati ovde:

http://msdn.microsoft.com/libr...fo/base/wm_queryendsession.asp

[ --ja-- @ 16.10.2003. 15:12 ] @
Nisam siguran da sam baš najbolje shvatio. Kad moja aplikacija primi WM_QUERYENDSESSION naredbu, ona bi se trebala isključiti. To mogu spriječiti da ubacim:

Code:

 ...

type
   private
  { Private declarations } 
  procedure WMQueryEndSession(
var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
  public
    { Public declarations }
  end;

  ...

procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
  inherited;         
  Message.Result:=0;
end;


Dakle, ovime ću spriječiti gašenje moje aplikacije, a time i cijelog sistema, ali će se sve ostale pokrenute aplikacije isključiti. A u tome i je problem, jer se ni jedan drugi program ne smije zagasiti, znači, svi ostali pokrenuti programi moraju također ostati pokrenuti i dalje. E kako sad to izvesti?
[ silverglider @ 16.10.2003. 19:01 ] @
Phu, nisi tako definisao problem na pocetku - trazio si da presretnes shutdown; e sad, problem je sto ne mozes spreciti ostale aplikacije da dobiju WM_QUERYENDSESSION i da ga hendluju po defaultu - gasenjem. U principu, treba skroz spreciti mogucnost shutdowna. Prvo sto mi pada na pamet je to da shutdown zahteva permission - sto ne probas da zabranis aktivnom useru (koji u svojoj sesiji vozi tvoj program) mogucnost shutdowna, a po izlasku iz programa (uz zadovoljen uslov) ponovo vratis? Mislim da informacije o tako necemu mogu da se nadju vrlo blizu onog linka gore.
[ --ja-- @ 17.10.2003. 13:08 ] @
Ajd da još malo pojasnim problem, moguće je da sam ga pokušavao riješiti na krivi način. Sve što meni treba je da kad se pritisne tipka POWER na kućištu (ATX napajanje) windowsi ne odrade shutdown/standby (ili šta je već podešeno u Control Panelu) nego da moj program detektira da je ta tipka pritisnuta. Znači, neko pritisne tipku power, moj program dobije informaciju da je tipka pritisnuta i izvršava određeni komad koda.
[ Zekica @ 17.10.2003. 16:30 ] @
Što se tiče POWER dugmeta na tastaturi, ti možeš u podešavanjima sistema (Control Panel/Power Options/Advanded) da podesiš da windows ne reaguje na POWER dugme...

Dalje pri pokretanju programa (može i u FormCreate), pozoveš funkciju ReisterHotKey, koja će za paramater vk imati vrednost 255.

Napraviš handler za WM_HOTKEY poruke, i u njemu napišeš kod koji će se izvršavati.

Evo, ovako:
Code:

unit Unit1;

...

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure WMHotkey(var msg:TMessage);message WM_HOTKEY;
  public

...

procedure TForm1.WMHotkey(var msg:TMessage);
begin
// Ovde upisi kod koji hoces da izvrsis...
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(handle,0,0,255);
end;

...
[ --ja-- @ 17.10.2003. 16:59 ] @
Ovo je ok, samo me zanima ima li ikakve šanse da se ovo naštima da radi na ono POWER dugme na samom kućištu? Ako ne može, napravit ću ovako i dobro. Hvala svima koji se trude...
[ silverglider @ 17.10.2003. 17:59 ] @
Nema sta, MSDN u ruke i napravis servis ili cak drajver - sto da ne?
[ --ja-- @ 17.10.2003. 18:04 ] @
Ježim se na riječ MSDN! Nema šta, pun je informacija, svaka čast, ali nije namijenjen početnicima/naprednim početnicima/običnim smrtnicima već profijima. Dok ja nešto skužim iz MSDN-a treba mi pola godine!