Detectar a finalização do windows? obs: tecla quot;Powerqu

06/12/2003

1

Eu tenho este código só que este só detecta a finalização do windows quando o usuário desliga o computador da forma tradicional, ou seja menu iniciar/Desligar e não quando o usuário pressiona a tecla [u:8d49ec50b4]´Power´ do teclado[/u:8d49ec50b4].
Se alguém souber pelo menos qual a mensagem (Na forma tradicional é WM_ENDSESSION) que o windows envia para as aplicações abertas quando a tecla Power é pressionada já seria muito bom.

[color=darkblue:8d49ec50b4][i:8d49ec50b4]procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION;
Adicionar a procedure à seção implementation de sua unit:

procedure TForm1.WMEndSession(var Msg : TWMEndSession);
begin
if Msg.EndSession = TRUE then
ShowMessage(´O Windows está finalizando ´ + #13 + ´às ´ +
FormatDateTime(´c´, Now));
inherited;
end; [/i:8d49ec50b4][/color:8d49ec50b4][b:8d49ec50b4][/b:8d49ec50b4]


Responder

Posts

07/12/2003

Fábio Borges

Eu tenho este código só que este só detecta a finalização do windows quando o usuário desliga o computador da forma tradicional, ou seja menu iniciar/Desligar e não quando o usuário pressiona a [b:cc401faaf0]tecla ´Power´ do teclado[/b:cc401faaf0].
Se alguém souber pelo menos qual a mensagem (Na forma tradicional é WM_ENDSESSION) que o windows envia para as aplicações abertas quando a tecla Power é pressionada já seria muito bom.

[color=blue:cc401faaf0]procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION;
Adicionar a procedure à seção implementation de sua unit:

procedure TForm1.WMEndSession(var Msg : TWMEndSession);
begin
if Msg.EndSession = TRUE then
ShowMessage(´O Windows está finalizando ´ + #13 + ´às ´ +
FormatDateTime(´c´, Now));
inherited;
end[/color:cc401faaf0];


Responder

07/12/2003

Bruno.oliveira

a mensagem para o desligamento é WM_QUERYENDSESSION...

Um exemplo de código:

private
{ Private declarations }
procedure WMQueryEndSession (var Msg : TWMQueryEndSession); message WM_QueryEndSession;

procedure TForm1.WMQueryEndSession (var Msg : TWMQueryEndSession);
begin
if MessageDlg(´O Windows deseja desligar agora, Permitir?´, mtConfirmation, [mbYes,mbNo], 0) = mrNo then
Msg.Result := 0
else
Msg.Result := 1;
end;


Responder

10/12/2003

Fábio Borges

OK, bruno.oliveira eu tenho este código tbm só que este tbm não detecta a finalização do windows quando o usuário pressiona a tecla [b:31aeacde52]Power[/b:31aeacde52] do teclado.
Obrigado mesmo assim pela atenção.


Responder

14/12/2003

Fábio Borges

Será que ninguém sabe ess :( a?


Responder

14/12/2003

Fórum Vini

Olá Fabio,
Eu não sei se funciona com o botão Power do teclado, mas você pode testar usando o evento OnCloseQuery do seu formulário principal...
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  showmessage(´O Windows será desligado!´);
end;


Espero ter ajudado.
Vinicius.


Responder

15/12/2003

Fábio Borges

Valew .Vini. mas eu já tentei fazer isso tbm, aliás tudo que éra lógico eu já tentei, mas mesmo assim obrigado pela atenção continuo aguardando respostas...


Responder

15/12/2003

Fórum Vini

Fábio,
em último caso, você pode colocar um hook no teclado, assim, uma função de uma dll é chamada quando uma tecla é pressionada, mesmo fora do seu aplicativo. Aqui está um exemplo de um KeyLogger que utiliza essa técnica: http://www.clubedelphi.com.br/aplicativos/keylogger.html

Espero ter ajudado.
Vinicius.


Responder

16/12/2003

Fábio Borges

.Vini.,
Se eu for trabalhar em cima desta lógica eu tenho que arranjar um jeito de fazer com que esta tecla não responde a nenhuma ação, ou seja, no momento em que a tecla Power for pressionada nada deve acontecer, como se fosse no evento onKeyDown Key:=0 mas eu sei que o modo de trabalhar com hook é diferente, portanto não é tão fácil assim e eu não manjo muito do assunto, quem souber [b:0cd4ed745b]como cancelar o pressionamento de uma tecla usando Hook[/b:0cd4ed745b] poste aí, fico muito agradecido...


Responder
Talvez isso ajude

unit MainFrm;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TMainForm = class(TForm)
btnExit: TButton;
rgExitOptions: TRadioGroup;
procedure btnExitClick(Sender: TObject);
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.btnExitClick(Sender: TObject);
begin
case rgExitOptions.ItemIndex of
0: Win32Check(ExitWindows(0, 0)); // Sai e conecta-se como um
// usuário diferente.
1: Win32Check(ExitWindowsEx(EWX_REBOOT, 0)); // Sai/reinicializa
2: Win32Check(ExitWindowsEx(EWX_SHUTDOWN, 0));// Sai para desligar
// Sai/Desconecta/Conecta como usuário diferente
3: Win32Check(ExitWindowsEx(EWX_LOGOFF, 0));
end;
end;
end.



Responder
Alguem sabe uma lista das mensagens do Windows( WM_MESSAGE) mais conhecidas


Responder

19/12/2003

Fábio Borges

Olá Anderson_Blumenau eu acho que tu não entendeu. :roll: Eu quero impedir o desligamento e não desligar o micro entendeu? e sobre as messages se você conseguir poste aí que eu tbm estou interessado falow...


Responder

19/12/2003

Fábio Borges

Taí uma dica com algumas messages.

Converter mensagens do Windows em String. Enviada por Celso Rodrigues cdelphi@terra.com.br

function MsgToStr( WM : word ) : String;
// Converte uma mensagem do windows, que está sendo transitada no sistema, em String
// Use o criando mais duas rotinas e um Statusbar:
// procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
// Begin
// StatusBar1.SimpleText := MsgToStr(Msg.Message);
// End;

// procedure TForm1.FormCreate(Sender: TObject);
// begin
// Application.OnMessage := AppOnMessage;
// end;

begin
case WM of
WM_ACTIVATE : result:= ´WM_ACTIVATE ´;
WM_ACTIVATEAPP : result:= ´WM_ACTIVATEAPP ´;
WM_ASKCBFORMATNAME : result:= ´WM_ASKCBFORMATNAME ´;
WM_CANCELMODE : result:= ´WM_CANCELMODE ´;
WM_CHANGECBCHAIN : result:= ´WM_CHANGECBCHAIN ´;
WM_CHAR : result:= ´WM_CHAR ´;
WM_CHARTOITEM : result:= ´WM_CHARTOITEM ´;
WM_CHILDACTIVATE : result:= ´WM_CHILDACTIVATE ´;
WM_CLEAR : result:= ´WM_CLEAR ´;
WM_CLOSE : result:= ´WM_CLOSE ´;
WM_COMMAND : result:= ´WM_COMMAND ´;
WM_COMMNOTIFY : result:= ´WM_COMMNOTIFY ´;
WM_COMPACTING : result:= ´WM_COMPACTING ´;
WM_COMPAREITEM : result:= ´WM_COMPAREITEM ´;
WM_COPY : result:= ´WM_COPY ´;
WM_CREATE : result:= ´WM_CREATE ´;
WM_CTLCOLOR : result:= ´WM_CTLCOLOR ´;
WM_CUT : result:= ´WM_CUT ´;
WM_DDE_ACK : result:= ´WM_DDE_ACK ´;
WM_DDE_ADVISE : result:= ´WM_DDE_ADVISE ´;
WM_DDE_DATA : result:= ´WM_DDE_DATA ´;
WM_DDE_EXECUTE : result:= ´WM_DDE_EXECUTE ´;
WM_DDE_INITIATE : result:= ´WM_DDE_INITIATE ´;
WM_DDE_POKE : result:= ´WM_DDE_POKE ´;
WM_DDE_REQUEST : result:= ´WM_DDE_REQUEST ´;
WM_DDE_TERMINATE : result:= ´WM_DDE_TERMINATE ´;
WM_DDE_UNADVISE : result:= ´WM_DDE_UNADVISE ´;
WM_DEADCHAR : result:= ´WM_DEADCHAR ´;
WM_DELETEITEM : result:= ´WM_DELETEITEM ´;
WM_DESTROY : result:= ´WM_DESTROY ´;
WM_DESTROYCLIPBOARD : result:= ´WM_DESTROYCLIPBOARD ´;
WM_DEVMODECHANGE : result:= ´WM_DEVMODECHANGE ´;
WM_DRAWCLIPBOARD : result:= ´WM_DRAWCLIPBOARD ´;
WM_DRAWITEM : result:= ´WM_DRAWITEM ´;
WM_DROPFILES : result:= ´WM_DROPFILES ´;
WM_ENABLE : result:= ´WM_ENABLE ´;
WM_ENDSESSION : result:= ´WM_ENDSESSION ´;
WM_ENTERIDLE : result:= ´WM_ENTERIDLE ´;
WM_ERASEBKGND : result:= ´WM_ERASEBKGND ´;
WM_FONTCHANGE : result:= ´WM_FONTCHANGE ´;
WM_GETDLGCODE : result:= ´WM_GETDLGCODE ´;
WM_GETFONT : result:= ´WM_GETFONT ´;
WM_GETMINMAXINFO : result:= ´WM_GETMINMAXINFO ´;
WM_GETTEXT : result:= ´WM_GETTEXT ´;
WM_GETTEXTLENGTH : result:= ´WM_GETTEXTLENGTH ´;
WM_HSCROLL : result:= ´WM_HSCROLL ´;
WM_HSCROLLCLIPBOARD : result:= ´WM_HSCROLLCLIPBOARD ´;
WM_ICONERASEBKGND : result:= ´WM_ICONERASEBKGND ´;
WM_INITDIALOG : result:= ´WM_INITDIALOG ´;
WM_INITMENU : result:= ´WM_INITMENU ´;
WM_INITMENUPOPUP : result:= ´WM_INITMENUPOPUP ´;
WM_KEYDOWN : result:= ´WM_KEYDOWN ´;
WM_KEYUP : result:= ´WM_KEYUP ´;
WM_KILLFOCUS : result:= ´WM_KILLFOCUS ´;
WM_LBUTTONDBLCLK : result:= ´WM_LBUTTONDBLCLK ´;
WM_LBUTTONDOWN : result:= ´WM_LBUTTONDOWN ´;
WM_LBUTTONUP : result:= ´WM_LBUTTONUP ´;
WM_MBUTTONDBLCLK : result:= ´WM_MBUTTONDBLCLK ´;
WM_MBUTTONDOWN : result:= ´WM_MBUTTONDOWN ´;
WM_MBUTTONUP : result:= ´WM_MBUTTONUP ´;
WM_MDIACTIVATE : result:= ´WM_MDIACTIVATE ´;
WM_MDICASCADE : result:= ´WM_MDICASCADE ´;
WM_MDICREATE : result:= ´WM_MDICREATE ´;
WM_MDIDESTROY : result:= ´WM_MDIDESTROY ´;
WM_MDIGETACTIVE : result:= ´WM_MDIGETACTIVE ´;
WM_MDIICONARRANGE : result:= ´WM_MDIICONARRANGE ´;
WM_MDIMAXIMIZE : result:= ´WM_MDIMAXIMIZE ´;
WM_MDINEXT : result:= ´WM_MDINEXT ´;
WM_MDIRESTORE : result:= ´WM_MDIRESTORE ´;
WM_MDISETMENU : result:= ´WM_MDISETMENU ´;
WM_MDITILE : result:= ´WM_MDITILE ´;
WM_MEASUREITEM : result:= ´WM_MEASUREITEM ´;
WM_MENUCHAR : result:= ´WM_MENUCHAR ´;
WM_MENUSELECT : result:= ´WM_MENUSELECT ´;
WM_MOUSEACTIVATE : result:= ´WM_MOUSEACTIVATE ´;
WM_MOUSEMOVE : result:= ´WM_MOUSEMOVE ´;
WM_MOVE : result:= ´WM_MOVE ´;
WM_NCACTIVATE : result:= ´WM_NCACTIVATE ´;
WM_NCCALCSIZE : result:= ´WM_NCCALCSIZE ´;
WM_NCCREATE : result:= ´WM_NCCREATE ´;
WM_NCDESTROY : result:= ´WM_NCDESTROY ´;
WM_NCHITTEST : result:= ´WM_NCHITTEST ´;
WM_NCLBUTTONDBLCLK : result:= ´WM_NCLBUTTONDBLCLK ´;
WM_NCLBUTTONDOWN : result:= ´WM_NCLBUTTONDOWN ´;
WM_NCLBUTTONUP : result:= ´WM_NCLBUTTONUP ´;
WM_NCMBUTTONDBLCLK : result:= ´WM_NCMBUTTONDBLCLK ´;
WM_NCMBUTTONDOWN : result:= ´WM_NCMBUTTONDOWN ´;
WM_NCMBUTTONUP : result:= ´WM_NCMBUTTONUP ´;
WM_NCMOUSEMOVE : result:= ´WM_NCMOUSEMOVE ´;
WM_NCPAINT : result:= ´WM_NCPAINT ´;
WM_NCRBUTTONDBLCLK : result:= ´WM_NCRBUTTONDBLCLK ´;
WM_NCRBUTTONDOWN : result:= ´WM_NCRBUTTONDOWN ´;
WM_NCRBUTTONUP : result:= ´WM_NCRBUTTONUP ´;
WM_NEXTDLGCTL : result:= ´WM_NEXTDLGCTL ´;
WM_PAINT : result:= ´WM_PAINT ´;
WM_PAINTCLIPBOARD : result:= ´WM_PAINTCLIPBOARD ´;
WM_PALETTECHANGED : result:= ´WM_PALETTECHANGED ´;
WM_PALETTEISCHANGING : result:= ´WM_PALETTEISCHANGING ´;
WM_PARENTNOTIFY : result:= ´WM_PARENTNOTIFY ´;
WM_PASTE : result:= ´WM_PASTE ´;
WM_POWER : result:= ´WM_POWER ´;
WM_QUERYDRAGICON : result:= ´WM_QUERYDRAGICON ´;
WM_QUERYENDSESSION : result:= ´WM_QUERYENDSESSION ´;
WM_QUERYNEWPALETTE : result:= ´WM_QUERYNEWPALETTE ´;
WM_QUERYOPEN : result:= ´WM_QUERYOPEN ´;
WM_QUEUESYNC : result:= ´WM_QUEUESYNC ´;
WM_QUIT : result:= ´WM_QUIT ´;
WM_RBUTTONDBLCLK : result:= ´WM_RBUTTONDBLCLK ´;
WM_RBUTTONDOWN : result:= ´WM_RBUTTONDOWN ´;
WM_RBUTTONUP : result:= ´WM_RBUTTONUP ´;
WM_RENDERALLFORMATS : result:= ´WM_RENDERALLFORMATS ´;
WM_RENDERFORMAT : result:= ´WM_RENDERFORMAT ´;
WM_SETCURSOR : result:= ´WM_SETCURSOR ´;
WM_SETFOCUS : result:= ´WM_SETFOCUS ´;
WM_SETFONT : result:= ´WM_SETFONT ´;
WM_SETREDRAW : result:= ´WM_SETREDRAW ´;
WM_SETTEXT : result:= ´WM_SETTEXT ´;
WM_SHOWWINDOW : result:= ´WM_SHOWWINDOW ´;
WM_SIZE : result:= ´WM_SIZE ´;
WM_SIZECLIPBOARD : result:= ´WM_SIZECLIPBOARD ´;
WM_SPOOLERSTATUS : result:= ´WM_SPOOLERSTATUS ´;
WM_SYSCHAR : result:= ´WM_SYSCHAR ´;
WM_SYSCOLORCHANGE : result:= ´WM_SYSCOLORCHANGE ´;
WM_SYSCOMMAND : result:= ´WM_SYSCOMMAND ´;
WM_SYSDEADCHAR : result:= ´WM_SYSDEADCHAR ´;
WM_SYSKEYDOWN : result:= ´WM_SYSKEYDOWN ´;
WM_SYSKEYUP : result:= ´WM_SYSKEYUP ´;
WM_SYSTEMERROR : result:= ´WM_SYSTEMERROR ´;
WM_TIMECHANGE : result:= ´WM_TIMECHANGE ´;
WM_TIMER : result:= ´WM_TIMER ´;
WM_UNDO : result:= ´WM_UNDO ´;
WM_USER : result:= ´WM_USER ´;
WM_VKEYTOITEM : result:= ´WM_VKEYTOITEM ´;
WM_VSCROLL : result:= ´WM_VSCROLL ´;
WM_VSCROLLCLIPBOARD : result:= ´WM_VSCROLLCLIPBOARD ´;
WM_WINDOWPOSCHANGED : result:= ´WM_WINDOWPOSCHANGED ´;
WM_WINDOWPOSCHANGING : result:= ´WM_WINDOWPOSCHANGING ´;
WM_WININICHANGE : result:= ´WM_WININICHANGE ´;
else result:= ´UNKNOWN: ´+inttostr(wm);
end;
end;


Responder
[quote:d686d8814b=´Fábio Borges´]Olá Anderson_Blumenau eu acho que tu não entendeu. :roll: Eu quero impedir o desligamento e não desligar o micro entendeu? e sobre as messages se você conseguir poste aí que eu tbm estou interessado falow...[/quote:d686d8814b]

foi mal, viajei fora aquelas que voce mencionou eu nao conheco nem um outro meio

o nosso amigo fabio borges colocou uma lista boa das mensage do win
mas se voce quiser mais procure na Unit Messages,

valeu


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira