Clipper On Line • Ver Tópico - Usando o Método SendKeys do Objeto WScript.Shell

Usando o Método SendKeys do Objeto WScript.Shell

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

Moderador: Moderadores

 

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor asimoes » 27 Mar 2018 09:03

Pode ser útil em uma janela GUI, fiz um teste com com campo get entrou 123.

* Funciona em uma janela GUI fiz um teste.

   objShell := Win_OleCreateObject("WScript.Shell")
   objShell:SendKeys("123")
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor asimoes » 27 Mar 2018 11:51

Simulando uma soma na Calculadora

   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
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor JoséQuintas » 27 Mar 2018 12:07

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.

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.
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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor JoséQuintas » 27 Mar 2018 12:10

Equivalente em Harbour 3.4:
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.
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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor asimoes » 27 Mar 2018 12:24

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
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor JoséQuintas » 27 Mar 2018 12:59

Pois é... não deu, pelo menos no W10.
Não sei se ASCII é o mesmo que teclado, ou se é outro problema.

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
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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor asimoes » 27 Mar 2018 13:01

Quintas,

O meu teste foi no W10
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor asimoes » 27 Mar 2018 13:08

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 )
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor JoséQuintas » 27 Mar 2018 15:17

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.
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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor asimoes » 27 Mar 2018 16:14

O windows é meio selvagem (rs) tem saber domar o bicho
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor asimoes » 28 Mar 2018 08:20

Outras possibilidades

Maximizar, minimizar ou restaurar uma janela externa por exemplo o Firefox
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)
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor cjp » 11 Mar 2024 02:52

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.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor alxsts » 11 Mar 2024 03:24

Olá!

Poste o código...
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Usando o Método SendKeys do Objeto WScript.Shell

Mensagempor cjp » 11 Mar 2024 11:34

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.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 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