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
#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)
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
$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)
;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
Auswahl:
Spoiler anzeigen
#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()
_GDIPlus_Startup()
$hPen = _GDIPlus_PenCreate()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
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
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
Func Beenden()
Exit
EndFunc ;==>Beenden