CloneMaus - Zwei funktionierende Mäuse auf dem Desktop - Tastaturgesteuert

  • Dieses Programm erstellt einen zweiten voll funktionsfähigen Cursor auf dem Bildschirm, zusätzlich zum normalen.
    Beide Cursor können natürlich gleichzeitig benutzt werden.
    Der Cursorklon lässt sich per Tastatur steuern:
    ;SPACE + RICHTUNGSTASTE = Bewegen
    ;SPACE + ENTER = Linker Mausklick
    ;SPACE + BACKSPACE = Rechter Mausklick
    ;ESC = Beenden

    Das Skript:

    Spoiler anzeigen
    [autoit]

    #include<GUIConstantsEx.au3>
    #include<WindowsConstants.au3>
    #include<Misc.au3>
    ;CloneMaus by campweb
    ;Eine zweite unabhängige Maus
    ;SPACE + RICHTUNGSTASTE = Bewegen
    ;SPACE + ENTER = Linker Mausklick
    ;SPACE + BACKSPACE = Rechter Mausklick
    ;ESC = Beenden
    Opt('TrayAutoPause', 0)
    TraySetClick(8)
    $crosscolor = 0xFF0000
    $maus = True
    $mausX = 0
    $mausY = 0
    $mausSpeed = 5
    #region - GUI Create
    Global $gui = GUICreate('MouseCross',20,20,$mausX,$mausY,$WS_POPUP,$WS_EX_TOOLWINDOW+$WS_EX_LAYERED+$WS_EX_TRANSPARENT+$WS_EX_TOPMOST)
    $transcol = 0xABCDEF
    If $crosscolor = $transcol Then $transcol = 0xFBCDEF
    GUISetBkColor($transcol)
    GUICtrlCreateIcon("shell32.dll", -295, 0, 0, 20, 20)
    GUISetState()
    #endregion
    _API_SetLayeredWindowAttributes($gui,$transcol)
    WinMinimizeAll()
    #region - GUI SelectLoop
    While 1
    WinMove($gui,"",$mausX,$mausY)
    If $maus = True Then
    If _IsPressed("20") and _IsPressed("25") and $mausX > 0 Then
    $mausX = $mausX - $mausSpeed
    WinMove($gui,"",$mausX,$mausY)
    EndIf
    If _IsPressed("20") and _IsPressed("27") and $mausX < @DesktopWidth - 20 Then
    $mausX = $mausX + $mausSpeed
    WinMove($gui,"",$mausX,$mausY)
    EndIf
    If _IsPressed("20") and _IsPressed("28") and $mausY < @DesktopHeight - 20 Then
    $mausY = $mausY + $mausSpeed
    WinMove($gui,"",$mausX,$mausY)
    EndIf
    If _IsPressed("20") and _IsPressed("26") and $mausY > 0 Then
    $mausY = $mausY - $mausSpeed
    WinMove($gui,"",$mausX,$mausY)
    EndIf
    If _IsPressed("20") And _IsPressed("0D") Then
    $cMausX = MouseGetPos(0)
    $cMausY = MouseGetPos(1)
    MouseMove($mausX,$mausY, 1)
    MouseClick("left")
    MouseMove($cMausX,$cMausY, 1)
    ConsoleWrite("Action: Virtual Left Mouse Click"&@CRLF)
    EndIf
    If _IsPressed("20") And _IsPressed("08") Then
    $cMausX = MouseGetPos(0)
    $cMausY = MouseGetPos(1)
    MouseMove($mausX,$mausY, 1)
    MouseClick("right")
    MouseMove($cMausX,$cMausY, 1)
    ConsoleWrite("Action: Virtual Right Mouse Click"&@CRLF)
    EndIf
    If _IsPressed("1B") Then
    Exit
    EndIf
    Sleep(10)
    Else
    WinMove($gui,"",0,0)
    EndIf
    WinSetOnTop($gui,"",1)
    WEnd
    #endregion

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

    Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)

    Local Const $AC_SRC_ALPHA = 1
    Local Const $ULW_ALPHA = 2
    Local Const $LWA_ALPHA = 0x2
    Local Const $LWA_COLORKEY = 0x1
    If Not $isColorRef Then
    $i_transcolor = Hex(String($i_transcolor), 6)
    $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
    Select
    Case @error
    Return SetError(@error,0,0)
    Case $ret[0] = 0
    Return SetError(4,0,0)
    Case Else
    Return 1
    EndSelect
    EndFunc ;==>_API_SetLayeredWindowAttributes

    [/autoit]

    MfG, campweb

    3 Mal editiert, zuletzt von campweb (22. Juli 2011 um 21:05)

  • Jop, rechter Mausklick fehlt auch noch, aber das kommt noch...

    Das ist genial :D :

    Zitat

    wenn man die Maus mit ESC beenden könnte

    MfG, campweb

  • Hi,

    lustige und sinnfreie Idee :thumbup: , leider gefällt mir die Umsetzung nicht so gut.
    Man sieht, dass die 2. Maus ein leicht verpixeltes vermutlich selbstgemachtes Bild ist - du könntest doch einfach eine Maus aus dem Windows-Ordner laden - dann wäre vielleicht ja auch gleich die Transparenz gewahrt, denn man sieht bei dem Bild, dass um die Maus ein weißes Rechteck ist - besonders auf andersfarbigen Hintergründen sieht das nicht gut aus. (Png statt Bmp?)

    Die 2. Maus löst keine Hover-Effekte aus - vielleicht lässt sich da ja noch was machen ;)

    Wenn die 2. Maus sich außerhalb des Bildschirms befindet und ich dann klicke, verschieben sich beide Mäuse so, dass sie wieder beide im Bildschirm sind - das macht Klicks am Bildschirmrand nur schwer möglich.

    Super wäre es, wenn sich der Abstand von erster und zweiter Maus noch verändern lassen würde.

    Da lässt sich bestimmt noch was draus machen :)

  • Jop, alles bald gemacht. Hab bloß grad keine Lust da noch weiter zu arbeiten. Morgen vielleicht.

    MfG, campweb

  • du sollstest die maus transperent machen, da man so immer so einen weißen kasten hast
    aber nette idee
    mann könnte die maus auch über die pfeiltasten steuern und unabhängig von der echten machen
    aber sehr amüsante idee =) sehr schön

  • Jetzt ist der Cursor unabhängig udn alles, bis aufs Hovern, funktioniert.

    MfG, campweb

  • So jetzt ist der Cursor transparent, und wird aus der Shell32.dll geladen ;)

    MfG, campweb

  • Das mit Paint war so gemeint, dass man, wenn man versucht mit der zweiten Maus einen durchgehenden Pnselstrich zumalen, durch ide ruckelige Autoit-Berechnung interessante Muster erhält.

    MfG, campweb