Clipper On Line • Ver Tópico - Simular pressionamento de uma tecla

Simular pressionamento de uma tecla

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

Moderador: Moderadores

 

Simular pressionamento de uma tecla

Mensagempor Nascimento » 20 Abr 2017 21:57

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/17/simulating-a-keystroke-in-win32-c-or-c-using-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 de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Simular pressionamento de uma tecla

Mensagempor Pablo César » 20 Abr 2017 23:50

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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Simular pressionamento de uma tecla

Mensagempor Paredes01 » 21 Abr 2017 00:09

Hola.

En modo consola

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
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
Paredes01
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 38
Data de registro: 20 Mai 2012 11:22
Cidade/Estado: Mérida, Yucatán, México
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Simular pressionamento de uma tecla

Mensagempor Nascimento » 21 Abr 2017 10:21

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/17/simulating-a-keystroke-in-win32-c-or-c-using-sendinput/
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Simular pressionamento de uma tecla

Mensagempor JoséQuintas » 21 Abr 2017 21:09

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18157
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Simular pressionamento de uma tecla

Mensagempor Nascimento » 21 Abr 2017 22:20

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 de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Simular pressionamento de uma tecla

Mensagempor JoséQuintas » 22 Abr 2017 07:40

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18157
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Simular pressionamento de uma tecla

Mensagempor Nascimento » 23 Abr 2017 16:33

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


//
// 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
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: clodoaldomonteiro e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro