none
Verificar Click no Botão

    Question

  • Boa Tarde Pessoal,

    Como faço para saber se o botão Caps Lock ou Scroll Lock está habilitado???

    Tam como fazer isso via C#?

    Valeu,

    AT+

    Thursday, October 26, 2006 2:50 PM

All replies

  • Sim, tem. Vc precisa sobrescrever o handler pras teclas se vc quiser que elas tenham um comportamento diferente. O processo eh explicado aqui.
    http://support.microsoft.com/default.aspx/kb/320584

    Se vc quiser que a tecla NAO responda como devia, vc pode dar um trap nela e dar um return true na procedure ao inves de chamar a base. Eu uso isso pra bloquear o acesso aos menus com a tecla alt e funciona bem.

    Ou vc pode apenas detectar a tecla criando um evento KeyEventHandler e verificando o objeto. Ele tem metodos pras teclas especificas de sistema.
    Thursday, October 26, 2006 3:07 PM
  • using System.Runtime.InteropServices;
     
    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
    public static extern short GetKeyState(int keyCode);
    private void button1_Click(object sender, EventArgs e)
    {
       bool CapsLock = (((ushort)GetKeyState(0x14 /*VK_CAPITAL*/)) & 0xffff) != 0;
       bool NumLock = (((ushort)GetKeyState(0x90 /*VK_NUMLOCK*/)) & 0xffff) != 0;
       bool ScrollLock = (((ushort)GetKeyState(0x91 /*VK_SCROLLLOCK*/)) & 0xffff) != 0;
    }
    Thursday, October 26, 2006 3:15 PM
  • Testar dessa forma eh legal, mas deixa atrelado a um botao. Sobrescrevendo a rotina de sistema vc tem isso automatico.
    Thursday, October 26, 2006 4:30 PM
  • Não consegui testar cara, estou fazendo para web form, será que é por isso que da erro?
    Thursday, October 26, 2006 5:49 PM
  • Aqui funcionou Edson...

    Seguinte. Vou dar um exemplo do code behind (arquivo .cs) da minha página default, que tem um linkbutton que, ao ser clicado, mostra o status das teclas...

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Runtime.InteropServices;
    public partial class _Default : System.Web.UI.Page
    {
       [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
       public static extern short GetKeyState(int keyCode);
       protected void Page_Load(object sender, EventArgs e)
       {
     
       }
       protected void LinkButton1_Click(object sender, EventArgs e)
       {
          bool CapsLock = (((ushort)GetKeyState(0x14 /*VK_CAPITAL*/)) & 0xffff) != 0;
          bool NumLock = (((ushort)GetKeyState(0x90 /*VK_NUMLOCK*/)) & 0xffff) != 0;
          bool ScrollLock = (((ushort)GetKeyState(0x91 /*VK_SCROLLLOCK*/)) & 0xffff) != 0;
          Response.Write(CapsLock.ToString() + " " + NumLock.ToString() + " " + ScrollLock.ToString());
       }
    }
    Friday, October 27, 2006 4:25 PM
  • Pra mim agora tbm deu, mas o problema é que sempre retorna FALSE...não sei pq...o seu retorna TRUE qdo a luz está acesa?

    Valeu,

    AT+

    Friday, October 27, 2006 6:19 PM
  • Nossa... Aqui funcionou blza.. Vc está fzendo o deploy da aplicação no servidor e testando ou está fazendo debug? Com o debug é pra funcionar com certeza.. Aqui funcionou pelo menos...

    Se vc estiver fazendo o deploy no servidor e testando acessando pelo browser, pode ser que esse método indique na verdade se o caps lock, num lock e scroll lock do servidor está ativado... Daí não sei como resolver...

    Friday, October 27, 2006 8:38 PM
  • Estou fazendo no meu próprio computador e testando via browser realmente, no caso o servidor é a minha base local mesmo, nem assim dá resolver,será???

    E como eu faço debug, nunca fiz, pode me ensinar?

    Valeu,

    AT+

    Monday, October 30, 2006 1:21 PM
  • Então, vc está testando num cenário igual ao meu... Era pra funcionar...

    Debug q eu digo, é vc executar na sua máquina, clicando naquele botão "play" do Visual Studio...

    Monday, October 30, 2006 4:43 PM
  • Te mandei um email contendo me código, por favor, dê uma olhada e veja se estou fazendo certo.

     

    grato pela atenção desde já,

    Valeu,

    AT+

    Monday, October 30, 2006 6:01 PM
  • Recebi seu e-mail...

    A única coisa é q acho q vc confundiu e o código deveria estar no Load da página, mas isso acho q vc já fez, pq senão vc não conseguiria nem rodar...

    Então, testei aqui com o código igualzinho o seu e deu certíssimo...

    Qd ligo e desligo as teclas, funciona direitinho.. Uma pergunta: só não funciona com o scroll lock ou não funciona com nenhuma das teclas?

    Monday, October 30, 2006 7:21 PM
  • Não Funciona nenhuma das teclas...será que está faltando algo aqui?
    Monday, October 30, 2006 7:28 PM
  • Então deve ser alguma configuração aí no .Net seu...
    Monday, October 30, 2006 8:59 PM
  • Que tipo de configuração?

    Monday, October 30, 2006 9:07 PM
  • Esse é o problema... Não tenho nem idéia... Tentei baixar o nível de permissão do .net aqui pra ver se parava de funcionar mas, mesmo assim funcionou normal... Alguém aí tem alguma idéia do que pode estar acontecendo?

    Monday, October 30, 2006 9:17 PM
  • Pior é que não, é como se estivesse com o valor estático, só retorna aquele valor,False para o Caps Lock, True para o Num Lock e False para o Scroll Lock...

    não sei o que pode estar acontecendo...

    Monday, October 30, 2006 9:26 PM
  • Que tipo de configuração?

     

    Wednesday, November 01, 2006 2:28 PM