Fórum Capturar o click no botao iniciar #319221

15/04/2006

0

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

Alissonrodrigo

Responder

Posts

16/04/2006

Marco Salles

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;

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


Responder

Gostei + 0

17/04/2006

Paullsoftware

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?


Responder

Gostei + 0

17/04/2006

Marco Salles

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..


Responder

Gostei + 0

18/04/2006

Paullsoftware

é, 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


Responder

Gostei + 0

19/04/2006

Kroki

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.


Responder

Gostei + 0

19/04/2006

Paulocesar1301

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:


Responder

Gostei + 0

19/04/2006

Paulocesar1301

dêem uma sacada... o usuário não faz nada !

[img:e992efed08]http://n.domaindlx.com/paulocesar1302/MyWin.jpg[/img:e992efed08]

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:


Responder

Gostei + 0

19/04/2006

Paullsoftware

dêem uma sacada... o usuário não faz nada ! [img:55548af220]http://n.domaindlx.com/paulocesar1302/MyWin.jpg[/img:55548af220] 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: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:


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?


Responder

Gostei + 0

19/04/2006

Paulocesar1301

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar