Página 1 de 1
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 09:03
por asimoes
Pode ser útil em uma janela GUI, fiz um teste com com campo get entrou 123.
* Funciona em uma janela GUI fiz um teste.
Código: Selecionar todos
objShell := Win_OleCreateObject("WScript.Shell")
objShell:SendKeys("123")
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 11:51
por asimoes
Simulando uma soma na Calculadora
Código: Selecionar todos
objShell := Win_OleCreateObject("WScript.Shell")
objShell:Run("calc")
Inkey(1)
objShell:AppActivate("Calculator")
Inkey(1)
objShell:SendKeys("1{+}")
Inkey(1)
objShell:SendKeys("2")
Inkey(1)
objShell:SendKeys("~") // Total
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 12:07
por JoséQuintas
Talvez mais interessante usar a API PostMessage(), e eventos WM_KEYDOWN e WM_KEYUP.
Como devem pedir exemplo, vai um dos meus tempos de VB.
Código: Selecionar todos
Option Explicit
' API_SendKey
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
' API_SendKey
Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Public Sub Api_SendKey(hwnd As Long, nKey As Long)
Dim lRetVal As Long
lRetVal = PostMessage(hwnd, WM_KEYDOWN, nKey, 0)
lRetVal = PostMessage(hwnd, WM_KEYUP, nKey, 0)
End Sub
Isso foi na entrada de uma versão de Windows, não lembro se Windows 7, onde a SendKeys do VB6 era bloqueada pela segurança, então a alternativa que encontrei na época foi essa.
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 12:10
por JoséQuintas
Equivalente em Harbour 3.4:
Código: Selecionar todos
wapi_PostMessage( hWnd, WM_KEYDOWN, nKey, 0 )
wapi_PostMessage( hWnd, WM_KEYUP, nKey, 0 )
Nota: Pelo nome das rotinas, deve ser apertar tecla e soltar tecla.
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 12:24
por asimoes
Até poderia ser, mas o exemplo tá usando algo que já está disponível no harbour que é Win_OleCreateObject, existem muitos exemplos usando objeto, é somente uma outra visão do que se pode fazer.
Não sei com wapi_* como funcionaria o meu exemplo
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 12:59
por JoséQuintas
Pois é... não deu, pelo menos no W10.
Não sei se ASCII é o mesmo que teclado, ou se é outro problema.
Código: Selecionar todos
REQUEST HB_CODEPAGE_PTISO
PROCEDURE Main
LOCAL hWnd
SetMode( 25, 80 )
CLS
hWnd := wapi_FindWindow( ,"calculadora" )
WinKeyboard( hWnd, "1+2=" )
Inkey(0)
RETURN
FUNCTION WinKeyboard( hWnd, cText )
LOCAL oElement
FOR EACH oElement IN cText
wapi_PostMessage( hWnd, WM_KEYDOWN, Asc( oElement ), 0 )
wapi_PostMessage( hWnd, WM_KEYUP, Asc( oElement ), 0 )
NEXT
RETURN NIL
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 13:01
por asimoes
Quintas,
O meu teste foi no W10
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 13:08
por asimoes
Quintas,
Você tem que dar um tempo entre uma operação e outra para a janela aceitar o comando se não não vai funcionar veja pelo meu exemplo, baseado num exemplo da microsoft, outra coisa, você tem que dar foco na janela. ( aqui estou na duvida )
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 15:17
por JoséQuintas
asimoes escreveu:outra coisa, você tem que dar foco na janela. ( aqui estou na duvida )
Isso não.
hWND := wapi_FindWindow( ... )
PostMessage( hWND ... )
hWnd é justamente a indicação da janela, e não do programa.
wapi_FindWindow, como o próprio nome diz: encontrar a janela
Antes daquele post também tentei com pausa entre as mensagens e não foi.
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 27 Mar 2018 16:14
por asimoes
O windows é meio selvagem (rs) tem saber domar o bicho
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 28 Mar 2018 08:20
por asimoes
Outras possibilidades
Maximizar, minimizar ou restaurar uma janela externa por exemplo o Firefox
Código: Selecionar todos
objShell := Win_OleCreateObject("WScript.Shell")
objShell:AppActivate("Firefox")
//objShell:SendKeys("% x") // Maximizar a janela ativa
//objShell:SendKeys("% n") // Minimizar a janela ativa
objShell:SendKeys("% r") // Restaurar a janela ativa
Inkey(1)
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 11 Mar 2024 02:52
por cjp
Outras possibilidades
Maximizar, minimizar ou restaurar uma janela externa por exemplo o Firefox
Estou testando estas opções.
A única coisa que consegui fazer foi trazer pra frente a janela pretendida. Mas não estão funcionando as opções de minimizar (que é a que eu preciso), nem de maximizar.
Estou usando HB 3.2, de 64 bits, em modo console, com windows 10.
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 11 Mar 2024 03:24
por alxsts
Olá!
Poste o código...
Usando o Método SendKeys do Objeto WScript.Shell
Enviado: 11 Mar 2024 11:34
por cjp
Código: Selecionar todos
objShell := Win_OleCreateObject("WScript.Shell")
objShell:AppActivate("ag5plano")
?"Vai maximizar:"
inkey(3)
objShell:SendKeys("% x") // Maximizar a janela ativa
?"Maximizou?"
?"Vai minimizar:"
inkey(3)
objShell:SendKeys("% n") // Minimizar a janela ativa
?"Minimizou?"
inkey(3)
?"Vai restaurar:"
inkey(3)
objShell:SendKeys("% r") // Restaurar a janela ativa
?"Restaurou?"
Inkey(3)
Fiz apenas para testar.