Fadenkreuz dauerhaft erhalten

  • Hi,

    Ich habe mal wieder ein Frage:
    Wie kann ich ein Fadenkreuz dauerhaft mit autoit in den Vordergrund stellen (Funktion : Winapi Create Pen - da steht das Skript)
    Also so das es dann aussieht als ob es auf dem Desktop draufgemalt wäre :D
    Das wäre dann das Fadenkreuz...:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    ShowCross(@DesktopWidth / 2, @DesktopHeight / 2, 20, 2, 0xFF, 3000)
    Func ShowCross($start_x, $start_y, $length, $width, $color, $time)

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

    Local $hDC, $hPen, $obj_orig

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

    $hDC = _WinAPI_GetWindowDC(0) ; DC of entire screen (desktop)
    $hPen = _WinAPI_CreatePen($PS_SOLID, $width, $color)
    $obj_orig = _WinAPI_SelectObject($hDC, $hPen)

    _WinAPI_DrawLine($hDC, $start_x - $length, $start_y, $start_x - 5, $start_y) ; horizontal left
    _WinAPI_DrawLine($hDC, $start_x + $length, $start_y, $start_x + 5, $start_y) ; horizontal right
    _WinAPI_DrawLine($hDC, $start_x, $start_y - $length, $start_x, $start_y - 5) ; vertical up
    ; _WinAPI_DrawLine($hDC, $start_x, $start_y + $length, $start_x, $start_y + 5) ; vertical down
    _WinAPI_MoveTo($hDC, $start_x, $start_y + $length)
    _WinAPI_LineTo($hDC, $start_x, $start_y + 5)

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

    Sleep($time) ; show cross over screen for defined seconds

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

    ; refresh desktop (clear cross)
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)

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

    ; clear resources
    _WinAPI_SelectObject($hDC, $obj_orig)
    _WinAPI_DeleteObject($hPen)
    _WinAPI_ReleaseDC(0, $hDC)

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

    EndFunc ;==>ShowCross

    [/autoit]


    Und bevor: Noch eine Frage: Zählt das eig. jetzt auch als Bot!?!? -.- ... falls ja bitte mir bescheit sagen....
    Habe erst soeben von FunH@cker erfahren was hier im Forum als Bot überhaupt gilt :D - zumindestens mehr oder weniger :) (Wie ich schon oft erwähnt habe : Ich bin ein bisschen schwer von Begriff :D)

    mfg MasterRobb

    Lächel, du kannst sie nicht alle töten.

    2 Mal editiert, zuletzt von masterRobb (24. Juli 2009 um 15:22)

  • sowas haben schon einige versucht, aber was ich weis is das immer nur so lange gegangen bis ein Programm im Vollbild geöffnet wurde, das hat sich dann immer darüber gelegt, und das Fadenkreuz war nicht mer sichtbar, kannst aber mal mit der sufu danach suchen.

    Und: Nein das ist kein Bot

    Computers are like Airconditioning. They don´t work with open Windows.

  • Was ich weis liegt das prob an autoit, daher kann man da eig nix machen, also glaub nict das das mal irgendwer schaffen sollte. Aber vllt mal mit ner neuen version von autoit od so. Aber derezit is dasa leider nicht möglich

    Computers are like Airconditioning. They don´t work with open Windows.

  • wiso soll es mit autoit nicht funktionieren ? an was liegt es den beim autoit :|

  • An was genau weis ich auch nciht, jedenfalls ist es nicht mehr im vordergrund wenn man irgendein programm als vollbild öffnet

    Computers are like Airconditioning. They don´t work with open Windows.

    • Offizieller Beitrag

    Was ich weis liegt das prob an autoit, daher kann man da eig nix machen, also glaub nict das das mal irgendwer schaffen sollte. Aber vllt mal mit ner neuen version von autoit od so. Aber derezit is dasa leider nicht möglich


    Man, was seit ihr negativ. :D
    Ein bischen Überlegen und dann fällt einem auch der richtige Weg ein:

    Spoiler anzeigen
    [autoit]

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

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

    Global $hDC, $hPen, $obj_orig
    Global $active, $lastActive = 0
    HotKeySet("!e", '_ende')

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

    AdlibEnable('_SetCrossToActive')

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

    While 1
    Sleep(100)
    WEnd

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

    Func _SetCrossToActive()
    $active = WinGetHandle('[ACTIVE]')
    If $lastActive = $active Then Return
    $lastActive = $active
    $hDC = _WinAPI_GetWindowDC($active)
    ShowCross($hDC, @DesktopWidth / 2, @DesktopHeight / 2, 20, 2, 0xFF)
    EndFunc

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

    Func ShowCross($hDC, $start_x, $start_y, $length, $width, $color)
    $hPen = _WinAPI_CreatePen($PS_SOLID, $width, $color)
    $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
    _WinAPI_DrawLine($hDC, $start_x - $length, $start_y, $start_x - 5, $start_y) ; horizontal left
    _WinAPI_DrawLine($hDC, $start_x + $length, $start_y, $start_x + 5, $start_y) ; horizontal right
    _WinAPI_DrawLine($hDC, $start_x, $start_y - $length, $start_x, $start_y - 5) ; vertical up
    ; _WinAPI_DrawLine($hDC, $start_x, $start_y + $length, $start_x, $start_y + 5) ; vertical down
    _WinAPI_MoveTo($hDC, $start_x, $start_y + $length)
    _WinAPI_LineTo($hDC, $start_x, $start_y + 5)
    EndFunc ;==>ShowCross

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

    Func _ende()
    AdlibDisable()
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, BitOR($RDW_INVALIDATE,$RDW_ALLCHILDREN))
    _WinAPI_SelectObject($hDC, $obj_orig)
    _WinAPI_DeleteObject($hPen)
    _WinAPI_ReleaseDC(0, $hDC)
    Exit
    EndFunc

    [/autoit]
  • Ok, da sieht man mal weider das für Bugfix nichts unmöglich ist xD

    Ich hätte das sicher nicht so in gebracht

    Computers are like Airconditioning. They don´t work with open Windows.

  • okay ich finde das schonmal nicht schlecht... aber bei mir funktioniert das nicht ganz... also es kommt nicht in den Vordergrund....
    Wenn ich z.B. Firefox an habe ist es nichtmehr da...
    Habe ich jetzt was falsch gemacht?... oder woran liegt das jetzt genau? :D
    Ich bin leider kein Genie wie ihr -.-

    ... - Na ja zumnindest klappt es bei mir iwie nicht immer xD^^

    Lächel, du kannst sie nicht alle töten.

  • So wir haben 21.01.2012 jetzt sollte es doch möglich sein :)
    Sowas habe ich schon lange gesucht :D^^..
    Hoffe auf hilfe.

    mfg g..

  • Das Skript von BugFix läuft man muss nur die Adlibfunktionen auf die neuen umstellen. Wenn man dann noch zusätzlich 1 Zeile auskommentiert und eine bereits vorhandene an eine 2. Stelle kopiert, läuft es auch bei Vollbildanwendungen, die Scrollbalken haben ohne dass das Fadenkreuz durch Scrollen mehrfach erscheint

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

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

    Global $hDC, $hPen, $obj_orig
    Global $active, $lastActive = 0
    HotKeySet("!e", '_ende')

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

    AdlibRegister('_SetCrossToActive',500)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _SetCrossToActive()
    $active = WinGetHandle('[ACTIVE]')
    ;If $lastActive = $active Then Return
    ;$lastActive = $active
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, BitOR($RDW_INVALIDATE,$RDW_ALLCHILDREN))
    $hDC = _WinAPI_GetWindowDC($active)
    ShowCross($hDC, @DesktopWidth / 2, @DesktopHeight / 2, 20, 2, 0xFF)
    EndFunc

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

    Func ShowCross($hDC, $start_x, $start_y, $length, $width, $color)
    $hPen = _WinAPI_CreatePen($PS_SOLID, $width, $color)
    $obj_orig = _WinAPI_SelectObject($hDC, $hPen)
    _WinAPI_DrawLine($hDC, $start_x - $length, $start_y, $start_x - 5, $start_y) ; horizontal left
    _WinAPI_DrawLine($hDC, $start_x + $length, $start_y, $start_x + 5, $start_y) ; horizontal right
    _WinAPI_DrawLine($hDC, $start_x, $start_y - $length, $start_x, $start_y - 5) ; vertical up
    ; _WinAPI_DrawLine($hDC, $start_x, $start_y + $length, $start_x, $start_y + 5) ; vertical down
    _WinAPI_MoveTo($hDC, $start_x, $start_y + $length)
    _WinAPI_LineTo($hDC, $start_x, $start_y + 5)
    EndFunc ;==>ShowCross

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

    Func _ende()
    AdlibUnRegister('_SetCrossToActive')
    _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, BitOR($RDW_INVALIDATE,$RDW_ALLCHILDREN))
    _WinAPI_SelectObject($hDC, $obj_orig)
    _WinAPI_DeleteObject($hPen)
    _WinAPI_ReleaseDC(0, $hDC)
    Exit
    EndFunc

    [/autoit]

    mfg autoBert

  • Funktioniert das auch für Fenster Modus Anwendungen ?


    Es funktiniert für alle Anwendungen die WinApi-Routinen nutzen und nicht selbstständig an Windws vorbei direkt die Grafikkarte ansprechen. Für Spiele ist es also eher nicht geeignet,

    mfg autoBert

  • Genau das wollte ich in Spiele verwenden :(....als ziel Hilfe schade...
    aber es muss doch irgend wie möglich sein

    mfg g