Simular pressionamento de uma tecla

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Simular pressionamento de uma tecla

Mensagem por Nascimento »

amigos estou com um problema preciso simular um pressionamento de tecla com o harbour similar a este codigo aqui
https://batchloaf.wordpress.com/2012/04 ... sendinput/
tem algo no harbour igual?
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Simular pressionamento de uma tecla

Mensagem por Pablo César »

Seria para modo console ou GUI ?

Creio que você refere-se a modo GUI.

Se for em HMG, dê uma olhada na função pronta em C:\hmg.3.4.4\SOURCE\c_controlmisc.c e procure pela função como exemplo INSERTTAB.
Talvez tenha pronta a tecla que você precisa (você não disse qual).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Paredes01
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 20 Mai 2012 11:22
Localização: Mérida, Yucatán, México

Simular pressionamento de uma tecla

Mensagem por Paredes01 »

Hola.

En modo consola

Código: Selecionar todos

For P = 1 to Len(aNotas)
            VAR&XX = aNotas[P,1]
            Keyboard { VAR&XX, 13 }    // <--- Equivale a variable mas enter en el get
           
            @ 11, 12 SAY "FOLIO &XX"
            @ 11, 23 Get VAR&XX PICT "@!S8" VALID Empty(VAR&XX)
            READ
            IF LASTKEY() = 27
               EXIT
            ENDIF
Next
Segun el manual
KEYBOARD
Writes a string or numeric key codes into the keyboard buffer.

Syntax
KEYBOARD <cString>
KEYBOARD <nInkeyCode>
KEYBOARD <aKeyCodes>

Arguments
<cString>
This is the character string that is written into the keyboard buffer.

<nInkeyCode>
Alternatively, a numeric key code can be specified. Normally, the #define constants listed in the Inkey.ch files are used for <nInkeyCode>.

<aKeyCodes>
A mixture of character strings or numeric key codes can be specified as a one dimensional array.

Description
The KEYBOARD command first clears the keyboard buffer and then fills it with the key codes specified as character strin, numeric values or within an array. Thus, all pending key strokes are discarded before new characters are written into the keyboard buffer. They remain in the buffer until being fetched from it during a wait state in which the keyboard buffer is polled for the next key stroke.
Wait states are employed by functions and commands that wait for user input, such as Achoice(), READ or MemoEdit().
Saludos
Editado pela última vez por Toledo em 21 Abr 2017 10:58, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Simular pressionamento de uma tecla

Mensagem por Nascimento »

Paredes01 Hola.
En modo consolai
Amigo Paredes01 ja tentei dessa forma e nao funcionou
por Pablo César
Seria para modo console ou GUI ?
Amigo Pablo César estou procurando em console mesmo pois quero rodar invisivel


qual o objetivo disso?
pra facilitar , vamos penssar no mame arcade a cada x tempo preciso apertar uma tecla para entrar credito pode ser qualquer letra porque é configuravel

então a ideia é ficar rodando invisivel com a gtwvt e a cada x tempo dar um input de teclado com a tecla correspondente

se observar é o que acontece aqui o cara roda o programa e é inserido um 'a' no bloco de notas

https://batchloaf.wordpress.com/2012/04 ... sendinput/
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Simular pressionamento de uma tecla

Mensagem por JoséQuintas »

Sei lá, tô achando fácil demais pra ter dúvida..... rs

Na API do Windows tem algo parecido com o keyboard do Harbour.
É pegar o hWnd da janela do programa, e chamar essa função.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Simular pressionamento de uma tecla

Mensagem por Nascimento »

JoséQuintas
Sei lá, tô achando fácil demais pra ter dúvida..... rs
amigo não entendi bem , mais simplismente nao encontrei nada sobre feito em harbour
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Simular pressionamento de uma tecla

Mensagem por JoséQuintas »

Se tem a função no Windows, é só usar no Harbour.
A hbwin inteira é exemplo de como usar funções do Windows.
Pode procurar em outra linguagem e converter para o Harbour.
Pode usar linguagem C diretamente no Harbour.

Não tem isso pronto nem em linguagem C, é necessário criar a rotina.

Se não me engano, vai precisar de:
FindWindow(), existe no Windows, pra pesquisar o handle da janela
SendKeys(), existe no Windows, pra enviar teclas pra essa janela
CallDll() ou CallDll32(), existe no Harbour, pra usar essas funcões pelo Harbour.

Também não existem funções prontas pra baixar do estoque, emitir nota fiscal, etc.
Cada um cria sua própria rotina pra isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Simular pressionamento de uma tecla

Mensagem por Nascimento »

apos o amigo quintas falar , eu analizei o codigo original e porteio de .c para o harbour ficando funcional ao meu proposito obrigado a todos
que tentaram me ajudar , objetivo concluido... :))

codigo esta abaixo

Código: Selecionar todos



//
// keystroke.c - Pauses, then simulates a key press
// and release of the "A" key.
//
// Written by Ted Burke - last updated 17-4-2012
//
// To compile with MinGW:
//
//      gcc -o keystroke.exe keystroke.c
//
// To run the program:
//
//      keystroke.exe
//
// ...then switch to e.g. a Notepad window and wait
// 5 seconds for the A key to be magically pressed.
//
 
// Because the SendInput function is only supported in
// Windows 2000 and later, WINVER needs to be set as
// follows so that SendInput gets defined when windows.h
// is included below.

// compilar normal hbmk2 tecla.prg
// 2 cliques sobre o .exe gerado ai abra o bloco de notas vai ver que vai ficar inserindo o "a" a cada 1 segundo


procedure main()


while .t.
 _keyb()
end 

#pragma BEGINDUMP

#define WINVER 0x0500
#include <windows.h>
#include <hbapi.h> 
HB_FUNC(_KEYB)
{
    // This structure will be used to create the keyboard
    // input event.
    INPUT ip;
 
    // Pause for 1 seconds.
    Sleep(1000);
 
    // Set up a generic keyboard event.
    ip.type = INPUT_KEYBOARD;
    ip.ki.wScan = 0; // hardware scan code for key
    ip.ki.time = 0;
    ip.ki.dwExtraInfo = 0;
 
    // Press the "A" key
    ip.ki.wVk = 0x41; // virtual-key code for the "a" key
    ip.ki.dwFlags = 0; // 0 for key press
    SendInput(1, &ip, sizeof(INPUT));
 
    // Release the "A" key
    ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
    SendInput(1, &ip, sizeof(INPUT));
 
    // Exit normally
    hb_retnl(1);
}
#pragma ENDDUMP



A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Responder