Screenshotter

  • Der Screenshotter hier ist mit Auswahlfenster, deshalb ist hier die Genauigkeit recht gut.


    >> Verbesserungsvorschläge erwünscht <<

    Spoiler anzeigen
    [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    $msg = MsgBox("262148", "Screenshotter", "Willst du einen Screenshot machen ?")
    If $msg = 6 Then
    _GiveReport("Ziehe mit der linken Maustaste einen Rahmen, um den Screenshot zu machen")
    $pos = _MouseGetFrame("0x000000", 150)
    _ScreenCapture_Capture(@DesktopDir & "\Screenshot(" & _GetNumber() & ").png", $pos[1], $pos[2], $pos[1] + $pos[3], $pos[2] + $pos[4], False)
    While MsgBox("262148", "Screenshotter", "Willst du noch einen Screenshot machen ?") = 6
    _GiveReport("Ziehe mit der linken Maustaste einen Rahmen, um den Screenshot zu machen")
    $pos = _MouseGetFrame("0x000000", 150)
    _ScreenCapture_Capture(@DesktopDir & "\Screenshot(" & _GetNumber() & ").png", $pos[1], $pos[2], $pos[1] + $pos[3], $pos[2] + $pos[4], False)
    WEnd
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetNumber()
    Local $search = 0
    Do
    $search += 1
    Until Not FileExists(@DesktopDir & "\Screenshot(" & $search & ").png")
    Return ($search)
    EndFunc ;==>_GetNumber

    [/autoit] [autoit][/autoit] [autoit]

    Func _GiveReport($messgage)
    Do
    ToolTip($messgage)
    Sleep(50)
    Until _IsPressed("01")
    ToolTip("")
    EndFunc ;==>_GiveReport

    [/autoit] [autoit][/autoit] [autoit]

    Func _MouseGetFrame($color, $trans)

    [/autoit] [autoit][/autoit] [autoit]

    Local $left, $top, $wight, $height, $statx, $staty, $return[5], $begin_box, $end_box
    Local $frame = GUICreate("", 0, 0, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW)
    While 1
    If _IsPressed("01") Then
    $begin_box = MouseGetPos()
    GUISetState(@SW_SHOW)
    While 1
    GUISetBkColor($color)
    WinSetTrans($frame, "", $trans)

    [/autoit] [autoit][/autoit] [autoit]

    If MouseGetPos(0) > $begin_box[0] Then
    $wight = MouseGetPos(0) - $begin_box[0]
    $left = $begin_box[0]
    $statx = 0
    Else
    $left = MouseGetPos(0)
    $wight = $begin_box[0] - MouseGetPos(0)
    $statx = 1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If MouseGetPos(1) > $begin_box[1] Then
    $height = MouseGetPos(1) - $begin_box[1]
    $top = $begin_box[1]
    $staty = 0
    Else
    $top = MouseGetPos(1)
    $height = $begin_box[1] - MouseGetPos(1)
    $staty = 1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WinMove($frame, "", $left, $top, $wight, $height)
    Sleep(20)
    If Not _IsPressed("01") Then
    $end_box = MouseGetPos()
    GUIDelete($frame)
    ExitLoop
    EndIf
    WEnd
    ExitLoop
    EndIf
    Sleep(20)
    WEnd
    If $statx = 0 Then
    $return[1] = $begin_box[0]
    $return[3] = $end_box[0] - $begin_box[0]
    Else
    $return[1] = $end_box[0]
    $return[3] = $begin_box[0] - $end_box[0]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $staty = 0 Then
    $return[2] = $begin_box[1]
    $return[4] = $end_box[1] - $begin_box[1]
    Else
    $return[2] = $end_box[1]
    $return[4] = $begin_box[1] - $end_box[1]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return ($return)
    EndFunc ;==>_MouseGetFrame

    [/autoit]
  • Ich find es ist sehr gut geworden. Vllt könnte man noch eine Hauptgui erstellen, die alles steuert.
    Vllt könnte man auch den Speicherortner angeben lassen.