auf durchsichtiges Fenster mit GDI+ zeichnen, wie? Backbuffer Problem, BitBlt

  • Hallo,

    ich habe hier eine Lupenfunktion mit nem durchsichtigen Fenster. Jetzt mochte ich das Script auswahl.au3, bzw die Funktionen zum zeichnen der Linien, gerne in das andere Script integrieren. Jedoch wie bewerkstellige ich des mit dem durchsichtigen Hintergrund? Gibts da eine Pinseleinstellung für?

    Bin dankbar für jeden Rat oder Verbesserungsvorschlag!

    Lupe:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <Misc.au3>
    #include <GDIPlus.au3>
    #Include <GuiSlider.au3>
    #include <EditConstants.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <UpDownConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ScreenCapture.au3>
    Opt("GUIOnEventMode", 1)
    ;GUISetState(@SW_SHOW)
    HotKeySet("{ESC}", "Beenden")
    ;declare
    Dim $Pos
    Dim $PosOld[2]
    Local $hGUI, $hChild, $hWnd_Desktop, $menu1
    Local $hDC_Dest, $hDC_Source
    Local $iX, $iY, $iW, $iH, $Lupe, $copyLupe
    Local $countLR, $countHR, $coordLR, $coordHR, $iXo, $iYo
    Local $Sl1ScaleMin, $Sl1ScaleMax, $Sl2ScaleMin, $Sl2ScaleMax, $SliderObenPos, $SliderUntenPos, $SliderLinksPos, $SliderRechtsPos
    $Scale = 10
    $Sl1ScaleMin = 0
    $Sl1ScaleMax = @DesktopWidth
    $Sl2ScaleMin = 0
    $Sl2ScaleMax = @DesktopHeight
    $dll = DllOpen("user32.dll")
    $dist = 96
    $Border = 4
    $PixelDat = 10
    $Pos = MouseGetPos()
    ;GUI
    $hGUI = GUICreate("Main", 300, 485, -1, -1, Default, $WS_EX_TOPMOST)
    $menu1 = GUICtrlCreateMenu("File")
    $menuexit = GUICtrlCreateMenuitem("Beenden", $menu1)
    $Slider1 = GUICtrlCreateSlider(5, 290, 160, 32, BitOR($TBS_AUTOTICKS,$TBS_BOTH,$TBS_NOTICKS,$TBS_FIXEDLENGTH,$WS_BORDER), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
    $Slider2 = GUICtrlCreateSlider(5, 345, 160, 32, BitOR($TBS_AUTOTICKS,$TBS_BOTH,$TBS_NOTICKS,$TBS_FIXEDLENGTH,$WS_BORDER), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
    $SliderOben = GUICtrlCreateSlider(37, 0, 226, 32, 0)
    $SliderUnten = GUICtrlCreateSlider(37, 230, 226, 34, BitOR($TBS_TOP,$TBS_LEFT))
    $SliderLinks = GUICtrlCreateSlider(15, 17, 34, 226, $TBS_VERT)
    $SliderRechts = GUICtrlCreateSlider(250, 17, 34, 226, BitOR($TBS_VERT,$TBS_TOP,$TBS_LEFT))
    $Input1 = GUICtrlCreateInput("", 4, 400, 184, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Input2 = GUICtrlCreateInput("", 4, 420, 184, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Input3 = GUICtrlCreateInput("", 4, 440, 184, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Input4 = GUICtrlCreateInput("", 220, 400, 50, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Input5 = GUICtrlCreateInput("", 60, 270, 30, 17, BitOR($ES_AUTOHSCROLL, $ES_READONLY, $ES_RIGHT))
    $Input6 = GUICtrlCreateInput("", 60, 325, 30, 17, BitOR($ES_AUTOHSCROLL, $ES_READONLY, $ES_RIGHT))
    $Pixel = GUICtrlCreateUpdown($Input4)
    $Label1 = GUICtrlCreateLabel("Koordinaten:", 5, 380, 64, 17)
    $Label2 = GUICtrlCreateLabel('x - Achse = ', 10, 270, 48, 17)
    $Label3 = GUICtrlCreateLabel('y - Achse = ', 10, 325, 48, 17)
    $hPen = _GDIPlus_PenCreate()
    GUISetState(@SW_SHOW, $hGUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Beenden")
    GUICtrlSetOnEvent($menuexit, "Beenden")
    GUICtrlSetFont($Label1, 8, 400, 4, "MS Sans Serif")
    GUICtrlSetData($Input4, $PixelDat)
    $hLupe = GUICreate("", ($dist / 2), ($dist / 2), $Pos[0] + ($dist / 8), $Pos[1] + ($dist / 8), $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_STATICEDGE), $hGUI)
    GUICtrlSetBkColor(GUICtrlCreateLabel("", 0, 0, ($dist / 2), ($dist / 2)), 0xFF0000)
    GUICtrlSetBkColor(GUICtrlCreateLabel("", 2, 2, (($dist / 2) - $Border), (($dist / 2) - $Border)), 0xABCDEF)
    GUICtrlSetState($Slider1, $GUI_DISABLE)
    GUICtrlSetLimit($Slider1, @DesktopWidth, 0)
    GUICtrlSetData($Slider1, $iX)
    GUICtrlSetState($Slider2, $GUI_DISABLE)
    GUICtrlSetLimit($Slider2, @DesktopHeight, 0)
    GUICtrlSetData($Slider2, $iY)
    GUICtrlSetLimit($SliderOben, 200, 0)
    GUICtrlSetData($SliderOben, 100)
    GUICtrlSetLimit($SliderUnten, 200, 0)
    GUICtrlSetData($SliderUnten, 100)
    GUICtrlSetLimit($SliderLinks, 200, 0)
    GUICtrlSetData($SliderLinks, 100)
    GUICtrlSetLimit($SliderRechts, 200, 0)
    GUICtrlSetData($SliderRechts, 100)
    $SliderObenPos = _GUICtrlSlider_GetPos($SliderOben)
    $SliderUntenPos = _GUICtrlSlider_GetPos($SliderUnten)
    $SliderLinksPos = _GUICtrlSlider_GetPos($SliderLinks)
    $SliderRechtsPos = _GUICtrlSlider_GetPos($SliderRechts)

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

    GUISetState()
    ;ENDE GUI
    _GDIPlus_Startup()
    _WinAPI_SetLayeredWindowAttributes($hLupe, 0xABCDEF, 255)
    ; Desktop und GUI DC holen.
    $hWnd_Desktop = _WinAPI_GetDesktopWindow()
    $hDC_Source = _WinAPI_GetDC($hWnd_Desktop)
    $hDC_Dest = _WinAPI_GetDC($hGUI)
    ;ENDE declare

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hLupe)
    _GDIPlus_GraphicsDrawLine ($hGraphic, 50, 30, 230, 30, $hPen);
    _GDIPlus_GraphicsDrawLine ($hGraphic, 50, 230, 230, 50, $hPen)
    _GDIPlus_GraphicsDrawLine ($hGraphic, 50, 30, 390, 150, $hPen)
    _GDIPlus_GraphicsDrawLine ($hGraphic, 10, 150, 390, 150, $hPen)

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

    ;Schleife
    While GUIGetMsg(1) <> $GUI_EVENT_CLOSE
    Sleep(75)
    ;Mousposition abfragen
    $Pos = MouseGetPos()
    ; Winposition abfragen
    $aWinPos = WinGetPos($hLupe)
    $iX = $aWinPos[0] ; x
    $iY = $aWinPos[1] ; y
    $iW = $aWinPos[2] ; width
    $iH = $aWinPos[3] ; height
    ;Wenn sich Mausposition ändert
    If $Pos[0] <> $PosOld[0] Or $Pos[1] <> $PosOld[1] Then
    WinMove($hLupe, "", $Pos[0] + ($dist / 8), $Pos[1] + ($dist / 8))
    $PosOld = $Pos
    $countLR = 0
    $countHR = 0
    GUICtrlSetData($Slider1, $iX)
    GUICtrlSetData($Slider2, $iY)
    GUICtrlSetData($Input5, $iX + ($iW / 2))
    GUICtrlSetData($Input6, $iY + ($iH / 2))
    EndIf
    ;Wenn Bewegungstaste gedrückt
    If _IsPressed('25', $dll) And $iX > $Sl1ScaleMin Then ;links gedrückt
    $countLR = $countLR + (-1)
    WinMove($hLupe, "", $iX - $Scale, $iY)
    GUICtrlSetData($Input5, $iX + ($iW / 2))
    GUICtrlSetData($Slider1, $iX)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
    ElseIf _IsPressed('27', $dll) And ($iX + $iW) < $Sl1ScaleMax Then ;rechts gedrückt
    $countLR = $countLR + 1
    WinMove($hLupe, "", $iX + $Scale, $iY)
    GUICtrlSetData($Input5, $iX + ($iW / 2))
    GUICtrlSetData($Slider1, $iX)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
    ElseIf _IsPressed('26', $dll) And $iY > $Sl2ScaleMin Then ;hoch gedrückt
    $countHR = $countHR + (-1)
    WinMove($hLupe, "", $iX, $iY - $Scale)
    GUICtrlSetData($Input6, $iY + ($iH / 2))
    GUICtrlSetData($Slider2, $iY)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
    ElseIf _IsPressed('28', $dll) And ($iY + $iH) < $Sl2ScaleMax Then ;runter gedrückt
    $countHR = $countHR + 1
    WinMove($hLupe, "", $iX, $iY + $Scale)
    GUICtrlSetData($Input6, $iY + ($iH / 2))
    GUICtrlSetData($Slider2, $iY)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
    EndIf
    ;InfoPost
    ToolTip(($aWinPos[0] + ($aWinPos[2] / 2)) & ', ' & ($aWinPos[1] + ($aWinPos[3] / 2)), $iX, $iY + $iH)
    GUICtrlSetData($Input1, 'Maus: x = ' & $Pos[0] & ' , y = ' & $Pos[1])
    GUICtrlSetData($Input2, 'Auswahl: x = ' & $aWinPos[0] & ' , y = ' & $aWinPos[1])
    GUICtrlSetData($Input3, 'Horizontal: ' & $countLR & ' , Vertikal: ' & $countHR)
    ;
    ; Bild per StretchBlt übertragen
    $Lupe = _WinAPI_StretchBlt( _
    $hDC_Dest, 50, 30, 200, 200, _
    $hDC_Source, $iX, $iY, $iW, $iH, _
    $SRCCOPY)
    ;
    ;Pixelgrösse des zu kopierenden Objekts
    $PixelDat = 10
    GUICtrlSetData($Input4, $PixelDat)
    ;Bild speichern
    If _IsPressed('10') Then
    $hBMP = _ScreenCapture_CaptureWND(@DesktopDir & "\Image.jpg", $hLupe, $iX, $iY, $iX + $iW, $iY + $iH)
    _ScreenCapture_SaveImage (@DesktopDir & "\Image.jpg", $hBmp)
    EndIf
    WEnd
    ;Funktionen
    Func _WinAPI_StretchBlt($hDestDC, $iXDest, $iYDest, $iWidthDest, $iHeightDest, $hSrcDC, $iXSrc, $iYSrc, $iWidthSrc, $iHeightSrc, $iRop)
    ; See _WinAPI_BitBlt
    Local $Ret = DllCall('gdi32.dll', 'int', 'StretchBlt', 'hwnd', $hDestDC, 'int', $iXDest, 'int', $iYDest, 'int', $iWidthDest, 'int', $iHeightDest, 'hwnd', $hSrcDC, 'int', $iXSrc, 'int', $iYSrc, 'int', $iWidthSrc, 'int', $iHeightSrc, 'dword', $iRop)
    If (@error) Or (Not IsArray($Ret)) Then
    Return SetError(1, 0, 0)
    EndIf
    Return 1
    EndFunc ;==>_WinAPI_StretchBlt
    Func Beenden()
    Exit
    EndFunc ;==>Beenden

    [/autoit]

    Auswahl:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <Misc.au3>
    #include <GDIPlus.au3>
    #Include <GuiSlider.au3>
    #include <EditConstants.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <UpDownConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ScreenCapture.au3>
    Opt("GUIOnEventMode", 1)
    HotKeySet("{ESC}", "Beenden")
    Dim $Pos
    Dim $PosOld[4]
    Local $hGUI, $hChild, $hWnd_Desktop, $menu1
    Local $hDC_Dest, $hDC_Source, $var
    Local $iX, $iY, $iW, $iH, $Lupe, $copyLupe, $X, $Y, $width, $height
    Local $countLR, $countHR, $coordLR, $coordHR, $iXo, $iYo
    Local $Sl1ScaleMin, $Sl1ScaleMax, $Sl2ScaleMin, $Sl2ScaleMax, $SliderObenPos, $SliderUntenPos, $SliderLinksPos, $SliderRechtsPos
    $Scale = 10
    $Sl1ScaleMin = 0
    $Sl1ScaleMax = @DesktopWidth
    $Sl2ScaleMin = 0
    $Sl2ScaleMax = @DesktopHeight
    $dll = DllOpen("user32.dll")
    $dist = 96
    $Border = 4
    $PixelDat = 10
    $Pos = MouseGetPos()
    $hGUI = GUICreate("Main", 300, 485, -1, -1, Default, $WS_EX_TOPMOST)
    $SliderOben = GUICtrlCreateSlider(37, 0, 226, 32, 0)
    $SliderUnten = GUICtrlCreateSlider(37, 230, 226, 34, BitOR($TBS_TOP,$TBS_LEFT))
    $SliderLinks = GUICtrlCreateSlider(15, 17, 34, 226, $TBS_VERT)
    $SliderRechts = GUICtrlCreateSlider(250, 17, 34, 226, BitOR($TBS_VERT,$TBS_TOP,$TBS_LEFT))
    GUISetState(@SW_SHOW, $hGUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Beenden")
    GUICtrlSetLimit($SliderOben, 200, 0)
    GUICtrlSetData($SliderOben, 80)
    GUICtrlSetLimit($SliderUnten, 200, 0)
    GUICtrlSetData($SliderUnten, 120)
    GUICtrlSetLimit($SliderLinks, 200, 0)
    GUICtrlSetData($SliderLinks, 80)
    GUICtrlSetLimit($SliderRechts, 200, 0)
    GUICtrlSetData($SliderRechts, 120)
    $SliderObenPos = _GUICtrlSlider_GetPos($SliderOben)
    $SliderUntenPos = _GUICtrlSlider_GetPos($SliderUnten)
    $SliderLinksPos = _GUICtrlSlider_GetPos($SliderLinks)
    $SliderRechtsPos = _GUICtrlSlider_GetPos($SliderRechts)
    GUISetState()

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

    _GDIPlus_Startup()
    $hPen = _GDIPlus_PenCreate()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)

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

    While GUIGetMsg(1) <> $GUI_EVENT_CLOSE
    $Pos = MouseGetPos()
    $SliderObenPos = _GUICtrlSlider_GetPos($SliderOben)
    $SliderUntenPos = _GUICtrlSlider_GetPos($SliderUnten)
    $SliderLinksPos = _GUICtrlSlider_GetPos($SliderLinks)
    $SliderRechtsPos = _GUICtrlSlider_GetPos($SliderRechts)
    _GDIPlus_GraphicsDrawLine ($hGraphic, 50, 30 + $SliderLinksPos, 248, 30 + $SliderLinksPos, $hPen); oben
    _GDIPlus_GraphicsDrawLine ($hGraphic, 50, 30 + $SliderRechtsPos, 248, 30 + $SliderRechtsPos, $hPen); unten
    _GDIPlus_GraphicsDrawLine ($hGraphic, 50 + $SliderObenPos, 30, 50 + $SliderObenPos, 230, $hPen); links
    _GDIPlus_GraphicsDrawLine ($hGraphic, 50 + $SliderUntenPos, 30, 50 + $SliderUntenPos, 230, $hPen); rechts
    If $SliderObenPos <> $PosOld[0] Or $SliderUntenPos <> $PosOld[1] Or $SliderLinksPos <> $PosOld[2] Or $SliderRechtsPos <> $PosOld[3] Then
    $PosOld[0] = $SliderObenPos
    $PosOld[1] = $SliderUntenPos
    $PosOld[2] = $SliderLinksPos
    $PosOld[3] = $SliderRechtsPos
    _WinAPI_RedrawWindow($hGUI)
    EndIf

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

    If $SliderLinksPos > $SliderRechtsPos Then
    $Y = $SliderRechtsPos
    $height = $SliderLinksPos - $SliderRechtsPos
    Else
    $Y = $SliderLinksPos
    $height = $SliderRechtsPos - $SliderLinksPos
    EndIf
    If $SliderObenPos > $SliderUntenPos Then
    $X = $SliderUntenPos
    $width = $SliderObenPos - $SliderUntenPos
    Else
    $X = $SliderObenPos
    $width = $SliderUntenPos - $SliderObenPos
    EndIf
    ToolTip('o: ' & $PosOld[0] & ', u: ' & $PosOld[1] & ', l: ' & $PosOld[2] & ', r: ' & $PosOld[3] & ' / x: ' & $X & ', y: ' & $Y & ', w: ' & $width & ', h: ' & $height)
    WEnd

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

    Func Beenden()
    Exit
    EndFunc ;==>Beenden

    [/autoit]
  • Hi,

    Edit: also integriert hab ich das jetzt soweit! Ich bekomm des jetzt aber mit dem Backbuffer nicht hin! Aber ich arbeite dran!

    Update:


    Spoiler anzeigen
    [autoit]

    ;Start
    ;include
    #include <WinAPI.au3>
    #include <Misc.au3>
    #include <GDIPlus.au3>
    #include <GuiSlider.au3>
    #include <EditConstants.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <UpDownConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ScreenCapture.au3>
    Opt("GUIOnEventMode", 1)
    HotKeySet("{ESC}", "Beenden")
    ;declare
    Dim $Pos
    Dim $PosOld[2]
    Dim $PosSlOld[4]
    Local $hGUI, $hChild, $hWnd_Desktop, $menu1
    Local $hDC_Dest, $hDC_Source, $backbuffer
    Local $iX, $iY, $iW, $iH, $Lupe, $copyLupe
    Local $countLR, $countHR, $coordLR, $coordHR, $iXo, $iYo
    Local $Sl1ScaleMin, $Sl1ScaleMax, $Sl2ScaleMin, $Sl2ScaleMax, $SliderObenPos, $SliderUntenPos, $SliderLinksPos, $SliderRechtsPos
    $Scale = 10
    $Sl1ScaleMin = 0
    $Sl1ScaleMax = @DesktopWidth
    $Sl2ScaleMin = 0
    $Sl2ScaleMax = @DesktopHeight
    $dll = DllOpen("user32.dll")
    $dist = 96
    $Border = 4
    $PixelDat = 10
    $Pos = MouseGetPos()
    ;GUI
    $hGUI = GUICreate("Main", 300, 510, -1, -1, $WS_EX_LAYERED, $WS_EX_TOPMOST)
    $menu1 = GUICtrlCreateMenu("File")
    $menuexit = GUICtrlCreateMenuitem("Beenden", $menu1)
    $Slider1 = GUICtrlCreateSlider(5, 290, 160, 32, BitOR($TBS_AUTOTICKS, $TBS_BOTH, $TBS_NOTICKS, $TBS_FIXEDLENGTH, $WS_BORDER), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
    $Slider2 = GUICtrlCreateSlider(5, 345, 160, 32, BitOR($TBS_AUTOTICKS, $TBS_BOTH, $TBS_NOTICKS, $TBS_FIXEDLENGTH, $WS_BORDER), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
    $SliderOben = GUICtrlCreateSlider(37, 0, 226, 32, 0)
    $SliderUnten = GUICtrlCreateSlider(37, 230, 226, 34, BitOR($TBS_TOP, $TBS_LEFT))
    $SliderLinks = GUICtrlCreateSlider(15, 17, 34, 226, $TBS_VERT)
    $SliderRechts = GUICtrlCreateSlider(250, 17, 34, 226, BitOR($TBS_VERT, $TBS_TOP, $TBS_LEFT))
    $SliderOben = GUICtrlCreateSlider(37, 0, 226, 32, 0)
    $SliderUnten = GUICtrlCreateSlider(37, 230, 226, 34, BitOR($TBS_TOP, $TBS_LEFT))
    $SliderLinks = GUICtrlCreateSlider(15, 17, 34, 226, $TBS_VERT)
    $SliderRechts = GUICtrlCreateSlider(250, 17, 34, 226, BitOR($TBS_VERT, $TBS_TOP, $TBS_LEFT))
    $Input1 = GUICtrlCreateInput("", 4, 400, 184, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Input2 = GUICtrlCreateInput("", 4, 420, 184, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Input3 = GUICtrlCreateInput("", 4, 440, 184, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Input4 = GUICtrlCreateInput("", 220, 400, 50, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Input5 = GUICtrlCreateInput("", 60, 270, 30, 17, BitOR($ES_AUTOHSCROLL, $ES_READONLY, $ES_RIGHT))
    $Input6 = GUICtrlCreateInput("", 60, 325, 30, 17, BitOR($ES_AUTOHSCROLL, $ES_READONLY, $ES_RIGHT))
    $Pixel = GUICtrlCreateUpdown($Input4)
    $Label1 = GUICtrlCreateLabel("Koordinaten:", 5, 380, 64, 17)
    $Label2 = GUICtrlCreateLabel('x - Achse = ', 10, 270, 48, 17)
    $Label3 = GUICtrlCreateLabel('y - Achse = ', 10, 325, 48, 17)
    $hPen = _GDIPlus_PenCreate()
    GUICtrlSetState($Slider1, $GUI_DISABLE)
    GUICtrlSetLimit($Slider1, @DesktopWidth, 0)
    GUICtrlSetData($Slider1, $iX)
    GUICtrlSetState($Slider2, $GUI_DISABLE)
    GUICtrlSetLimit($Slider2, @DesktopHeight, 0)
    GUICtrlSetData($Slider2, $iY)
    GUICtrlSetLimit($SliderOben, 200, 0)
    GUICtrlSetData($SliderOben, 80)
    GUICtrlSetLimit($SliderUnten, 200, 0)
    GUICtrlSetData($SliderUnten, 120)
    GUICtrlSetLimit($SliderLinks, 200, 0)
    GUICtrlSetData($SliderLinks, 80)
    GUICtrlSetLimit($SliderRechts, 200, 0)
    GUICtrlSetData($SliderRechts, 120)
    $SliderObenPos = _GUICtrlSlider_GetPos($SliderOben)
    $SliderUntenPos = _GUICtrlSlider_GetPos($SliderUnten)
    $SliderLinksPos = _GUICtrlSlider_GetPos($SliderLinks)
    $SliderRechtsPos = _GUICtrlSlider_GetPos($SliderRechts)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Beenden")
    GUICtrlSetOnEvent($menuexit, "Beenden")
    GUICtrlSetFont($Label1, 8, 400, 4, "MS Sans Serif")
    GUICtrlSetData($Input4, $PixelDat)
    $hLupe = GUICreate("", ($dist / 2), ($dist / 2), $Pos[0] + ($dist / 8), $Pos[1] + ($dist / 8), $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_STATICEDGE), $hGUI)
    GUICtrlSetBkColor(GUICtrlCreateLabel("", 0, 0, ($dist / 2), ($dist / 2)), 0xFF0000)
    GUICtrlSetBkColor(GUICtrlCreateLabel("", 2, 2, (($dist / 2) - $Border), (($dist / 2) - $Border)), 0xABCDEF)
    GUISetState()
    GUISetState(@SW_SHOW, $hGUI)
    _GDIPlus_Startup()
    _WinAPI_SetLayeredWindowAttributes($hLupe, 0xABCDEF, 255)
    $hWnd_Desktop = _WinAPI_GetDesktopWindow()
    $hDC_Source = _WinAPI_GetDC($hWnd_Desktop)
    $hDC_Dest = _WinAPI_GetDC($hGUI)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    ;Schleife
    While GUIGetMsg(1) <> $GUI_EVENT_CLOSE
    ;Mousposition abfragen
    $Pos = MouseGetPos()
    ; Winposition abfragen
    $aWinPos = WinGetPos($hLupe)
    $iX = $aWinPos[0] ; x
    $iY = $aWinPos[1] ; y
    $iW = $aWinPos[2] ; width
    $iH = $aWinPos[3] ; height
    ;Wenn sich Mausposition ändert
    If $Pos[0] <> $PosOld[0] Or $Pos[1] <> $PosOld[1] Then
    WinMove($hLupe, "", $Pos[0] + ($dist / 8), $Pos[1] + ($dist / 8))
    $PosOld = $Pos
    $countLR = 0
    $countHR = 0
    GUICtrlSetData($Slider1, $iX)
    GUICtrlSetData($Slider2, $iY)
    GUICtrlSetData($Input5, $iX + ($iW / 2))
    GUICtrlSetData($Input6, $iY + ($iH / 2))
    EndIf
    ;Wenn Bewegungstaste gedrückt
    If _IsPressed('25', $dll) And $iX > $Sl1ScaleMin Then ;links gedrückt
    $countLR = $countLR + (-1)
    WinMove($hLupe, "", $iX - $Scale, $iY)
    GUICtrlSetData($Input5, $iX + ($iW / 2))
    GUICtrlSetData($Slider1, $iX)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
    ElseIf _IsPressed('27', $dll) And ($iX + $iW) < $Sl1ScaleMax Then ;rechts gedrückt
    $countLR = $countLR + 1
    WinMove($hLupe, "", $iX + $Scale, $iY)
    GUICtrlSetData($Input5, $iX + ($iW / 2))
    GUICtrlSetData($Slider1, $iX)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
    ElseIf _IsPressed('26', $dll) And $iY > $Sl2ScaleMin Then ;hoch gedrückt
    $countHR = $countHR + (-1)
    WinMove($hLupe, "", $iX, $iY - $Scale)
    GUICtrlSetData($Input6, $iY + ($iH / 2))
    GUICtrlSetData($Slider2, $iY)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
    ElseIf _IsPressed('28', $dll) And ($iY + $iH) < $Sl2ScaleMax Then ;runter gedrückt
    $countHR = $countHR + 1
    WinMove($hLupe, "", $iX, $iY + $Scale)
    GUICtrlSetData($Input6, $iY + ($iH / 2))
    GUICtrlSetData($Slider2, $iY)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
    EndIf
    ;InfoPost
    ToolTip(($aWinPos[0] + ($aWinPos[2] / 2)) & ', ' & ($aWinPos[1] + ($aWinPos[3] / 2)), $iX, $iY + $iH)
    GUICtrlSetData($Input1, 'Maus: x = ' & $Pos[0] & ' , y = ' & $Pos[1])
    GUICtrlSetData($Input2, 'Auswahl: x = ' & $aWinPos[0] & ' , y = ' & $aWinPos[1])
    GUICtrlSetData($Input3, 'Horizontal: ' & $countLR & ' , Vertikal: ' & $countHR)
    ;Pixelgrösse des zu kopierenden Objekts
    $PixelDat = 10
    GUICtrlSetData($Input4, $PixelDat)
    ;Bild speichern
    If _IsPressed('10') Then
    $hBMP = _ScreenCapture_CaptureWnd(@DesktopDir & "\Image.jpg", $hLupe, $iX, $iY, $iX + $iW, $iY + $iH)
    _ScreenCapture_SaveImage(@DesktopDir & "\Image.jpg", $hBMP)
    EndIf
    ;Auswahlslider Slider
    If $SliderLinksPos > $SliderRechtsPos Then
    $Y = $SliderRechtsPos
    $height = $SliderLinksPos - $SliderRechtsPos
    Else
    $Y = $SliderLinksPos
    $height = $SliderRechtsPos - $SliderLinksPos
    EndIf
    If $SliderObenPos > $SliderUntenPos Then
    $X = $SliderUntenPos
    $width = $SliderObenPos - $SliderUntenPos
    Else
    $X = $SliderObenPos
    $width = $SliderUntenPos - $SliderObenPos
    EndIf
    $SliderObenPos = _GUICtrlSlider_GetPos($SliderOben)
    $SliderUntenPos = _GUICtrlSlider_GetPos($SliderUnten)
    $SliderLinksPos = _GUICtrlSlider_GetPos($SliderLinks)
    $SliderRechtsPos = _GUICtrlSlider_GetPos($SliderRechts)
    If $SliderObenPos <> $PosSlOld[0] Or $SliderUntenPos <> $PosSlOld[1] Or $SliderLinksPos <> $PosSlOld[2] Or $SliderRechtsPos <> $PosSlOld[3] Then
    $PosSlOld[0] = $SliderObenPos
    $PosSlOld[1] = $SliderUntenPos
    $PosSlOld[2] = $SliderLinksPos
    $PosSlOld[3] = $SliderRechtsPos
    EndIf
    ; Bild per StretchBlt übertragen
    $Lupe = _WinAPI_StretchBlt( _
    $hDC_Dest, 50, 30, 200, 200, _
    $hDC_Source, $iX, $iY, $iW, $iH, _
    $SRCCOPY)
    _GDIPlus_GraphicsDrawLine($hGraphic, 50, 30 + $SliderLinksPos, 248, 30 + $SliderLinksPos, $hPen); oben
    _GDIPlus_GraphicsDrawLine($hGraphic, 50, 30 + $SliderRechtsPos, 248, 30 + $SliderRechtsPos, $hPen); unten
    _GDIPlus_GraphicsDrawLine($hGraphic, 50 + $SliderObenPos, 30, 50 + $SliderObenPos, 230, $hPen); links
    _GDIPlus_GraphicsDrawLine($hGraphic, 50 + $SliderUntenPos, 30, 50 + $SliderUntenPos, 230, $hPen); rechts
    WEnd
    ;Funktionen
    Func _WinAPI_StretchBlt($hDestDC, $iXDest, $iYDest, $iWidthDest, $iHeightDest, $hSrcDC, $iXSrc, $iYSrc, $iWidthSrc, $iHeightSrc, $iRop)
    ; See _WinAPI_BitBlt
    Local $Ret = DllCall('gdi32.dll', 'int', 'StretchBlt', 'hwnd', $hDestDC, 'int', $iXDest, 'int', $iYDest, 'int', $iWidthDest, 'int', $iHeightDest, 'hwnd', $hSrcDC, 'int', $iXSrc, 'int', $iYSrc, 'int', $iWidthSrc, 'int', $iHeightSrc, 'dword', $iRop)
    If (@error) Or (Not IsArray($Ret)) Then
    Return SetError(1, 0, 0)
    EndIf
    Return 1
    EndFunc ;==>_WinAPI_StretchBlt
    Func Beenden()
    Exit
    EndFunc ;==>Beenden

    [/autoit]

    2 Mal editiert, zuletzt von Morrison (24. Februar 2011 um 18:55)