Page 1 of 1

Como emular presionar CTRL + CLICK IZQ ?

PostPosted: Tue May 08, 2018 2:31 am
by FranciscoA
Eso amigos.
Necesito emular (via codigo) presionar las teclas CONTROL + CLICK IZQ del mouse.
Es para lanzar una acción sin tener teclado ni mouse, en una pantalla touch.
Agradeceré cualquier codigo de muestra, o sugerencias.
Saludos.

Re: Como emular presionar CTRL + CLICK IZQ ?

PostPosted: Tue May 08, 2018 4:17 pm
by Armando
Francisco:

Tengo una función a la que nombre Teclado:

Code: Select all  Expand view

FUNCTION Teclado( oDlg, nKey, nVeces )
   LOCAL nVez
   DEFAULT nVeces := 1

   oDlg:SetFocus( )
   FOR nVez := 1 TO nVeces
      oDlg:POSTMSG( WM_KEYDOWN, nKey, 0 )
   NEXT
RETURN ( NIL )
 


En esta función solo utilizo la tecla FLECHA ABAJO (WM_KEYDOWN) pero si miras
en VKey.Ch de FW, encontrarás vairas combinaciones de teclas.

Espero te sirva mi ejemplo

Saludos

EDITADO

Francisco, creo que la combinación de teclas que necesitas sería VK_CONTROL + VK_RETURN, no olvides
incluir VKey.Ch

Saludos

Re: Como emular presionar CTRL + CLICK IZQ ?

PostPosted: Tue May 08, 2018 7:19 pm
by FranciscoA
Armando.
Gracias por contestar. Voy a probar tu codigo y luego te digo.
Nuevamente gracias.

Re: Como emular presionar CTRL + CLICK IZQ ?

PostPosted: Tue May 08, 2018 7:29 pm
by karinha
Code: Select all  Expand view

#Include "FiveWin.Ch"

Function Main()

   LOCAL oWnd

   DEFINE WINDOW oWnd TITLE "Testando Teclado"

   oWnd:bKeyDown := { | nKey | StdKey( nKey ) }
   oWnd:bKeyChar := { | nKey | StdKey( nKey ) }

   ACTIVATE WINDOW oWnd

Return Nil

FUNCTION StdKey( nKey )

   do case
   case nKey == 1 .and. GetKeyState( VK_CONTROL )
      ? Str( nKey )
   case nKey == 2 .and. GetKeyState( VK_CONTROL )
      ? Str( nKey )
   case nKey == 3 .and. GetKeyState( VK_CONTROL )
      ? Str( nKey )
   case nKey == 4 .and. GetKeyState( VK_CONTROL )
      ? Str( nKey )
   case nKey == 8 .and. GetKeyState( VK_CONTROL )
      ? Str( nKey )
   case nKey == 13 .and. GetKeyState( VK_CONTROL )
      ? Str( nKey )
   case nKey == 65 .and. GetKeyState( VK_CONTROL ) // Crtl + A
      ? Str( nKey )
   case nKey == 66 .and. GetKeyState( VK_CONTROL ) // Crtl + B
      ? Str( nKey )
   case nKey == 68 .and. GetKeyState( VK_CONTROL ) // Crtl + C
      ? Str( nKey )
   case nKey == 38 .and. GetKeyState( VK_CONTROL ) // Ctrl + Down
      ? Str( nKey )
   case nKey == 40 .and. GetKeyState( VK_CONTROL ) // Ctrl + Up
      ? Str( nKey )
   case nKey == 48 .and. GetKeyState( VK_CONTROL ) // Ctrl + 0
      ? Str( nKey )
   end case

RETURN Nil
 

Re: Como emular presionar CTRL + CLICK IZQ ?

PostPosted: Tue May 08, 2018 9:40 pm
by FranciscoA
Armando.
He probado con esta leve modificacion a tu funcion, pero no logro resultados:

Code: Select all  Expand view
Teclado( oDlg, .T., VK_CONTROL, nVeces )
Teclado( oDlg, .F., VK_CONTROL, nVeces )
//---------------------------------------//
FUNCTION Teclado( oWind, lPressed, nVKey, nVeces )
   LOCAL nVez, nTecla
   DEFAULT nVeces := 1

   nTecla := if(lPressed, WM_KEYDOWN, WM_KEYUP)

   oWind:SetFocus( )
   FOR nVez := 1 TO nVeces
      oWind:PostMsg( nTecla, nVKey, 0 )
   NEXT
RETURN ( NIL )
 


Lo que necesito es emular la tecla VK_CONTROL presionada, mientras ejecuto una accion, luego soltar la tecla VK_CONTROL.
En otras palabras, quiero imitar el MULTISELECT del xBrowse, en un ambiento touch.
Alguna otra idea.

Re: Como emular presionar CTRL + CLICK IZQ ?

PostPosted: Tue May 08, 2018 9:44 pm
by FranciscoA
Karinha.
Gracias por tu codigo. Me ha dado ideas para otros trabajos.

Lo que quiero hacer es imitar el MULTISELECT del xBrowse, en un ambiento touch. (sin keyboard y sin mouse instalados)
Es decir, emular la tecla VK_CONTROL presionada, mientras ejecuto otra accion. Luego soltar la tecla VK_CONTROL. (vía codigo)
Alguna otra idea?
Saludos.

Re: Como emular presionar CTRL + CLICK IZQ ?

PostPosted: Wed May 09, 2018 2:46 pm
by FranciscoA
Hola amigos.
Voy avanzando. Estoy probando la function SendKey(VK_CONTROL), y me funciona para fijar la tecla CONTROL.
Lo que me falta es emular mantener presionado un boton, ejecutar action with SendKey(), y después emular soltar el boton.
Gracias

Re: Como emular presionar CTRL + CLICK IZQ ?

PostPosted: Wed May 09, 2018 3:46 pm
by karinha