Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Mouse Jiggler?

Forumthread: VBA Mouse Jiggler?

VBA Mouse Jiggler?
12.04.2021 07:51:51
Klaus
Hallo,
ich habe bereits ein Makro von Nepumuk, mit dem ich Mausclicks ausführen kann. Jetzt möchte ich aber nicht clicken, sondern die Maus nur bewegen. Also wenn WhereAmI ergibt 100,50 möchte ich die Maus 4 Pixel hin- und zurück bewegen lassen (100-104,50 und 104-100,50) ohne zu clicken. Wie geht das?
Hintergrund: Ich habe keinen Zugriff auf die Energiesparkonfiguration meines PC's. Ich arbeite mit zwei PC's gleichzeitig, der zweite lädt passiv alle 5 Minuten Daten aus einer ACCDB und zeigt diese auf einem großem Monitor an - mein Dashboard. Hier möchte ich verhindern, dass ich alle 15 Minuten neu anmelden muss.
Ja, ich könnte die IT fragen. Die ist aber etwas .... schwerfällig :-) Darum frage ich lieber euch.
Andere Kollegen haben sich für ähnliche Zwecke einen USB Mouse Jiggler zugelegt, das möchte ich nicht.
LG,
Klaus
Option Explicit
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
Private Declare PtrSafe Sub mouse_event Lib "user32.dll" ( _
ByVal dwFlags As Long, _
ByVal dx As Long, _
ByVal dy As Long, _
ByVal cButtons As Long, _
ByVal dwExtraInfo As LongPtr)
Private Declare PtrSafe Function SetCursorPos Lib "user32.dll" ( _
ByVal x As Long, _
ByVal y As Long) As Long
Private Const MOUSEEVENT_LEFTDOWN As Long = &H2
Private Const MOUSEEVENT_LEFTUP As Long = &H4
Public Sub Test()
Call MouseClick(102, 19)
End Sub
Private Sub MouseClick(ByVal pvlngXPos As Long, ByVal pvlngYPos As Long)
Call SetCursorPos(pvlngXPos, pvlngYPos)
Call mouse_event(MOUSEEVENT_LEFTDOWN, 0&, 0&, 0&, 0)
Call mouse_event(MOUSEEVENT_LEFTUP, 0&, 0&, 0&, 0)
End Sub
Sub WhereAmI()
Dim pTargetPoint As POINTAPI
Dim lRetVal As Long
lRetVal = GetCursorPos(pTargetPoint)
MsgBox "Meine Position:" & vbLf & _
pTargetPoint.x & "," & pTargetPoint.y
End Sub

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Mouse Jiggler?
12.04.2021 10:29:22
ChrisL
Hi
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare PtrSafe Function SetCursorPos Lib "user32.dll" ( _
ByVal x As Long, _
ByVal y As Long) As Long
Sub MyMove()
Dim pTargetPoint As POINTAPI
Dim lRetVal As Long
lRetVal = GetCursorPos(pTargetPoint)
Call SetCursorPos(pTargetPoint.x, pTargetPoint.y + 4)
Call SetCursorPos(pTargetPoint.x, pTargetPoint.y - 4)
End Sub
cu
Chris
Anzeige
AW: VBA Mouse Jiggler?
12.04.2021 12:03:56
Klaus
Hallo Chris,
vielen Dank - es funktioniert. D.H. getestet habe ich dass er tatsächlich die Maus bewegt, habe daran aber auch nicht gezweifelt.
Hinten noch ein "Application.Ontime now+"00:00:30" dran gebastelt und jetzt lasse ich es erstmal laufen. Wenn mein Screensaver doch angeht melde ich mich nochmal :-) Wenn nicht hat alles geklappt wie vorgestellt!
LG,
Klaus M.
Anzeige
Schade ...
12.04.2021 12:26:23
Klaus
... der Jiggler funktioniert, aber der PC geht trotzdem auf Standby.
Hat noch jemand eine Idee, für die es keine Adminrechte, keine Drittprogramme und keine USB-Tools braucht?
LG,
Klaus M.
AW: Kein Programm, aber eine Ente?
12.04.2021 13:05:54
EtoPHG
Vielleicht ein Schluckspecht über der Tastatur?
;-) Hansueli
Anzeige
AW: Kein Programm, aber eine Ente?
12.04.2021 13:08:13
Klaus
Hansueli,
da gab es doch die eine Simpsons-Folge, in der Homer Home Office macht und seine ganze Arbeit an einen solchen Vogel auslagert? :-)
"Tastatur" ist aber der richtige Hinweis, dies hier funktioniert:
Sub MyMove()
Application.SendKeys ("{DOWN}")
Application.SendKeys ("{UP}")
Application.OnTime Now + TimeValue("00:00:13"), "MyMove"
End Sub
Ist zwar nicht ganz so elegant wie die 4-Pixel Maus hin und her, aber an dem PC läuft NIE etwas anderes als mein Dashboard insofern wird das "runter hoch" auch nie mit anderen Programmen in Konflikt kommen.
LG,
Klaus M.
Anzeige
AW: Kein Programm, aber eine Ente?
12.04.2021 13:28:29
ChrisL
AW: Kein Programm, aber eine Ente?
15.04.2021 09:19:13
MRUTOR
Hallo nochmals Klaus,
da ich auch nach einer solchen Moeglichkeit gesucht habe, bin ich nach laengerer Suche auf einen Beitrag aus 2009 gestossen. Dort wurde ein Code von Nepumuk benutzt fuer die Mausbewegung. Ich habe das mal probiert und bei mir funktioniert es. Der Bildschirmschoner schaltet sich nicht ein. Vielleicht hilft es dir auch, um das laestige SendKeys zu vermeiden. Hier der Code:
Option Explicit
Private Declare PtrSafe Function SetCursorPos Lib "user32.dll" (ByVal x As Long, ByVal y As  _
Long) As Long
Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As  _
Long
Private Declare PtrSafe Sub mouse_event Lib "user32.dll" (ByVal dwFlags As Long, ByVal dx As  _
Long, ByVal dwdata As Long, ByVal dwExtraInfo As Long)
Private Type POINTAPI
x As Long
y As Long
End Type
Private Const MOUSEEVENT_LEFTDOWN = &H2
Private Const MOUSEEVENT_LEFTUP = &H4
Public gblnStop As Boolean
Public Sub Block_Screensaver()
Dim udtPositon As POINTAPI
If Not gblnStop Then
Call GetCursorPos(udtPositon)
Call SetCursorPos(30&, 10&)
Call mouse_event(MOUSEEVENT_LEFTDOWN, 0&, 0&, 0&)
Call mouse_event(MOUSEEVENT_LEFTUP, 0&, 0&, 0&)
Call SetCursorPos(udtPositon.x, udtPositon.y)
Application.OnTime Time + TimeSerial(0, 10, 0), "Block_Screensaver"
End If
End Sub

Gruss Tor
Anzeige
AW: Kein Programm, aber eine Ente?
15.04.2021 14:10:21
EtoPHG
Hallo Tor,
Das mag auf einfachen privaten PC's funktionieren. Für FirmenPC's gelten oft andere Settings. Meiner z.B. geht automatisch in Energiespar-+Windows-Lock-Modus falls keine Cursorbewegungen innerhalb einer definierten Zeit stattgefunden haben, auch wenn im Hintergrund noch Prozesse (weiter) werkeln.
Darum würde Nepumuks Code bei meinem auch nicht funktionieren.
Gruess Hansueli
Anzeige
AW: Kein Programm, aber eine Ente?
15.04.2021 14:16:26
Klaus
Hallo Tor und Hansueli,
versuch macht klug :-)
Ich probiers aus und melde mich.
LG,
Klaus M.
;
Anzeige

Infobox / Tutorial

VBA Mouse Jiggler für Excel


Schritt-für-Schritt-Anleitung

Um die Maus automatisch zu bewegen und so den Bildschirmschoner zu verhindern, kannst du ein einfaches VBA-Makro verwenden. Folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".
  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
       x As Long
       y As Long
    End Type
    Private Declare PtrSafe Function SetCursorPos Lib "user32.dll" ( _
       ByVal x As Long, _
       ByVal y As Long) As Long
    Public Sub MouseJiggler()
       Dim pPosition As POINTAPI
       Call GetCursorPos(pPosition)
       Call SetCursorPos(pPosition.x + 4, pPosition.y) ' Maus 4 Pixel nach rechts bewegen
       Call SetCursorPos(pPosition.x - 4, pPosition.y) ' Maus 4 Pixel nach links bewegen
       Application.OnTime Now + TimeValue("00:00:30"), "MouseJiggler" ' Alle 30 Sekunden wiederholen
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Starte das Makro:

    • Drücke ALT + F8, wähle MouseJiggler aus und klicke auf "Ausführen".

Dieses Makro bewegt die Maus automatisch hin und her, um den Bildschirmschoner zu verhindern.


Häufige Fehler und Lösungen

  • Fehler: Die Maus bewegt sich nicht
    Lösung: Stelle sicher, dass das Makro nicht durch Sicherheitseinstellungen in Excel blockiert wird. Aktiviere die Makros unter Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Einstellungen für Makros.

  • Fehler: Bildschirmschoner aktiviert sich trotzdem
    Lösung: Prüfe die Zeitintervalle im Application.OnTime Befehl. Möglicherweise ist das Intervall zu lang. Reduziere es auf 10 Sekunden oder weniger.


Alternative Methoden

Wenn das VBA-Makro nicht funktioniert oder du eine andere Methode ausprobieren möchtest, kannst du folgende Alternativen in Betracht ziehen:

  1. SendKeys-Methode: Diese Methode simuliert Tasteneingaben, um die Maus zu bewegen:

    Sub SendKeysJiggler()
       Application.SendKeys "{DOWN}"
       Application.SendKeys "{UP}"
       Application.OnTime Now + TimeValue("00:00:10"), "SendKeysJiggler"
    End Sub
  2. USB Mouse Jiggler: Eine Hardware-Lösung, die die Mausbewegung simuliert, jedoch oft nicht bevorzugt wird.


Praktische Beispiele

Hier sind einige Anwendungsszenarien für das Mouse Jiggler Makro:

  • Home Office: Wenn du im Home Office arbeitest und der Bildschirmschoner sich häufig aktiviert, kannst du das Makro im Hintergrund laufen lassen.
  • Präsentationen: Verwende das Makro, wenn du eine Präsentation hältst, um zu verhindern, dass der Bildschirm in den Energiesparmodus wechselt.

Tipps für Profis

  • Optimierung der Mausbewegung: Du kannst die Pixelanzahl im Makro anpassen, um die Bewegung subtiler oder auffälliger zu gestalten.
  • Energieverwaltung: Berücksichtige die Energieeinstellungen deines PCs, um optimale Ergebnisse zu erzielen. Manchmal ist es notwendig, die Energiesparoptionen manuell anzupassen.
  • Testen von verschiedenen Intervallen: Experimentiere mit unterschiedlichen Zeitintervallen im Application.OnTime Befehl, um die beste Lösung für deine Arbeitsweise zu finden.

FAQ: Häufige Fragen

1. Sind Mouse Jiggler nachweisbar?
Ja, die Verwendung eines Mouse Jiggler, besonders in einer Unternehmensumgebung, kann möglicherweise nachverfolgt werden. Es ist ratsam, dies mit der IT-Abteilung abzusprechen.

2. Kann ich das Makro für andere Anwendungen verwenden?
Ja, das Makro kann in jeder Excel-Datei verwendet werden. Es ist jedoch speziell für die Verhinderung des Bildschirmschoners entwickelt worden.

3. Ist die Verwendung eines VBA Mouse Jiggler sicher?
Ja, solange du sicherstellst, dass es in Übereinstimmung mit den IT-Richtlinien deines Unternehmens ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige