Что нового

Как работает DllCall?

XevaloO

Новичок
Сообщения
28
Репутация
1
Не совсем понял содержимое справки, вот как, например, с помощью этой функции послать клик мышки в окно(если не работает send и mouseclick)?
По моему разумению это бы должно выглядеть как-то так
Код:
$WinTi='Zuzuka'
WinActivate($WinTi)
WinWaitActive($WinTi)
$LB =  0x0001
$LBDown   =  0x0201
$LBUp     =  0x0202
MouseMove(631, 779)
$Button     =  $LB
$ButtonDown =  $LBDown
$ButtonUp   =  $LBUp

DllCall("user32.dll", "int", "SendMessage", _
	"int",   $ButtonDown, _
	"int",   $Button)

DllCall("user32.dll", "int", "SendMessage", _
	"int",   $ButtonUp, _
	"int",   $Button )

А как все же оно должно выглядеть чтоб работало?
 

kler2008

МаслоБоджиК
Сообщения
1
Репутация
0
[Мышь, клавиатура] Re: Как работает DllCall?

Код:
#include-once

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",   $WM_MOUSEMOVE, _
        "int",   0, _
        "long",  _MakeLong(Number($X), Number($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
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
XevaloO,
kler2008,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Верх