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

Sendkeys-Befehl für rechte Maustaste

Forumthread: Sendkeys-Befehl für rechte Maustaste

Sendkeys-Befehl für rechte Maustaste
20.03.2008 16:25:00
Marek
Hallo zusammen,
kann man via Sendkeys die rechte Maustaste/das Kontextmenu eingeben?
Das wäre sehr hilfreich.
Vielen Dank im Voraus!
MfG
Marek

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sendkeys-Befehl für rechte Maustaste
20.03.2008 16:29:17
Rudi
Hallo,
verstehe ich nicht.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: Sendkeys-Befehl für rechte Maustaste
20.03.2008 16:31:39
Marek
ich möchte über sendkeys in einem externen programm das kontextmenu aktivieren.
ist das möglich?
gruß
Marek

AW: Sendkeys-Befehl für rechte Maustaste
20.03.2008 16:39:35
Rudi
Hallo,
der Rechtsklick ist kein sendbarer Tastenanschlag.
Alle sendbaren Tasten findest du in der Hilfe.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Sendkeys-Befehl für rechte Maustaste
20.03.2008 19:16:00
Herbert
Hi,
das geht mit Bordmitteln nicht, dazu sind Windows-API erforderlich.
mfg Herbert

AW: Sendkeys-Befehl für rechte Maustaste
20.03.2008 19:38:25
Volti
Hallo Marek,
wie meine Vorgänger schon sagten, geht das nicht mit einfachen Mitteln und schon gar nicht mit Sendkey.
Die rechte Maustaste ist ja auch kein Key.
Tastenanschläge und Maussimulationen lassen sich einfach mit den API-Funktionen mouse_event und keybd_event realisieren.
Hier ein Beispiel für den mouse_event:

Private Const MOUSEEVENTF_MOVE = &H1        ' mouse move
Private Const MOUSEEVENTF_LEFTDOWN = &H2    ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4      ' left button up
Private Const MOUSEEVENTF_RIGHTDOWN = &H8   ' right button down
Private Const MOUSEEVENTF_RIGHTUP = &H10    ' right button up
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down
Private Const MOUSEEVENTF_MIDDLEUP = &H40   ' middle button up
Private Const MOUSEEVENTF_WHEEL = &H800     ' wheel button rolled
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move
Declare 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 Long)
Sub Mouseevent()
'Rechtsklick an Position xPos,yPos
Dim xPos As Integer, yPos As Integer
xPos=100 : yPos=150
mouse_event MOUSEEVENTF_RIGHTDOWN, xPos, yPos, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, xPos, yPos, 0, 0
End Sub


Bei dieser Methode kannst Du den Rechtsklick jedoch nicht "senden", sondern nur an der betreffenden Position auf dem darunterliegenden Foregroundwindow ausführen.
Das bedeutet, um in anderen Fenstern Mausaktionen per mouse_event durchzuführen, müsstet Du die zuerst aktivieren, sozusagen den Focus geben.
PS:Die weitere Möglichkeit über Mouse-Messages lassich hier mal außen vor. Das ist nicht so einfach.
viele Grüße aus Hessen
Karl-Heinz

Anzeige
AW: Sendkeys-Befehl für rechte Maustaste
20.03.2008 19:54:00
Volti
Hi,
hier noch mal verbessert.

Private Const MOUSEEVENTF_MOVE = &H1        ' mouse move
Private Const MOUSEEVENTF_LEFTDOWN = &H2    ' left btn down
Private Const MOUSEEVENTF_LEFTUP = &H4      ' left btn up
Private Const MOUSEEVENTF_RIGHTDOWN = &H8   ' right btn down
Private Const MOUSEEVENTF_RIGHTUP = &H10    ' right btn up
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' mid btn dn
Private Const MOUSEEVENTF_MIDDLEUP = &H40   ' middle btn up
Private Const MOUSEEVENTF_WHEEL = &H800     ' wheel btn
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 ' move
Private Declare Function SetCursorPos Lib "user32" (ByVal _
X As Long, ByVal Y As Long) As Long
Private Declare 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 Long)
Sub Mouseevent()
'Rechtsklick an Position Posi
Dim xPos As Integer, yPos As Integer
xPos = 300: yPos = 300
SetCursorPos xPos, yPos
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End Sub


Gruß KH

Anzeige
AW: Sendkeys-Befehl für rechte Maustaste
20.03.2008 23:30:44
Herbert
Hi,
MouseEventEx ist angesagt, mouse_event ist lange out!
mfg Herbert

AW: Sendkeys-Befehl für rechte Maustaste
21.03.2008 10:04:00
Nepumuk
Hallo Herbert,
da wäre ich dir wirklich dankbar, wenn du mir verräts, wie ich eine C++ Klasse in VB einsetzen kann.
@ Volti,
du musst das nicht in zwei Befehle auftrennen. Das geht auch so:
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
Gruß
Nepumuk

Anzeige
AW: Sendkeys-Befehl für rechte Maustaste
21.03.2008 10:25:00
Volti
Hallo,
@Herbert:
Danke für den Hinweis. Aber ich wollte schon fragen, welchen Mehrwert diese Function bringen soll. Natürlich habe ich gerade nach der neuen Funktion geguckt( wollen ja auf dem neuesten Stand sein), werde aber weder bei MS noch bei den Declares meiner Hauptprogrammiersprache fündig, und die sind meistens auf dem neuesten Stand.
Meine vorgeschlagene Version funktioniert auf jeden Fall immer noch bestens in meinen Anwendungen.
@Nepumuk:
Danke für den Tipp. Den werde ich bei künftigen Projekten berücksichtigen.
Aber im Zuge meiner Recherche zu Herberts Vorschlag bin ich auf

sendinput

gestoßen, der bei MS gegenüber

mouse_event

empfohlen wird.
Dafür habe ich auch passende Declares gefunden.
Habe Artikel dazu noch nicht weiter durchgelesen.
Weißt Du da auch was darüber? Bringt ein Wechsel was?
viel Grüße
KH

Anzeige
AW: Sendkeys-Befehl für rechte Maustaste
25.03.2008 07:15:00
Marek
Guten Morgen zusammen,
hoffe ihr hatte schöne Feiertage!
Vielen Dank für die Hinweise, werde mich sobald wie möglich damit auseinandersetzen. Rückmeldung folgt dann.
Gruß
Marek!

AW: Sendkeys-Befehl für rechte Maustaste
25.03.2008 11:37:47
Marek
Frage noch offen, will keinen neuen Thread öffnen.

AW: Sendkeys-Befehl für rechte Maustaste
25.03.2008 09:36:00
Marek
Hallo KH,
mit der Maustaste bin ich weitergekommen, Danke!
Anschließend soll über Sendkeys eine Auswahl getroffen werden, was auch klappt. Der letzte Schritt soll einen Kopiervorgang starten, der normalerweise mit "Enter" ausgelöst wird. Mit sendkeys stürzt das Programm leider ab. Woran kann das liegen?
Wenn ich das Makro einen Schritt vor dem "Enter" stoppe und dann manuell "Enter" betätige, funktioniert der Vorgang. Der kopierte Inhalt sollte in der Zwischenablage landen, um anschließend in Excel eingefügt zu werden.
MfG
Marek
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Sendkeys-Befehl für die rechte Maustaste


Schritt-für-Schritt-Anleitung

Um die rechte Maustaste über VBA zu simulieren, kannst Du die Windows-API-Funktion mouse_event verwenden. Hier ist ein einfaches Beispiel:

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf „VBAProject“ > Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Private Const MOUSEEVENTF_RIGHTDOWN = &H8
Private Const MOUSEEVENTF_RIGHTUP = &H10

Declare 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 Long)

Sub Rechtsklick()
    Dim xPos As Long, yPos As Long
    xPos = 300 ' X-Position
    yPos = 300 ' Y-Position
    mouse_event MOUSEEVENTF_RIGHTDOWN, xPos, yPos, 0, 0
    mouse_event MOUSEEVENTF_RIGHTUP, xPos, yPos, 0, 0
End Sub
  1. Ändere die xPos und yPos Variablen auf die Position, an der der Rechtsklick erfolgen soll.
  2. Führe das Makro aus, um den Rechtsklick an der angegebenen Position auszuführen.

Häufige Fehler und Lösungen

  • Fehler: Rechtsklick wird nicht ausgeführt.

    • Lösung: Stelle sicher, dass das Fenster, in dem Du den Rechtsklick ausführen möchtest, aktiv ist. Das Fenster muss den Fokus haben, damit die mouse_event-Funktion funktioniert.
  • Fehler: Sendkeys stürzt ab.

    • Lösung: Wenn Du nach dem Rechtsklick mit Sendkeys einen Kopiervorgang auslösen möchtest, achte darauf, dass das Zielprogramm bereit ist. Nutze Pausen zwischen den Sendkeys Befehlen.

Alternative Methoden

Eine weitere Möglichkeit, Mausaktionen zu simulieren, besteht in der Verwendung der SendInput-Funktion. Hier ist ein einfaches Beispiel:

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

' Beispielcode für SendInput (noch zu implementieren)

Diese Methode ist flexibler und ermöglicht das Senden von Tasteneingaben und Mausbewegungen.


Praktische Beispiele

Hier sind einige praktische Anwendungsbeispiele:

  1. Rechtsklick auf eine Datei im Explorer:

    • Verwende die mouse_event-Funktion, um einen Rechtsklick auf die Position der Datei auszuführen, um das Kontextmenü zu öffnen.
  2. Kopieren von Inhalten:

    • Nutze Sendkeys mit dem Befehl Sendkeys "{ENTER}", um einen Kopiervorgang auszulösen, nachdem Du den Rechtsklick ausgeführt hast.

Tipps für Profis

  • Verwende API-Funktionen effizient: Mache Dich mit den verschiedenen API-Funktionen vertraut, um Maus- und Tasteneingaben zu simulieren. mouse_event ist eine der einfacheren Optionen, aber SendInput kann leistungsfähiger sein.

  • Debugging: Wenn Du Fehler hast, nutze Debugging-Tools in VBA, um den Fluss Deines Codes zu verfolgen. Füge Debug.Print-Anweisungen ein, um den Status Deines Codes zu überprüfen.

  • Vermeide zu viele Sendkeys: Übermäßiger Einsatz von Sendkeys kann zu unvorhersehbaren Ergebnissen führen. Plane Deine Eingaben sorgfältig und teste sie gründlich.


FAQ: Häufige Fragen

1. Kann ich die rechte Maustaste in einem anderen Programm simulieren? Ja, solange das Programm den Fokus hat und Du die richtige Position für den Mausklick angibst.

2. Was ist der Unterschied zwischen mouse_event und SendInput? mouse_event ist eine ältere Funktion, die für einfache Mausaktionen verwendet wird, während SendInput eine modernere und flexiblere Methode ist, um sowohl Maus- als auch Tasteneingaben zu simulieren.

3. Warum funktioniert Sendkeys manchmal nicht? Sendkeys benötigt in bestimmten Szenarien, dass das Zielprogramm aktiv und bereit ist, Eingaben zu empfangen. Ein Mangel an Fokus oder zeitliche Verzögerungen können dazu führen, dass es nicht funktioniert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige