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.