كيف يمكنني التعرف على السحب حدد مع أوتويت

StackOverflow https://stackoverflow.com/questions/402486

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أكتب برنامج نصي التشغيل الآلي مع أوتويت: http://www.autoitscript.com /autoit3/index.shtml . في عملية أحتاج أن تأخذ لقطة من منطقة المحددة من قبل المستخدم.

وكيف يمكنني التعرف على الماوس السحب مختارة بالتعاون مع أوتويت 3؟ أنا أساسا بحاجة إلى طريقة للحصول على إحداثيات المستطيل المحدد ...

هل كانت مفيدة؟

المحلول

كان

وراسم من المنتديات أوتويت نوع ما يكفي للإجابة على هذا السؤال لي مع مثال العمل: <لأ href = "http://www.autoitscript.com/forum/index.php؟showtopic=86894&st=0&gopid=623824& # entry623824 "يختلط =" noreferrer نوفولو "> http://www.autoitscript.com/forum/index.php؟showtopic=86894&st=0&gopid=623824&#entry623824

#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <ScreenCapture.au3>

Global Const $WM_LBUTTONDOWN = 0x0201
Global $hDLL = DllOpen("User32.dll")

Global $Drag = False
Global $aCoord_Start
Global $aCoord_End
Global $iLeft, $iTop, $iRight, $iBottom
Global $sCapture = False

HotKeySet("{Esc}", "_Exit")

Global $pStub_MouseProc = DllCallbackRegister ("_Mouse_Handler", "int", "int;ptr;ptr")

Global $hHookMouse = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($pStub_MouseProc), _WinAPI_GetModuleHandle(0), 0)

While 1
    If $sCapture Then
        $sCapture = False
        _ScreenCapture_Capture(@ScriptDir & "\Capture.jpg", $iLeft, $iTop, $iRight, $iBottom)
    EndIf
    Sleep(100)
WEnd

Func _Mouse_Handler($nCode, $wParam, $lParam)
    If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHookMouse, $nCode, $wParam, $lParam)

    Switch $wParam
        Case $WM_LBUTTONDOWN
            $aCoord_Start = MouseGetPos()
        Case $WM_MOUSEMOVE
            If _IsPressed("01", $hDLL) Then $Drag = True
        Case $WM_LBUTTONUP
            $aCoord_End = MouseGetPos()

            If $Drag = True Then
                $Drag = False

                If $aCoord_Start[0] < $aCoord_End[0] Then
                    $iLeft = $aCoord_Start[0]
                    $iRight = $aCoord_End[0]
                Else
                    $iLeft = $aCoord_End[0]
                    $iRight = $aCoord_Start[0]
                EndIf

                If $aCoord_Start[1] < $aCoord_End[1] Then
                    $iTop = $aCoord_Start[1]
                    $iBottom = $aCoord_End[1]
                Else
                    $iTop = $aCoord_End[1]
                    $iBottom = $aCoord_Start[1]
                EndIf

                $sCapture = True
                Return 0
            EndIf
    EndSwitch

    Return _WinAPI_CallNextHookEx($hHookMouse, $nCode, $wParam, $lParam)
EndFunc

Func _Exit()
    DllCallbackFree($pStub_MouseProc)
    _WinAPI_UnhookWindowsHookEx($hHookMouse)
    DllClose($hDLL)

    Exit
EndFunc
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top