Capturar o click no botao iniciar
Como ja disse o titulo quero capturar o click do botao inicial do windows abrindo assim em vez do menu iniciar abrir um form criado por mim, alguem sabe como fazer???
Alissonrodrigo
Curtidas 0
Respostas
Marco Salles
15/04/2006
So uma primeira idéia ... Talvez tenha que adaptar
function RetornarHandleBotaoInicar:Boolean;
var
H: HWND;
WindowName: Array[0..255] of Char;
ClassName: Array[0..255] of Char;
begin
H := GetForegroundWindow;
GetWindowText(H, WindowName, SizeOf(WindowName));
GetClassName(H, ClassName, SizeOf(ClassName));
if ClassName = ´Shell_TrayWnd´ Then
result:=True
else
result:=False;
end;
Quem sabe passamos para a ParteII
function RetornarHandleBotaoInicar:Boolean;
var
H: HWND;
WindowName: Array[0..255] of Char;
ClassName: Array[0..255] of Char;
begin
H := GetForegroundWindow;
GetWindowText(H, WindowName, SizeOf(WindowName));
GetClassName(H, ClassName, SizeOf(ClassName));
if ClassName = ´Shell_TrayWnd´ Then
result:=True
else
result:=False;
end;
Coloque dois Timer Timer1 Enabled :=True Timer1.Interval:=100; Timer2.enabled:=False; Timer2.Interval:=100;
procedure TForm1.Timer1Timer(Sender: TObject); begin if RetornarHandleBotaoInicar Then begin keybd_event(Vk_Escape,0,0 , 0); // Tab Press Application.BringToFront; timer1.Enabled:=False; timer2.enabled:=True; //Aqui voce vai fazer tudo o que voce procisa Fazer.... showmessage(´se a dica funcionar esta é a EtapaI´); showmessage(´Apos tem a Etpa II´); timer2.enabled:=False; timer1.Enabled:=True; end end;
procedure TForm1.Timer2Timer(Sender: TObject); begin if RetornarHandleBotaoInicar Then begin keybd_event(Vk_Escape,0,0 , 0); // Tab Press Application.BringToFront; end; end;
Quem sabe passamos para a ParteII
GOSTEI 0
Paullsoftware
15/04/2006
Marcos, eu fiz uns testes aqui com a sua dica ela funciona, só que o iniciar ainda abre, teria como fazer para quando o usuário tentasse abrir o iniciar ele por exemplo, jogasse um form da minha aplicação no lugar do menu? ou então não deixar que os itens do iniciar fossem mostrados?
GOSTEI 0
Marco Salles
15/04/2006
Marcos, eu fiz uns testes aqui com a sua dica ela funciona, só que o iniciar ainda abre,
Para que isto não ocorra , voce pode me ajudar.. Ou qualquer outra pessoa
Ao inves de se ter dois timer no aplicativo , o ideal é ter apensa um...
[b:a528e03a1d]Quando a função RetornarHandleBotaoInicar for Verdadeira , devemos então desabilitar o Botao Inicar e todos os acessos (Teclas de atalho)[/b:a528e03a1d]
:idea: :idea: :idea:
Tem uma dica do massuda nesse tópico
http://forum.devmedia.com.br/viewtopic.php?t=58367&highlight=desabilita+iniciar&sid=3a38fd13c054a5e551df5550b2b110a8
Que vai para
http://www.jsifaq.com/subA/tip0400/rh0484.htm
:cry: :cry: :cry:
[b:a528e03a1d]So que eu não consegui achar o codigo aonde desabilita a o Botao Inciar e todos os seu atalhos[/b:a528e03a1d]
:idea: :idea:
[b:a528e03a1d]O ideal então é faze r assim[/b:a528e03a1d]
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if RetornarHandleBotaoInicar Then
begin
keybd_event(Vk_Escape,0,0 , 0); // Tab Press
Application.BringToFront;
timer1.Enabled:=False;
[b:a528e03a1d]dica do massuda ou qualquer outra dica boa para desabilitar
a tecla do windows e do botão iniciar[/b:a528e03a1d]
//Aqui voce vai fazer tudo o que voce procisa Fazer....
showmessage(´se a dica funcionar esta é a EtapaI´);
showmessage(´Apos tem a Etpa II´);
[b:a528e03a1d] //Dica para habilitar Novamente ... Preciso desta Dica[/b:a528e03a1d]
timer1.Enabled:=True;
end
end;
AGora quanto há
como fazer para quando o usuário tentasse abrir o iniciar ele por exemplo, jogasse um form da minha aplicação no lugar do menu?
Isto é que eu chamei de parte II...
Olha o que ele pediu
abrir um form criado por mim,
Tem várias maneiras , mas para não confundir devemos finalizar primeiro a parte I..
GOSTEI 0
Paullsoftware
15/04/2006
é, então vamos aguardar um solução para essa parte I e depois entraremos na parte dois, eu peguei um CD que o autorun dele era exatamente assim...
Quando vc colocava o cd ele iniciava o autorun e ficava com um botão no mesmo lugar do iniciar, ele não bloqueava o botão apenas posicionava um botão sobre o iniciar e quando vc clicava sobre ele abria justamente um menu com as opções do CD bem interessante, tudo como em quero faltando apenas bloquear o iniciar do windows. vlw
Quando vc colocava o cd ele iniciava o autorun e ficava com um botão no mesmo lugar do iniciar, ele não bloqueava o botão apenas posicionava um botão sobre o iniciar e quando vc clicava sobre ele abria justamente um menu com as opções do CD bem interessante, tudo como em quero faltando apenas bloquear o iniciar do windows. vlw
GOSTEI 0
Kroki
15/04/2006
Não serve para vc esconder o botão iniciar?
Lembrando,se não implementar mais alguma proteção qualquer um podera explorar a pasta C digitando C: numa janela.
Lembrando,se não implementar mais alguma proteção qualquer um podera explorar a pasta C digitando C: numa janela.
GOSTEI 0
Paulocesar1301
15/04/2006
Tive que fazer algo semelhante aqui para bloquear algumas máquinas... e sinceramente... a única maneira realmente eficaz (que eu achei) para dar acesso [b:8713f70a6a]somente[/b:8713f70a6a] ao que eu quero que usuário tenha é fazer um :!: [b:8713f70a6a]novo explorer[/b:8713f70a6a] :!: :lol:
Um sisteminha simples que substitua barra de tarefas... menu iniciar ... e tudo mais... enfim... se queres trocar o menu iniciar pelo seu é pq o usuário não terá tantos acessos assim, certo ?
Abraços e bons códigos :wink:
Um sisteminha simples que substitua barra de tarefas... menu iniciar ... e tudo mais... enfim... se queres trocar o menu iniciar pelo seu é pq o usuário não terá tantos acessos assim, certo ?
Abraços e bons códigos :wink:
GOSTEI 0
Paulocesar1301
15/04/2006
dêem uma sacada... o usuário não faz nada !
caso ainda não tenha algumas das dicas ...
»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
function SetHook(WinHandle: HWND; MsgToSend: Integer): Boolean; stdcall; external HookDemo;
function FreeHook: Boolean; stdcall; external HookDemo;
procedure EnableCTRLALTDEL(YesNo : boolean);
const
Hook = ´WINHOOK.dll´;
WM_HOOKCREATE = WM_USER + 300;
private
FHookSet: Boolean;
Desativar: CTRL+ALT+DEL
Desabilitar Windows:
Reabilitar Windows:
»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
Código fonte da dll WinHOOK: [color=red:e992efed08][b:e992efed08]Troque a extensão para .ZIP[/b:e992efed08][/color:e992efed08]
[url]http://n.domaindlx.com/paulocesar1302/WinHook.pczip[/url]
Abraços e Bons Códigos :wink:
caso ainda não tenha algumas das dicas ...
»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
function SetHook(WinHandle: HWND; MsgToSend: Integer): Boolean; stdcall; external HookDemo;
function FreeHook: Boolean; stdcall; external HookDemo;
procedure EnableCTRLALTDEL(YesNo : boolean);
const
Hook = ´WINHOOK.dll´;
WM_HOOKCREATE = WM_USER + 300;
private
FHookSet: Boolean;
Desativar: CTRL+ALT+DEL
procedure EnableCTRLALTDEL(YesNo : boolean); const sRegPolicies = ´\Software\Microsoft\Windows\CurrentVersion\Policies´; begin with TRegistry.Create do try RootKey:=HKEY_CURRENT_USER; if OpenKey(sRegPolicies+´\System\´,True) then begin case YesNo of False: begin WriteInteger(´DisableTaskMgr´,1); end; True: begin WriteInteger(´DisableTaskMgr´,0); end; end; end; CloseKey; if OpenKey(sRegPolicies+´\Explorer\´,True) then begin case YesNo of False: begin WriteInteger(´NoChangeStartMenu´,1); WriteInteger(´NoClose´,1); WriteInteger(´NoLogOff´,1); end; True: begin WriteInteger(´NoChangeStartMenu´,0); WriteInteger(´NoClose´,0); WriteInteger(´NoLogOff´,0); end; end; end; CloseKey; finally Free; end; end;
Desabilitar Windows:
ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_HIDE); ShowWindow(FindWindow(nil, ´Program Manager´), SW_HIDE); FHookSet := LongBool(SetHook(Handle, WM_HOOKCREATE)); EnableCTRLALTDEL(False); FRMAreaDeTrabalho.BTReiniciar.Repaint; FRMAreaDeTrabalho.BTLogOff.Repaint; FRMAreaDeTrabalho.BTDesligar.Repaint; Application.ProcessMessages; FRMAreaDeTrabalho.Top := Screen.DesktopTop; FRMAreaDeTrabalho.Left := Screen.DesktopLeft; FRMAreaDeTrabalho.Width := Screen.DesktopWidth; FRMAreaDeTrabalho.Height := Screen.DesktopHeight; Application.ProcessMessages;
Reabilitar Windows:
FHookSet := FreeHook; EnableCTRLALTDEL(True); ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_SHOWNORMAL); ShowWindow(FindWindow(nil, ´Program Manager´), SW_SHOWNORMAL); FRMAreaDeTrabalho.Width := Screen.WorkAreaWidth; FRMAreaDeTrabalho.Height := Screen.WorkAreaHeight;
»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
Código fonte da dll WinHOOK: [color=red:e992efed08][b:e992efed08]Troque a extensão para .ZIP[/b:e992efed08][/color:e992efed08]
[url]http://n.domaindlx.com/paulocesar1302/WinHook.pczip[/url]
Abraços e Bons Códigos :wink:
GOSTEI 0
Paullsoftware
15/04/2006
dêem uma sacada... o usuário não faz nada !
caso ainda não tenha algumas das dicas ...
»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
function SetHook(WinHandle: HWND; MsgToSend: Integer): Boolean; stdcall; external HookDemo;
function FreeHook: Boolean; stdcall; external HookDemo;
procedure EnableCTRLALTDEL(YesNo : boolean);
const
Hook = ´WINHOOK.dll´;
WM_HOOKCREATE = WM_USER + 300;
private
FHookSet: Boolean;
Desativar: CTRL+ALT+DEL
Desabilitar Windows:
Reabilitar Windows:
»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
Código fonte da dll WinHOOK: [color=red:55548af220][b:55548af220]Troque a extensão para .ZIP[/b:55548af220][/color:55548af220]
[url]http://n.domaindlx.com/paulocesar1302/WinHook.pczip[/url]
Abraços e Bons Códigos :wink:
procedure EnableCTRLALTDEL(YesNo : boolean); const sRegPolicies = ´\Software\Microsoft\Windows\CurrentVersion\Policies´; begin with TRegistry.Create do try RootKey:=HKEY_CURRENT_USER; if OpenKey(sRegPolicies+´\System\´,True) then begin case YesNo of False: begin WriteInteger(´DisableTaskMgr´,1); end; True: begin WriteInteger(´DisableTaskMgr´,0); end; end; end; CloseKey; if OpenKey(sRegPolicies+´\Explorer\´,True) then begin case YesNo of False: begin WriteInteger(´NoChangeStartMenu´,1); WriteInteger(´NoClose´,1); WriteInteger(´NoLogOff´,1); end; True: begin WriteInteger(´NoChangeStartMenu´,0); WriteInteger(´NoClose´,0); WriteInteger(´NoLogOff´,0); end; end; end; CloseKey; finally Free; end; end;
ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_HIDE); ShowWindow(FindWindow(nil, ´Program Manager´), SW_HIDE); FHookSet := LongBool(SetHook(Handle, WM_HOOKCREATE)); EnableCTRLALTDEL(False); FRMAreaDeTrabalho.BTReiniciar.Repaint; FRMAreaDeTrabalho.BTLogOff.Repaint; FRMAreaDeTrabalho.BTDesligar.Repaint; Application.ProcessMessages; FRMAreaDeTrabalho.Top := Screen.DesktopTop; FRMAreaDeTrabalho.Left := Screen.DesktopLeft; FRMAreaDeTrabalho.Width := Screen.DesktopWidth; FRMAreaDeTrabalho.Height := Screen.DesktopHeight; Application.ProcessMessages;
FHookSet := FreeHook; EnableCTRLALTDEL(True); ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_SHOWNORMAL); ShowWindow(FindWindow(nil, ´Program Manager´), SW_SHOWNORMAL); FRMAreaDeTrabalho.Width := Screen.WorkAreaWidth; FRMAreaDeTrabalho.Height := Screen.WorkAreaHeight;
tipo, eu tenho as duas primeiras...
Desabilitar a tecla windows e Gerenciador de Tarefas, mais existe um problema que não consegui solucionar... quando vc bloqueia a tecla windows usando essa dll os numeros no meu caso não funcionam e ai?
GOSTEI 0
Paulocesar1301
15/04/2006
Tb tem que colocar isso no KeyDown do Form:
If (GetStateK(VK_LMENU) And (Key = VK_F4)) Then
fecha := False;
estranho... meu teclado numérico continua funcionando após o travamento.
If (GetStateK(VK_LMENU) And (Key = VK_F4)) Then
fecha := False;
estranho... meu teclado numérico continua funcionando após o travamento.
GOSTEI 0