Problem: Bildschirm-Lupe Script reagiert nach einiger Zeit nicht mehr und hängt sich auf

  • Hallo zusammen,

    ansich bin rein zufällig über AutoIT gestolpert und war nur auf der Suche nach einer Bildschirmlupe die bestimmte Funktionen erfüllen sollte. Durch googlen fand ich das script vom andygo aus dem forum hier, habe mir dann AutoIT geladen und das script mal getestet. Soweit so gut, dieses script mit der Bildschirm-Lupe ist ganz genau das was ich gesucht habe, es erfüllt soweit alle Anforderungen, einziges Problem ist, nach einigen Minuten hängt sich das script auf und reagiert nicht mehr, ich muss es dann über den Task killen.

    Natürlich würde ich nun sehr gerne wissen ob es sich dabei eventuel um ein Problem seitens meines Computers handelt (WIN7) oder ob es vielleicht doch an dem script liegen kann?

    Dies ist der Link zu dem Beitrag hier im Forum, dort ist auch das script zu finden: Bildschirm-Lupe

    Da ich mich bislang gar nicht mit AutoIT auskenne und auch kein Programmier bin, hätte ich die bitte sofern jemand eine ahnung hat woran es liegen kann, eine entsprechende antwort zu verfassen.

    Grüße

    Ergänzung: Was mir inzwischen aufgefallen ist als ich über den win taskmanager mal
    geschaut hab wieviel arbeitsspeicher gneutzt wird ist, das sich der
    bedarf an arbeitsspeicher erhöht bis dies dann auf einmal aufhört und
    dann auch die Lupe nicht mehr funktioniert, das kann ja ansich nicht
    richtig sein, frage ist nur warum das so ist.

    2 Mal editiert, zuletzt von Errious (26. Oktober 2013 um 23:26)

  • Danke für deine Antwort aber ich bin ehrlichgesagt nicht daran interessiert das programmieren von Anwendungen mittels AutoIT zu lernen, sondern in der tat nur an dem einen script und Lösungsvorschlägen zu meinem Problem interessiert, es wäre wirklich toll wenn jemand Ideen hätte die weiterhelfen könnten.

  • Dann benutz doch Lupe von Windows7...ich weiss nicht ob Jemand hier bereit ist für dich nach der Ursache zu suchen warum das Script plötzlich nicht mehr funktioniert.....

  • Die Lupe die Windows bietet hat leider nicht die Funktion wie dieses script und deswegen würde ich es ja liebend gerne nutzen, allerdings komme ich nicht dahinter warum sich der von dem script oder auch der .exe der arbeitsspeicherbedarf ständig erhört bis es dann nach einigen minuten stopt und die lupe nicht mehr funktioniert.

    Evtl. ist es ja nicht zuviel verlangt darum zu bitten das sich jemand das script einmal läd und sich anschaut ob er ähnliches berichten kann oder es bei ihm stabil läuft, dann könnte mann vielleicht schon ausschliessen das es ein autoit problem ist.

  • Das liegt nicht an deinem Windows 7...das Script hat Bugs..

    Wenn du den Thread Bildschirm-Lupe genauer durchliest wirst du erkennen das das Script Bugs hat.

    Innerhalp der Lupe wird unendlich gezoomt bis nichts mehr zusehen ist... somit geht nichts mehr.

    In dem Fall einfach in der Taskleiste auf das Icon des Fensters rechtsklicken und Fentser schliessen

  • Na das ist ja schon mal gut zu wissen das es nicht an meinem win liegt :D

    Das in dem thread beschrieben wird wie das mit unendlich zoom ist hab ich gelesen und wenn ich die freeze funktion aktiviere ist das gar kein problem, das dieses script bugs hat mag sein, das kann ich als nicht programmier natürlich gar nicht beurteilen, geschweige denn wie man diese beheben kann um das script fehlerfrei zum laufen zu bekommen ?(

    Ich gehe nicht davon aus das sich da jemand einfach mal so dran setzt, aber es wäre natürlich toll, ich kann diese Lupe wegen der scheinbar einzigartigen Funktion die sie bietet sehr gut einsetzen, allerdings nicht im momentanen Zustand.

  • ich hab die Bildschirmlupe mal unter der Lupe betrachtet und schnell heraus gefunden, dass die Parameter zum Relasen der DC's falsch rum angegeben worden sind, wodurch der Arbeitsspeicher, welchen diese belegten, nicht wieder freigegeben wurde, aufgrund dessen nach längerer Laufzeit der Arbeitsspeicher voll lief. :wacko:
    Nach diesem wunder schönen Satz hier die korrigierte Version :D

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <winapi.au3>
    Global $leave = 0, $freeze = 0, $schutz = 0, $go = 0, $zf = 1, $stand = 0;$SRCCOPY = 0x00CC0020,

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

    HotKeySet("!a", "freeze")
    HotKeySet("!1", "minus")
    HotKeySet("!2", "plus")
    HotKeySet("!3", "stand")
    Opt("GuiOnEventMode", 1)
    $mainlupe = GUICreate("Andygo's Bildschirmlupe", 516, 274, -1, -1, BitOR($WS_POPUP, $WS_BORDER, $WS_SIZEBOX + $WS_CLIPCHILDREN), $WS_EX_TOPMOST)
    GUISetOnEvent($GUI_EVENT_CLOSE, "leave")
    $MyhWnd = WinGetHandle("Andygo's Bildschirmlupe")
    $fastx = _WinAPI_GetSystemMetrics(78)
    $fasty = _WinAPI_GetSystemMetrics(79)
    $hGuiOpt = GUICreate("Lupe Setup", 292, 129, -1, -1, BitOR($WS_SYSMENU, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), -1, $MyhWnd)
    $btnQuit = GUICtrlCreateButton("Lupe beenden", 127, 82, 145, 25, 0)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $btnOK = GUICtrlCreateButton("OK", 20, 80, 87, 29, 0)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $cbInvert = GUICtrlCreateCheckbox("Negative Farben", 20, 35, 100, 18)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $cbschutz = GUICtrlCreateCheckbox("Selbstschutz", 20, 56, 100, 18)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $Label2 = GUICtrlCreateLabel("freeze: ALT + a" & @CRLF & "fixieren: ALT + 3" & @CRLF & "Zoom: ALT+2 / ALT+1", 150, 40, 120, 43)
    $SliderZoom = GUICtrlCreateSlider(80, 20, 161, 19);, $TBS_AUTOTICKS)
    GUICtrlSetLimit(-1, 10, 1)
    GUICtrlSetData(-1, $zf)
    GUICtrlSetCursor(-1, 13)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $Label1 = GUICtrlCreateLabel("Zoom: x1", 20, 20, 50, 17)
    GUISetState(@SW_DISABLE)
    GUISetState(@SW_HIDE)
    GUISwitch($MyhWnd)
    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SystemEvents")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "SystemEvents")
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "SystemEvents")
    Func stand()
    If $stand = 0 Then
    $stand = 1
    Else
    $stand = 0
    EndIf
    EndFunc ;==>stand
    Func minus()
    If $zf > 1 Then $zf -= 1
    GUICtrlSetData($SliderZoom, $zf)
    GUICtrlSetData($Label1, "Zoom: x" & $zf)
    EndFunc ;==>minus
    Func plus()
    If $zf < 10 Then $zf += 1
    GUICtrlSetData($SliderZoom, $zf)
    GUICtrlSetData($Label1, "Zoom: x" & $zf)
    EndFunc ;==>plus

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

    Func WinToggle($hWin)
    If BitAND(WinGetState($hWin), 6) Then
    GUISetState(@SW_DISABLE, $hWin)
    GUISetState(@SW_HIDE, $hWin)
    Else
    GUISetState(@SW_ENABLE, $hWin)
    GUISetState(@SW_SHOW, $hWin)
    EndIf
    EndFunc ;==>WinToggle
    Func SystemEvents()
    Switch @GUI_CtrlId
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    DllCall("user32.dll", "int", "SendMessage", "hWnd", $MyhWnd, "int", $WM_NCLBUTTONDOWN, "int", $HTCAPTION, "int", 0)
    Case $GUI_EVENT_PRIMARYUP
    ;
    Case $GUI_EVENT_SECONDARYDOWN
    If Not BitAND(WinGetState($hGuiOpt), 2) Then
    $xys = MouseGetPos()
    WinMove($hGuiOpt, "", Min(Max($xys[0] - 50, 0), $fastx - 320), Min(Max($xys[1] - 50, 0), $fasty - 180))
    WinToggle($hGuiOpt)
    EndIf
    EndSwitch
    EndFunc ;==>SystemEvents
    Func OptionsEvents()
    Switch @GUI_CtrlId
    Case $btnOK
    WinToggle(@GUI_WinHandle)
    Case $btnQuit
    Exit
    Case $cbInvert
    $go = BitXOR($go, 1)
    Case $cbschutz
    $schutz = BitXOR($schutz, 1)
    Case $SliderZoom
    $zf = GUICtrlRead($SliderZoom)
    GUICtrlSetData($Label1, "Zoom: x" & $zf)
    EndSwitch
    EndFunc ;==>OptionsEvents
    $xy = MouseGetPos()
    While Not $leave
    Sleep(10)
    If $freeze = 0 Then MAG()
    WEnd

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

    Func freeze()
    If $freeze = 0 Then
    $freeze = 1
    Else
    $freeze = 0
    EndIf
    EndFunc ;==>freeze
    Func Min($n1, $n2)
    If $n1 < $n2 Then Return $n1
    Return $n2
    EndFunc ;==>Min
    Func Max($n1, $n2)
    If $n1 > $n2 Then Return $n1
    Return $n2
    EndFunc ;==>Max

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

    Func MAG()
    $MyHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", $MyhWnd)
    If @error Then Return
    $DeskHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", 0)
    If Not @error Then
    $test = WinGetClientSize($MyhWnd)
    $test2 = WinGetPos($MyhWnd)
    If $stand = 0 Then $xy = MouseGetPos()
    If Not @error Then
    $srcW = $test[0] / $zf
    $srcH = $test[1] / $zf
    $l = Min(Max($xy[0] - $test[0] / (2 * $zf), 0), $fastx - $srcW)
    $t = Min(Max($xy[1] - $test[1] / (2 * $zf), 0), $fasty - $srcH)
    If $schutz = 1 Then
    If $xy[0] < $test2[0] - ($srcW / 2) Or $xy[0] > $test2[0] + $test[0] + ($srcW / 2) Or $xy[1] < $test2[1] - ($srcH / 2) Or $xy[1] > $test2[1] + $test[1] + ($srcH / 2) Then;bedingung lupe verboten
    If $go = 0 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x00CC0020)
    If $go = 1 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x330008)
    EndIf
    Else
    If $go = 0 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x00CC0020)
    If $go = 1 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x330008)
    EndIf
    EndIf
    DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $DeskHDC[0])
    EndIf
    DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $MyhWnd, "handle", $MyHDC[0])
    EndFunc ;==>MAG

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

    Func leave()
    $leave = 1
    EndFunc ;==>leave

    [/autoit]


    mfg Krabat ;)

    Einmal editiert, zuletzt von Krabat (26. Oktober 2013 um 23:01)

  • Hey, das ist spitze, ich danke dir ganz herzlich für die Hilfe !

    Eine wie ich denke Kleinigkeit hätte ich noch, ich möchte gerne die Lupe als schmalen senkrechten Ausschnitt benutzen und kann die breite aber nicht weit genug skallieren, gibt es da noch eine möglichkeit dies schmaler zu machen über den code ?

    Bin auf jeden Fall sehr glücklich mit dem Bug Fix !

  • kein ding^^

    nein, Windows fenster gehen nicht schmaler, das selbe Verhalten kannst du auch bei anderen Programmen sehen wie z.b. Notepad ;)

    PS: habe oben im Code nochmal nen Bug mit dem Invertieren des Bildes gefixt ist ganz lustig :D

  • nein, Windows fenster gehen nicht schmaler, das selbe Verhalten kannst du auch bei anderen Programmen sehen wie z.b. Notepad ;)

    Das stimmt nicht ganz. Ein noch schmaleres Fenster kann man mit einem "echten" Popup ereichen.
    Man muss nur beim Resizen tricksen und die Windows eigene Funktion "von Hand" erstellen.

    So siehts aus:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <SliderConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <winapi.au3>
    Global $leave = 0, $freeze = 0, $schutz = 0, $go = 0, $zf = 1, $stand = 0;$SRCCOPY = 0x00CC0020,
    Global Const $SC_DRAGMOVE = 0xF012
    Global Const $iMargin = 20
    Global Const $iGUIMinX = 50, $iGUIMinY = 50, $iGUIMaxX = @DesktopWidth, $iGUIMaxY = @DesktopHeight

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

    GUIRegisterMsg($WM_MOUSEMOVE, "_SetCursor")
    GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")
    GUIRegisterMsg($WM_GETMINMAXINFO, "_WM_GETMINMAXINFO")

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

    HotKeySet("!a", "freeze")
    HotKeySet("!1", "minus")
    HotKeySet("!2", "plus")
    HotKeySet("!3", "stand")
    Opt("GuiOnEventMode", 1)
    ;$mainlupe = GUICreate("Andygo's Bildschirmlupe", 516, 274, -1, -1, BitOR($WS_POPUP, $WS_BORDER, $WS_SIZEBOX + $WS_CLIPCHILDREN), $WS_EX_TOPMOST)
    $mainlupe = GUICreate("Andygo's Bildschirmlupe", 516, 274, -1, -1, BitOR($WS_DLGFRAME, $WS_POPUP), $WS_EX_TOPMOST);==> $WS_DLGFRAME entfernen für komplett rahmenloses Fenster
    GUISetOnEvent($GUI_EVENT_CLOSE, "leave")
    $MyhWnd = WinGetHandle("Andygo's Bildschirmlupe")
    $fastx = _WinAPI_GetSystemMetrics(78)
    $fasty = _WinAPI_GetSystemMetrics(79)
    $hGuiOpt = GUICreate("Lupe Setup", 292, 129, -1, -1, BitOR($WS_SYSMENU, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), -1, $MyhWnd)
    $btnQuit = GUICtrlCreateButton("Lupe beenden", 127, 82, 145, 25, 0)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $btnOK = GUICtrlCreateButton("OK", 20, 80, 87, 29, 0)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $cbInvert = GUICtrlCreateCheckbox("Negative Farben", 20, 35, 100, 18)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $cbschutz = GUICtrlCreateCheckbox("Selbstschutz", 20, 56, 100, 18)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $Label2 = GUICtrlCreateLabel("freeze: ALT + a" & @CRLF & "fixieren: ALT + 3" & @CRLF & "Zoom: ALT+2 / ALT+1", 150, 40, 120, 43)
    $SliderZoom = GUICtrlCreateSlider(80, 20, 161, 19);, $TBS_AUTOTICKS)
    GUICtrlSetLimit(-1, 10, 1)
    GUICtrlSetData(-1, $zf)
    GUICtrlSetCursor(-1, 13)
    GUICtrlSetOnEvent(-1, "OptionsEvents")
    $Label1 = GUICtrlCreateLabel("Zoom: x1", 20, 20, 50, 17)
    GUISetState(@SW_DISABLE)
    GUISetState(@SW_HIDE)
    GUISwitch($MyhWnd)
    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SystemEvents")
    ;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "SystemEvents")
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "SystemEvents")
    Func stand()
    If $stand = 0 Then
    $stand = 1
    Else
    $stand = 0
    EndIf
    EndFunc ;==>stand
    Func minus()
    If $zf > 1 Then $zf -= 1
    GUICtrlSetData($SliderZoom, $zf)
    GUICtrlSetData($Label1, "Zoom: x" & $zf)
    EndFunc ;==>minus
    Func plus()
    If $zf < 10 Then $zf += 1
    GUICtrlSetData($SliderZoom, $zf)
    GUICtrlSetData($Label1, "Zoom: x" & $zf)
    EndFunc ;==>plus

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

    Func WinToggle($hWin)
    If BitAND(WinGetState($hWin), 6) Then
    GUISetState(@SW_DISABLE, $hWin)
    GUISetState(@SW_HIDE, $hWin)
    Else
    GUISetState(@SW_ENABLE, $hWin)
    GUISetState(@SW_SHOW, $hWin)
    EndIf
    EndFunc ;==>WinToggle
    Func SystemEvents()
    Switch @GUI_CtrlId
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    Beep(2000, 100)
    DllCall("user32.dll", "int", "SendMessage", "hWnd", $MyhWnd, "int", $WM_NCLBUTTONDOWN, "int", $HTCAPTION, "int", 0)
    Case $GUI_EVENT_PRIMARYUP
    ;
    Case $GUI_EVENT_SECONDARYDOWN
    If Not BitAND(WinGetState($hGuiOpt), 2) Then
    $xys = MouseGetPos()
    WinMove($hGuiOpt, "", Min(Max($xys[0] - 50, 0), $fastx - 320), Min(Max($xys[1] - 50, 0), $fasty - 180))
    WinToggle($hGuiOpt)
    EndIf
    EndSwitch
    EndFunc ;==>SystemEvents
    Func OptionsEvents()
    Switch @GUI_CtrlId
    Case $btnOK
    WinToggle(@GUI_WinHandle)
    Case $btnQuit
    Exit
    Case $cbInvert
    $go = BitXOR($go, 1)
    Case $cbschutz
    $schutz = BitXOR($schutz, 1)
    Case $SliderZoom
    $zf = GUICtrlRead($SliderZoom)
    GUICtrlSetData($Label1, "Zoom: x" & $zf)
    EndSwitch
    EndFunc ;==>OptionsEvents
    $xy = MouseGetPos()
    While Not $leave
    Sleep(10)
    If $freeze = 0 Then MAG()
    WEnd

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

    Func freeze()
    If $freeze = 0 Then
    $freeze = 1
    Else
    $freeze = 0
    EndIf
    EndFunc ;==>freeze
    Func Min($n1, $n2)
    If $n1 < $n2 Then Return $n1
    Return $n2
    EndFunc ;==>Min
    Func Max($n1, $n2)
    If $n1 > $n2 Then Return $n1
    Return $n2
    EndFunc ;==>Max

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

    Func MAG()
    $MyHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", $MyhWnd)
    If @error Then Return
    $DeskHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", 0)
    If Not @error Then
    $test = WinGetClientSize($MyhWnd)
    $test2 = WinGetPos($MyhWnd)
    If $stand = 0 Then $xy = MouseGetPos()
    If Not @error Then
    $srcW = $test[0] / $zf
    $srcH = $test[1] / $zf
    $l = Min(Max($xy[0] - $test[0] / (2 * $zf), 0), $fastx - $srcW)
    $t = Min(Max($xy[1] - $test[1] / (2 * $zf), 0), $fasty - $srcH)
    If $schutz = 1 Then
    If $xy[0] < $test2[0] - ($srcW / 2) Or $xy[0] > $test2[0] + $test[0] + ($srcW / 2) Or $xy[1] < $test2[1] - ($srcH / 2) Or $xy[1] > $test2[1] + $test[1] + ($srcH / 2) Then;bedingung lupe verboten
    If $go = 0 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x00CC0020)
    If $go = 1 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x330008)
    EndIf
    Else
    If $go = 0 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x00CC0020)
    If $go = 1 Then DllCall("gdi32.dll", "int", "StretchBlt", "int", $MyHDC[0], "int", 0, "int", 0, "int", $test[0], "int", $test[1], "int", $DeskHDC[0], "int", $l, "int", $t, "int", Int($test[0] / $zf), "int", Int($test[1] / $zf), "long", 0x330008)
    EndIf
    EndIf
    DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $DeskHDC[0])
    EndIf
    DllCall("user32.dll", "int", "ReleaseDC", "hwnd", $MyhWnd, "handle", $MyHDC[0])
    EndFunc ;==>MAG

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

    Func leave()
    $leave = 1
    EndFunc ;==>leave

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

    Func _SetCursor()
    Local $iCursorID
    Switch _Check_Border()
    Case 0
    $iCursorID = 2
    Case 1, 2
    $iCursorID = 13
    Case 3, 6
    $iCursorID = 11
    Case 5, 7
    $iCursorID = 10
    Case 4, 8
    $iCursorID = 12
    EndSwitch
    GUISetCursor($iCursorID, 1)
    EndFunc ;==>_SetCursor

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

    ; Check cursor type and resize/drag window as required
    Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    Local $aPos = WinGetPos($hWnd)
    Local $iCursorType = _Check_Border()
    If $iCursorType > 0 Then ; Cursor is set to resizing style so send appropriate resize message
    $iResizeType = 0xF000 + $iCursorType
    _SendMessage($mainlupe, $WM_SYSCOMMAND, $iResizeType, 0)
    Else
    Local $aCurInfo = GUIGetCursorInfo($mainlupe)
    If $aCurInfo[4] = 0 Then ; Mouse not over a control
    _SendMessage($mainlupe, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    EndIf
    EndIf

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

    EndFunc ;==>_WM_LBUTTONDOWN

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

    ; Determines if mouse cursor over a border
    Func _Check_Border()
    Local $aCurInfo = GUIGetCursorInfo($mainlupe)
    Local $aWinPos = WinGetPos($mainlupe)
    Local $iSide = 0
    Local $iTopBot = 0
    If $aCurInfo[0] < $iMargin Then $iSide = 1
    If $aCurInfo[0] > $aWinPos[2] - $iMargin Then $iSide = 2
    If $aCurInfo[1] < $iMargin Then $iTopBot = 3
    If $aCurInfo[1] > $aWinPos[3] - $iMargin Then $iTopBot = 6
    Return $iSide + $iTopBot
    EndFunc ;==>_Check_Border

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

    ; Set min and max GUI sizes
    Func _WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
    $tMinMaxInfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
    DllStructSetData($tMinMaxInfo, 7, $iGUIMinX)
    DllStructSetData($tMinMaxInfo, 8, $iGUIMinY)
    DllStructSetData($tMinMaxInfo, 9, $iGUIMaxX)
    DllStructSetData($tMinMaxInfo, 10, $iGUIMaxY)
    Return 0
    EndFunc ;==>_WM_GETMINMAXINFO

    [/autoit]


    Sanfte Grüße :D

  • Hallo zusammen,
    auch ich kann die Lupe von andygo gut gebrauchen. Vielen Dank für die Korrekturen!
    Ich versuche gerade zu erreichen, dass mein Mauszeiger auch im Lupenfenster angezeigt wird; leider gelingt mir das nicht.

    Ist wohl jemand so freundlich und gibt mir einen Hinweis?

    Vielen Dank

    RraNDom

    Kleiner Nachtrag: Kann man die "Schutzfunktion" nicht auch einfacher über ein MouseOver (Lupenfenster) realisieren?

    Einmal editiert, zuletzt von rrandom (25. November 2014 um 12:12)