Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Klikanie (X,Y) Zminimalizowanego Okna


Rekomendowane odpowiedzi

Opublikowano

Korzysta z funkcji SendMessage. Informacja o autorze zawarta.

 

 ;===============================================================================
 ;
 ; Function Name:  _MouseClickPlus()
 ; Version added:  0.1
 ; Description:    Sends a click to window, not entirely accurate, but works 
 ;                 minimized.
 ; Parameter(s):   $Window     =  Title of the window to send click to
 ;                 $Button     =  "left" or "right" mouse button
 ;                 $X          =  X coordinate
 ;                 $Y          =  Y coordinate
 ;                 $Clicks     =  Number of clicks to send
 ; Remarks:        You MUST be in "MouseCoordMode" 0 to use this without bugs.
 ; Author(s):      Insolence <[email protected]>
 ;
 ;===============================================================================
Func _MouseClickPlus($Window, $Button = "left", $X = "", $Y = "", $Clicks = 1)
   Local $MK_LBUTTON       =  0x0001
   Local $WM_LBUTTONDOWN   =  0x0201
   Local $WM_LBUTTONUP     =  0x0202

   Local $MK_RBUTTON       =  0x0002   
   Local $WM_RBUTTONDOWN   =  0x0204
   Local $WM_RBUTTONUP     =  0x0205

   Local $WM_MOUSEMOVE     =  0x0200

   Local $i                = 0

   Select 
   Case $Button = "left"
      $Button     =  $MK_LBUTTON
      $ButtonDown =  $WM_LBUTTONDOWN
      $ButtonUp   =  $WM_LBUTTONUP
   Case $Button = "right"
      $Button     =  $MK_RBUTTON
      $ButtonDown =  $WM_RBUTTONDOWN
      $ButtonUp   =  $WM_RBUTTONUP
   EndSelect

   If $X = "" OR $Y = "" Then
      $MouseCoord = MouseGetPos()
      $X = $MouseCoord[0]
      $Y = $MouseCoord[1]
   EndIf

   For $i = 1 to $Clicks
      DllCall("user32.dll", "int", "SendMessage", _
         "hwnd",  WinGetHandle( $Window ), _
         "int",   $WM_MOUSEMOVE, _
         "int",   0, _
         "long",  _MakeLong($X, $Y))

      DllCall("user32.dll", "int", "SendMessage", _
         "hwnd",  WinGetHandle( $Window ), _
         "int",   $ButtonDown, _
         "int",   $Button, _
         "long",  _MakeLong($X, $Y))

      DllCall("user32.dll", "int", "SendMessage", _
         "hwnd",  WinGetHandle( $Window ), _
         "int",   $ButtonUp, _
         "int",   $Button, _
         "long",  _MakeLong($X, $Y))
   Next
EndFunc




Func _MakeLong($LoWord,$HiWord)
   Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc

 

Niech ktoś sprawdzi, czy działa, jak działa, i czy już było...? To się pokuszę o przetłumaczenie.

Ta sygnatura jest pusta.

Opublikowano

nie coś podobnego tylko całkiem innego , oba udf nie mają nic wspólnego z sobą ;)

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

Niestety - mi nie. Miałem kilka linijek w notatniku to teoretycznie kursor powinien mi przeskoczyć do tej na 300px:

Opt("MouseCoordMode", 0);"You MUST be in "MouseCoordMode" 0 to use this without bugs."
_MouseClickPlus("Bez tytułu — Notatnik", "left", 300, 300, 1)
Func _MouseClickPlus($Window, $Button = "left", $X = "", $Y = "", $Clicks = 1)
   Local $MK_LBUTTON       =  0x0001
   Local $WM_LBUTTONDOWN   =  0x0201
   Local $WM_LBUTTONUP     =  0x0202

   Local $MK_RBUTTON       =  0x0002
   Local $WM_RBUTTONDOWN   =  0x0204
   Local $WM_RBUTTONUP     =  0x0205

   Local $WM_MOUSEMOVE     =  0x0200

   Local $i                = 0

   Select
   Case $Button = "left"
      $Button     =  $MK_LBUTTON
      $ButtonDown =  $WM_LBUTTONDOWN
      $ButtonUp   =  $WM_LBUTTONUP
   Case $Button = "right"
      $Button     =  $MK_RBUTTON
      $ButtonDown =  $WM_RBUTTONDOWN
      $ButtonUp   =  $WM_RBUTTONUP
   EndSelect

   If $X = "" OR $Y = "" Then
      $MouseCoord = MouseGetPos()
      $X = $MouseCoord[0]
      $Y = $MouseCoord[1]
   EndIf

   For $i = 1 to $Clicks
      DllCall("user32.dll", "int", "SendMessage", _
         "hwnd",  WinGetHandle( $Window ), _
         "int",   $WM_MOUSEMOVE, _
         "int",   0, _
         "long",  _MakeLong($X, $Y))

      DllCall("user32.dll", "int", "SendMessage", _
         "hwnd",  WinGetHandle( $Window ), _
         "int",   $ButtonDown, _
         "int",   $Button, _
         "long",  _MakeLong($X, $Y))

      DllCall("user32.dll", "int", "SendMessage", _
         "hwnd",  WinGetHandle( $Window ), _
         "int",   $ButtonUp, _
         "int",   $Button, _
         "long",  _MakeLong($X, $Y))
   Next
EndFunc




Func _MakeLong($LoWord,$HiWord)
   Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

Opublikowano

próbowałem na wszelkie sposoby i nie działa, a szkoda. Widziałem już to dawno na forum au3

 

 

Opt("MouseCoordMode", 0)

HotKeySet("{F1}", "go")

GUICreate("test")
$button = GUICtrlCreateButton("",-5,-5,500,500)
GUISetState()
While 1
   $msg = GUIGetMsg()
   Select
       Case $msg = $button
           MsgBox(0,"","Yes")
   EndSelect
WEnd

Func go()
   _MouseClickPlus("test", "left", 50, 50) ;should click the button..
EndFunc

Func _MouseClickPlus($Window, $Button = "left", $X = "", $Y = "", $Clicks = 1)
 Local $MK_LBUTTON       =  0x0001
 Local $WM_LBUTTONDOWN   =  0x0201
 Local $WM_LBUTTONUP     =  0x0202
 Local $MK_RBUTTON       =  0x0002
 Local $WM_RBUTTONDOWN   =  0x0204
 Local $WM_RBUTTONUP     =  0x020
 Local $WM_MOUSEMOVE     =  0x0200
 Local $i                = 0
 Select
       Case $Button = "left"
           $Button     =  $MK_LBUTTON
           $ButtonDown =  $WM_LBUTTONDOWN
           $ButtonUp   =  $WM_LBUTTONUP
     Case $Button = "right"
        $Button     =  $MK_RBUTTON
        $ButtonDown =  $WM_RBUTTONDOWN
        $ButtonUp   =  $WM_RBUTTONUP
 EndSelect
 If $X = "" OR $Y = "" Then
    $MouseCoord = MouseGetPos()
    $X = $MouseCoord[0]
    $Y = $MouseCoord[1]
 EndIf
 For $i = 1 to $Clicks
    DllCall("user32.dll", "int", "SendMessage", _
       "hwnd",  WinGetHandle( $Window ), _
       "int",   $WM_MOUSEMOVE, _
       "int",   0, _
       "long",  _MakeLong(Number($X), Number($Y)))

    DllCall("user32.dll", "int", "SendMessage", _
       "hwnd",  WinGetHandle( $Window ), _
       "int",   $ButtonDown, _
       "int",   $Button, _
       "long",  _MakeLong(Number($X), Number($Y)))

    DllCall("user32.dll", "int", "SendMessage", _
       "hwnd",  WinGetHandle( $Window ), _
       "int",   $ButtonUp, _
       "int",   $Button, _
       "long",  _MakeLong(Number($X), Number($Y)))
 Next
EndFunc

Func _MakeLong($LoWord,$HiWord)
   Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc

 

  • 3 miesiące temu...
Opublikowano

wiem czemu nie dziala bo tu jest zrobione zeby klikal w okno a nie buton...

nie znam sie na dllcall ale jak ktos ogarnia to niech zrobi klikniecie w buton a nie gui:)

 

chyba ze zle mysle:P to sorry

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

Opublikowano

To jest dobre pytanie, na które nie znam odpowiedzi.

 

Czy jeśli wyślę message'a do okna z koordynatami buttonu, zostanie kliknięty ten button? Innymi słowy:

Czy Windows prześle tę wiadomość do child windows?

 

Aby pobrać child windows jakiegoś okna najwyższego poziomu, należy użyć funkcji:

EnumChildWindows

 

Pobranie okien najwyższego poziomu (bardzo dużo śmiecia ze względu na konstrukcję tray'a i contextmenu) to:

EnumWindows

Ta sygnatura jest pusta.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...