Detectar a finalização do windows? obs: tecla quot;Powerqu
06/12/2003
0
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]
Fábio Borges
Posts
07/12/2003
Fábio Borges
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];
07/12/2003
Bruno.oliveira
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;
10/12/2003
Fábio Borges
Obrigado mesmo assim pela atenção.
14/12/2003
Fórum Vini
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.
15/12/2003
Fábio Borges
15/12/2003
Fórum Vini
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.
16/12/2003
Fábio Borges
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...
16/12/2003
Anderson_blumenau
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.
16/12/2003
Anderson_blumenau
19/12/2003
Fábio Borges
19/12/2003
Fábio Borges
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;
20/12/2003
Anderson_blumenau
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
Clique aqui para fazer login e interagir na Comunidade :)