Página 1 de 1

Enviar tecla con mousleft se ´puede?

Publicado: 24 Ago 2012, 18:41
por Pregun
Gente quiero crear un scrip y buscando no encontre algo que me diera un ejemplo porque nose si se pueda hacer por ejemplo
clickleft
send ("2")
delay 100
send ("3")
o sea en difinitiva cuando aga clickleft mande las key
EDIT: se puede hacer que un clickleft se ejecute un scrip?

Re: Enviar tecla con mousleft se ´puede?

Publicado: 31 Ago 2012, 07:55
por joana
Veo este mensaje desde hace unos días y lo he intentado, pero no me ha salido. :smt022

Re: Enviar tecla con mousleft se ´puede?

Publicado: 01 Sep 2012, 02:45
por Chefito
Bueno, mandar las teclas es facil no? Por ejemplo, con la función send (para cualquier cosa en general),o con controlsend (para enviar teclas a controles). Mirar en la ayuda.
Lo que os puede resultar más complicado es encontrar el modo de enviar estas teclas cuando pulsas el botón izquierdo del ratón. Vamos, lo que es detectar esta pulsación! :smt001 . Pues se puede hacer de varias formas. Yo se 3 o 4:

1º. Utilizando el valor $GUI_EVENT_PRIMARYDOWN y comparándolo con es resultado de la función guigetmsg (mirarla en la ayuda). Variando mínimamente el ejemplo de la función anterior:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

Example()

Func Example()
    Local $MESSAGE = "The following buttons have been clicked"
    Local $add, $clear, $mylist, $close, $msg

    GUICreate("My GUI list") ; will create a dialog box that when displayed is centered

    $add = GUICtrlCreateButton("Add", 64, 32, 75, 25)
    $clear = GUICtrlCreateButton("Clear", 64, 72, 75, 25)
    $mylist = GUICtrlCreateList("buttons that have been clicked", 176, 32, 121, 97)
    GUICtrlSetLimit(-1, 200) ; to limit horizontal scrolling
    GUICtrlSetData(-1, $MESSAGE)
    $close = GUICtrlCreateButton("my closing button", 64, 160, 175, 25)

    GUISetState()

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
        $msg = GUIGetMsg()

        Select
            Case $msg = $add
                GUICtrlSetData($mylist, "You clicked button No1|")
            Case $msg = $clear
                GUICtrlSetData($mylist, "")
            Case $msg = $close
                MsgBox(0, "", "the closing button has been clicked", 2)
                Exit
			Case $GUI_EVENT_PRIMARYDOWN=$msg
				MsgBox(0,"","He pulsado el botón izquierdo del ratón")
        EndSelect
    WEnd
EndFunc   ;==>Example
2º. Utilizar la captura de eventos. En este caso se tendría que hacer capturando los eventos pertenecientes a WM_LBUTTONDOWN, que son las pulsaciones del botón izquierdo del ratón (para más información, buscar en la ayuda el tema "Windows Message Codes" donde encontrareis todos los mensajes que puede enviar windows).
Os pongo un pequeño ejemplo:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

    Local $msg
   GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")	;registro del evento pulsar botón izquierdo del ratón

    GUICreate("My GUI") ; will create a dialog box that when displayed is centered
    GUISetState(@SW_SHOW) ; will display an empty dialog box

    ; Run the GUI until the dialog is closed
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()

Func WM_LBUTTONDOWN($hWnd, $iMsg, $iwParam, $ilParam)
   ;aquí dentro teneis que poner el código para enviar la tecla cuando pulses el botón izquierdo.
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode
    $hWndFrom = $ilParam
    $iCoordX = BitAND($ilParam, 0xFFFF) ; Low Word
    $iCoordY = BitShift($ilParam, 16) ; Hi Word
   MsgBox(0,"Coordenadas de pulsación en la ventana",$iCoordX & "," & $iCoordY)
   Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
Personalmente, yo casi seguro que utilizaría uno de estos dos método, si quereis que la pulsación sea detectada dentro de vuestra ventana.

3º. Utilizando la función _ispressed de la udf misc.au3 que trae autoit. Metiendo esta función en un bucle y haciendo una comparación condicional, puede detectar cualquier tipo de pulsación. El código para la pulsación del botón izquierdo del ratón es el 01. Mirar en la ayuda su tabla y ejemplo.

4º Esta ya es avanzada. Utiliza apis de windows. Por fortuna la añadieron en la udf winapi.au3 que trae autoit, con un buen ejemplo. Mira el ejemplo de por ejemplo la api _WinAPI_SetWindowsHookEx. Trata sobre este tema a nivel más bajo. Es algo parecido a la función _ispressed pero mejor. Utiliza los mismos códigos que _ispressed (keycode).
También os puede interesar _WinAPI_Mouse_Event.

Con esto yo creo que vale. Buscar en el foro que algunos de estos temas están muy tratados. Por ejemplo, el punto 4º lo he tratado en varios post hace mucho tiempo, con buenas explicaciones incluídas :smt024 .

Saludos.

Re: Enviar tecla con mousleft se ´puede?

Publicado: 06 Sep 2012, 19:19
por Pregun
Chefito escribió:Bueno, mandar las teclas es facil no? Por ejemplo, con la función send (para cualquier cosa en general),o con controlsend (para enviar teclas a controles). Mirar en la ayuda.
Lo que os puede resultar más complicado es encontrar el modo de enviar estas teclas cuando pulsas el botón izquierdo del ratón. Vamos, lo que es detectar esta pulsación! :smt001 . Pues se puede hacer de varias formas. Yo se 3 o 4:

1º. Utilizando el valor $GUI_EVENT_PRIMARYDOWN y comparándolo con es resultado de la función guigetmsg (mirarla en la ayuda). Variando mínimamente el ejemplo de la función anterior:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

Example()

Func Example()
    Local $MESSAGE = "The following buttons have been clicked"
    Local $add, $clear, $mylist, $close, $msg

    GUICreate("My GUI list") ; will create a dialog box that when displayed is centered

    $add = GUICtrlCreateButton("Add", 64, 32, 75, 25)
    $clear = GUICtrlCreateButton("Clear", 64, 72, 75, 25)
    $mylist = GUICtrlCreateList("buttons that have been clicked", 176, 32, 121, 97)
    GUICtrlSetLimit(-1, 200) ; to limit horizontal scrolling
    GUICtrlSetData(-1, $MESSAGE)
    $close = GUICtrlCreateButton("my closing button", 64, 160, 175, 25)

    GUISetState()

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
        $msg = GUIGetMsg()

        Select
            Case $msg = $add
                GUICtrlSetData($mylist, "You clicked button No1|")
            Case $msg = $clear
                GUICtrlSetData($mylist, "")
            Case $msg = $close
                MsgBox(0, "", "the closing button has been clicked", 2)
                Exit
			Case $GUI_EVENT_PRIMARYDOWN=$msg
				MsgBox(0,"","He pulsado el botón izquierdo del ratón")
        EndSelect
    WEnd
EndFunc   ;==>Example
2º. Utilizar la captura de eventos. En este caso se tendría que hacer capturando los eventos pertenecientes a WM_LBUTTONDOWN, que son las pulsaciones del botón izquierdo del ratón (para más información, buscar en la ayuda el tema "Windows Message Codes" donde encontrareis todos los mensajes que puede enviar windows).
Os pongo un pequeño ejemplo:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

    Local $msg
   GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")	;registro del evento pulsar botón izquierdo del ratón

    GUICreate("My GUI") ; will create a dialog box that when displayed is centered
    GUISetState(@SW_SHOW) ; will display an empty dialog box

    ; Run the GUI until the dialog is closed
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()

Func WM_LBUTTONDOWN($hWnd, $iMsg, $iwParam, $ilParam)
   ;aquí dentro teneis que poner el código para enviar la tecla cuando pulses el botón izquierdo.
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode
    $hWndFrom = $ilParam
    $iCoordX = BitAND($ilParam, 0xFFFF) ; Low Word
    $iCoordY = BitShift($ilParam, 16) ; Hi Word
   MsgBox(0,"Coordenadas de pulsación en la ventana",$iCoordX & "," & $iCoordY)
   Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
Personalmente, yo casi seguro que utilizaría uno de estos dos método, si quereis que la pulsación sea detectada dentro de vuestra ventana.

3º. Utilizando la función _ispressed de la udf misc.au3 que trae autoit. Metiendo esta función en un bucle y haciendo una comparación condicional, puede detectar cualquier tipo de pulsación. El código para la pulsación del botón izquierdo del ratón es el 01. Mirar en la ayuda su tabla y ejemplo.

4º Esta ya es avanzada. Utiliza apis de windows. Por fortuna la añadieron en la udf winapi.au3 que trae autoit, con un buen ejemplo. Mira el ejemplo de por ejemplo la api _WinAPI_SetWindowsHookEx. Trata sobre este tema a nivel más bajo. Es algo parecido a la función _ispressed pero mejor. Utiliza los mismos códigos que _ispressed (keycode).
También os puede interesar _WinAPI_Mouse_Event.

Con esto yo creo que vale. Buscar en el foro que algunos de estos temas están muy tratados. Por ejemplo, el punto 4º lo he tratado en varios post hace mucho tiempo, con buenas explicaciones incluídas :smt024 .

Saludos.

Gracias mi amigo te mataste escribiendo :smt002 me sirvio mucho xD probare aver que onda lugo te digo como me fue