AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1519434
Accepted
medic17
medic17
Asked: 2020-01-23 19:27:19 +0800 CST2020-01-23 19:27:19 +0800 CST 2020-01-23 19:27:19 +0800 CST

Como o Windows escuta as teclas de atalho do sistema?

  • 772

Para um projeto em que estou trabalhando. Eu queria saber, como o Windows 10 escuta as teclas de atalho do sistema? Existe algum serviço do sistema em segundo plano fazendo isso?

Por teclas de atalho do sistema, quero dizer Alt+ F4e similares.

windows winapi
  • 2 2 respostas
  • 162 Views

2 respostas

  • Voted
  1. Best Answer
    Sam Forbis
    2020-01-23T19:57:08+08:002020-01-23T19:57:08+08:00

    Quando uma tecla é pressionada, o kernel do Windows recebe a mensagem do driver do teclado e a adiciona a uma fila de mensagens do sistema. Essas mensagens são enviadas para todos os programas em execução na máquina, incluindo os que controlam o pressionamento de teclas de atalho.

    A documentação sobre quais programas lidam com quais combinações de teclas é escassa, mas é seguro apostar que os aplicativos do Windows Explorer, "Windows Session Manager" ou "Shell Infrastructure Host" que você pode ver em seu gerenciador de tarefas são responsáveis ​​por lidar com essas combinações de teclas.

    Por exemplo, a combinação Win+ Rpara abrir "Executar" é gerenciada pelo Windows Explorer. Se você fechar o Windows Explorer no gerenciador de tarefas e tentar usar essa combinação, não funcionará. Mais combinações de baixo nível, como Alt+ F4, provavelmente seriam manipuladas pelo gerenciador de sessão ou pelo host da infraestrutura do shell.

    Portanto, não existe um programa único que lide com todas as combinações de teclas. É uma mistura de vários aplicativos do Windows pré-instalados. O Windows Explorer, por exemplo, é responsável pela maior parte da GUI do seu PC e lida com um bom número dessas combinações de teclas.

    Edit: Desktop Window Manager parece ser aquele que lida com combinações de teclas como Alt+ F4.

    • 3
  2. Mark
    2020-01-23T20:14:01+08:002020-01-23T20:14:01+08:00

    Consulte https://docs.microsoft.com/en-us/windows/win32/menurc/wm-syscommand e também wm_command.

    Essas chaves são tratadas na dll principal da interface do usuário do Windows, user32.dll.

    Esta é a ajuda de um editor que explica como um editor de texto específico é programado.

    Estrutura de um programa do Windows

    O Windows fornece um grande número de controles implementados como janelas. Este programa usa a janela RichEdit imitando uma janela Edit (aquele bloco de notas usa). Isso nos dá capacidade de edição semelhante ao Word, mantendo-o como texto.

    Sub principal

    Um programa inicia e registra as janelas que irá utilizar (RegisterWindowsEx). Em seguida, ele cria as janelas e quaisquer janelas filhas, incluindo controles embutidos (CreateWindowEx).

    Cria menus e teclas aceleradoras.

    Ele define opções para a janela principal e mais de 100 opções para a janela do RichEdit. Ele também instrui a janela do RichEdit a notificar a janela principal sobre certas mensagens que a janela do RichEdit recebe.

    Em seguida, mostra as janelas e as atualiza. Seu programa agora está sendo executado como um programa gráfico.

    Entra em um loop e envia todas as mensagens recebidas para DispatchMessage, que as envia para o procedimento da janela principal ou para o procedimento da janela RichEdit. Quando a janela fecha, seu loop sai e o programa termina.

    Janela Procedimento

    Este é o coração de um programa do Windows. Este programa tem dois, a janela principal e a janela do RichEdit.

    O programador deve escrever o procedimento da janela principal. Embora um que apenas conecte o encanamento padrão tenha apenas três linhas de código.

    Todas as janelas têm um procedimento padrão do Windows. Isso lida com bordas, menus, barras de título, cursor, ponteiro, etc. No caso do RichEdit, o procedimento de janela oferece a maioria dos recursos do MS Word.

    Existem mensagens gerais do Windows (como redimensionamento da janela wm_size) do gerenciador de janelas para qualquer janela, dependendo da mensagem. Editar notificações de controle (RichEdit também envia as mesmas mensagens de notificação como um controle de edição) e notificações de RichEdit são enviadas pela janela Richedit para a janela principal.

    Nós apenas lidamos com as mensagens que precisamos. Deixamos que as janelas desenhem as bordas das janelas e, assim, passamos mensagens para que o façamos em nosso procedimento padrão de janelas. Processamos mensagens como se um item de menu tivesse sido escolhido quando recebemos uma mensagem WM_Command.

    O gerenciador de janelas envia mensagens do mouse para a janela principal se o ponteiro estiver sobre uma borda, menu ou barra de título. Se estiver sobre o RichEdit, a janela do RichEdit receberá essas mensagens, embora você possa pedir ao RichEdit para encaminhá-las para você, como este programa faz para o texto alterado e o menu de contexto.

    A maioria das teclas vai para o controle RichEdit. Possui uma extensa interface de edição de teclado. As teclas do sistema (como Alt + F4) e as teclas de menu (Alt + F) são enviadas para a janela principal que normalmente não as processa, mas as passa para o procedimento padrão da janela. A janela principal aguarda o procedimento padrão para enviá-lo de volta como um comando para executar (como WM_Close para sair ou WM_Command para um item de menu que foi escolhido).

    A menos que registremos outras chaves, elas irão para a janela RichEdit. EX.: Ctrl + A seleciona todo o texto e faz parte da interface de teclado do RichEdit (em seguida, envia para a janela principal uma mensagem de alteração de seleção). No entanto, Ctrl + S não faz parte da interface de teclado do RichEdit e o RichEdit o ignora. Portanto, precisamos registrar Ctrl + S, para que a janela principal o receba em vez do RichEdit, mas não Ctrl + A.

    Em uma função que é um Select Case, o procedimento da janela principal verifica se processará a mensagem. Caso contrário, chamará o procedimento de janela padrão que processará a mensagem, se necessário.

    Então

    Para sair do programa, feche a janela enviando uma mensagem WM_Close. Isso se transformará em uma mensagem WM_Destroy que você receberá e chamará PostQuitMessage. Seu procedimento de janela acabou.

    O loop principal recebe uma mensagem WM_Quit e sai do loop.

    As duas últimas linhas destroem a tabela do acelerador e o menu de contexto (já que não está atribuído a uma janela). Outros menus que foram atribuídos à janela são destruídos automaticamente. O programa acabou.

    • 1

relate perguntas

  • Como desativar a aceleração do mouse em um touchpad de precisão do Windows?

  • renomear em massa conjuntos de arquivos de imagem

  • Qual seria o equivalente em lote do argumento "pass" do Python?

  • Comunique-se com o daemon do Docker no Windows

  • atalho do shell da área de trabalho no painel lateral do explorer

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve