Como ver quais são os atalhos em memória | Ti Responde 0077

No vídeo de hoje, vamos demonstrar em como descobrir as funções com atalhos em memória.

A dúvida de hoje, nos perguntaram, se seria possível usando AdvPL, identificar quais funções estariam na memória em atalhos.

 

Pensando nisso, montamos esse exemplo, onde usamos o ponto de entrada ChkExec para ativar um atalho, e ao pressioná-lo ele percorre os atalhos em memória e mostra uma mensagem com a lista.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"
#Include "TopConn.ch"

/*/{Protheus.doc} User Function ChkExec
Ponto de entrada, ao abrir alguma rotina no menu
@type  Function
@author Atilio
@since 30/11/2023
@see @see https://tdn.totvs.com/display/public/framework/CHKEXEC+-+Dispara+ponto+de+entrada
/*/

User Function ChkExec()
    Local aArea    := FWGetArea()
    
    //Adiciona um atalho para verificar os atalhos principais em memória
    SetKey(K_SH_F5, {|| u_zVid0077() })

    FWRestArea(aArea)
Return

/*/{Protheus.doc} User Function zVid0077
Função que abre uma tela com os principais atalhos configurados
@type  Function
@author Atilio
@since 30/11/2023
/*/

User Function zVid0077()
    Local aArea := FWGetArea()
    Local cTexto := ""
    Local cExibir := ""
    Local nKeyF
    Local cAtalhoKey
    Local aAtalhos := {}
    Local bKeyF
    Local cDescricao := ""
    Local nAtalho

    //Adiciona as teclas de atalho que serão verificadas
    //Caso queira adicionar outros, aqui tem a lista de atalhos possíveis - https://tdn.totvs.com/display/tec/SetKey
    aAdd(aAtalhos, {"F1",  VK_F1})
    aAdd(aAtalhos, {"F2",  VK_F2})
    //aAdd(aAtalhos, {"F3",  VK_F3})
    aAdd(aAtalhos, {"F4",  VK_F4})
    aAdd(aAtalhos, {"F5",  VK_F5})
    aAdd(aAtalhos, {"F6",  VK_F6})
    aAdd(aAtalhos, {"F7",  VK_F7})
    aAdd(aAtalhos, {"F8",  VK_F8})
    aAdd(aAtalhos, {"F9",  VK_F9})
    aAdd(aAtalhos, {"F10", VK_F10})
    aAdd(aAtalhos, {"F11", VK_F11})
    aAdd(aAtalhos, {"F12", VK_F12})

    //Aqui vamos adicionar também as funções do Canivete de Atalhos ( https://terminaldeinformacao.com/2022/05/30/canivete-suico-de-atalhos-uteis-ti-responde-009/ )
    //E a própria função dos atalhos (Shift F5)
    aAdd(aAtalhos, {"Ctrl + L",    K_CTRL_L})
    aAdd(aAtalhos, {"Shift + F5",  K_SH_F5})
    aAdd(aAtalhos, {"Shift + F7",  K_SH_F7})
    aAdd(aAtalhos, {"Shift + F8",  K_SH_F8})
    aAdd(aAtalhos, {"Shift + F9",  K_SH_F9})
    aAdd(aAtalhos, {"Shift + F11", K_SH_F11})

    //Percorre as teclas
    For nKeyF := 1 To Len(aAtalhos)
        cDescricao := PadR(aAtalhos[nKeyF][1], 12)
        nAtalho    := aAtalhos[nKeyF][2]

        //Busca o bloco de código
        bKeyF := &("SetKey(" + cValToChar(nAtalho) + ")")

        //Se o bloco de código existir
        If ValType(bKeyF) == "B"
            //Transforma o bloco de código em caractere
            cAtalhoKey := GetCBSource(bKeyF)

            //Incrementa a mensagem
            cTexto += "+ " + cDescricao + ": " + cAtalhoKey + CRLF

            //Volta o atalho para a memória
            SetKey(nAtalho, bKeyF)
        EndIf
    Next

    //Se houver texto
    If ! Empty(cTexto)
        cExibir := "Função:    " + FunName() + CRLF
        cExibir += "Descrição: " + FunDesc() + CRLF
        cExibir += CRLF + CRLF
        cExibir += "Atalhos na Memória: " + CRLF + CRLF
        cExibir += cTexto

        ShowLog(cExibir)
    EndIf

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

 

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação