Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Windows Taste + R

Windows Taste + R
20.03.2021 17:27:00
Dieter(Drummer)
Guten Tag VBA SpezialistenInnen,
mit dem Code kann ich die Taste R aufrufen.
Sub WinTaste() 'Win + R
Application.SendKeys "^+{R}"
End Sub

Mit fehlt aber der Aufruf der Windows Taste +Taste R.
Wie muss der Code lauten, damit die Windows Taste + R aufgerufen wird?
Mit der Bitte um Hilfe grüßt,
Dieter(Drummer)

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Windows Taste + R
20.03.2021 17:42:31
Nepumuk
Hallo Dieter,
so:
Option Explicit

Private Declare PtrSafe Sub keybd_event Lib "user32.dll" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As LongPtr)

Private Const KEYEVENTF_KEYDOWN As Long = &H0
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const VK_WIN As Long = &H5B

Public Sub Test()
    Call keybd_event(VK_WIN, 1, KEYEVENTF_KEYDOWN, 0)
    Call keybd_event(vbKeyR, 1, KEYEVENTF_KEYDOWN, 0)
    Call keybd_event(vbKeyR, 1, KEYEVENTF_KEYUP, 0)
    Call keybd_event(VK_WIN, 1, KEYEVENTF_KEYUP, 0)
End Sub

Gruß
Nepumuk

Anzeige
AW: Danke Nepumuk, perfekt ...
20.03.2021 17:53:03
Dieter(Drummer)
Hallo Nepumuk,
Danke für die schnelle und perfekte Lösung.
Gruß und ein schönes Wochenende,
Dieter(Drummer)

AW: Noch eine Frage ...
21.03.2021 09:15:35
Dieter(Drummer)
Guten Morgen Nepumuk,
Danke nochmal für deine Hilfe in Sachen Code für Win+R.
Wie kann ich das kopierte aus dem Zwischenspeicher direkt nach Aufruf von Win+R einfügen, um z.B. den Gerätemanager direkt aufzurufen?
Zwischenspeicher Aufruf und einfügen geht ja mit:

Application.SendKeys "^+{V}"

So wie ich es am Ende im Code eingefügt habe, geht es nicht.
Gerätemanager Aufruf geht mit: Win+R und Eingabe "devmgmt.msc".
Kannst du bitte nochmal helfen?
Gruß, Dieter(Drummer)
'Herber: von Nepumuk am 20.03.2021 17:42:31
'Win+R
Private Declare PtrSafe Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As LongPtr)
Private Const KEYEVENTF_KEYDOWN As Long = &H0
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const VK_WIN As Long = &H5B
Public Sub WinR()
Call keybd_event(VK_WIN, 1, KEYEVENTF_KEYDOWN, 0)
Call keybd_event(vbKeyR, 1, KEYEVENTF_KEYDOWN, 0)
Call keybd_event(vbKeyR, 1, KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_WIN, 1, KEYEVENTF_KEYUP, 0)
Application.SendKeys "^+{V}"
End Sub


Anzeige
was bezweckst Du mit solchen Befehlen?
21.03.2021 11:30:01
Helmut
..ich verstehe den Sinn solcher Befehle nicht...
Gruß

AW: was bezweckst Du mit solchen Befehlen?
21.03.2021 11:35:28
Dieter(Drummer)
Hallo Helmut,
z.B. könnte ich damit direkt die Windows Taste + den Gerätemanager aufrufen. Mich interessiert eben, wie das per VBA möglich ist.
Gruß, Dieter(Drummer)

ach Ja, das braucht man ja zig mal am Tag-kwT
21.03.2021 15:21:04
Helmut

Anzeige
AW: Noch eine Frage ...
21.03.2021 11:33:02
Nepumuk
Hallo Dieter,
teste mal:
Option Explicit

Private Declare PtrSafe Sub keybd_event Lib "user32.dll" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As LongPtr)
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function FindWindowExA Lib "user32.dll" ( _
    ByVal hWnd1 As LongPtr, _
    ByVal hWnd2 As LongPtr, _
    ByVal lpsz1 As String, _
    ByVal lpsz2 As String) As LongPtr
Private Declare PtrSafe Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)
Private Declare PtrSafe Function SendMessageA Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal wMsg As Long, _
    ByVal wParam As LongPtr, _
    ByVal lParam As Any) As LongPtr

Private Const KEYEVENTF_KEYDOWN As Long = &H0
Private Const KEYEVENTF_KEYUP As Long = &H2

Private Const VK_WIN As Long = &H5B

Private Const WM_SETTEXT As Long = &HC

Private Const BM_CLICK = &HF5

Private Const GC_CLASSNAMEMSDIALOG As String = "#32770"
Private Const GC_CLASSNAMECOMBOBOX As String = "ComboBox"
Private Const GC_CLASSNAMEEDIT As String = "Edit"
Private Const GC_CLASSNAMEBUTTON As String = "Button"

Public Sub WinR()
    
    Dim lngptrDialogHandle As LongPtr, lngptrComboBoxHandle As LongPtr
    Dim lngptrEditBoxHandle As LongPtr, lngButtonHandle As LongPtr
    
    Call keybd_event(VK_WIN, 1, KEYEVENTF_KEYDOWN, 0)
    Call keybd_event(vbKeyR, 1, KEYEVENTF_KEYDOWN, 0)
    Call keybd_event(vbKeyR, 1, KEYEVENTF_KEYUP, 0)
    Call keybd_event(VK_WIN, 1, KEYEVENTF_KEYUP, 0)
    
    DoEvents
    
    lngptrDialogHandle = FindWindowA(GC_CLASSNAMEMSDIALOG, "Ausführen")
    
    lngptrComboBoxHandle = FindWindowExA(lngptrDialogHandle, 0, GC_CLASSNAMECOMBOBOX, vbNullString)
    
    Call Sleep(100)
    
    lngptrEditBoxHandle = FindWindowExA(lngptrComboBoxHandle, 0, GC_CLASSNAMEEDIT, vbNullString)
    
    Call SendMessageA(lngptrEditBoxHandle, WM_SETTEXT, 0, "devmgmt.msc")
    
    lngButtonHandle = FindWindowExA(lngptrDialogHandle, 0, GC_CLASSNAMEBUTTON, "OK")
    
    Call SendMessageA(lngButtonHandle, BM_CLICK, 0&, ByVal 0&)
    
End Sub

Gruß
Nepumuk

Anzeige
AW: Nepumuk, wieder einfach perfekt ...
21.03.2021 11:43:54
Dieter(Drummer)
Guten Tag Nepmuk,
das funktioniert perfekt und herzlichen Dank.
Ich hätte nicht gedacht, dass dafür ein so aufwendiger Code benötigt wird und werde ihn sicher weiter, auch mit anderen Aufrufen nutzen.
Noch einen erfolgreichen Sonntag und Danke ...
Gruß, Dieter(Drummer)
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Windows Taste + R: VBA-Methoden zur Automatisierung


Schritt-für-Schritt-Anleitung

Um die Kombination der Windows Taste + R per VBA auszuführen, kannst Du den folgenden Code verwenden:

Private Declare PtrSafe Sub keybd_event Lib "user32.dll" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As LongPtr)

Private Const KEYEVENTF_KEYDOWN As Long = &H0
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const VK_WIN As Long = &H5B

Public Sub WinR()
    Call keybd_event(VK_WIN, 1, KEYEVENTF_KEYDOWN, 0)
    Call keybd_event(vbKeyR, 1, KEYEVENTF_KEYDOWN, 0)
    Call keybd_event(vbKeyR, 1, KEYEVENTF_KEYUP, 0)
    Call keybd_event(VK_WIN, 1, KEYEVENTF_KEYUP, 0)
End Sub

Dieser Code simuliert das Drücken der Windows Taste und der R Taste. Nach dem Ausführen des Makros wird das Ausführen-Fenster geöffnet, wo Du Befehle eingeben kannst.


Häufige Fehler und Lösungen

  1. Windows + R funktioniert nicht

    • Stelle sicher, dass Du die richtigen Berechtigungen hast, um VBA-Makros auszuführen.
    • Überprüfe, ob die keybd_event-Deklaration korrekt ist.
  2. Windows + R geht nicht in Excel

    • Stelle sicher, dass Du die richtige Excel-Version verwendest, die VBA unterstützt (z.B. Excel 2010 oder neuer).

Alternative Methoden

Wenn die oben genannten Methoden nicht funktionieren, kannst Du auch die Application.SendKeys Methode verwenden, um Windows + R zu simulieren. Beachte jedoch, dass diese Methode manchmal unzuverlässig ist:

Sub SendKeysWinR()
    Application.SendKeys "^{ESC}" ' Simuliert die Windows Taste
    Application.SendKeys "r" ' Simuliert die R Taste
End Sub

Praktische Beispiele

Hier sind einige praktische Anwendungen des Windows + R Befehls:

  1. Gerätemanager aufrufen

    Public Sub OpenDeviceManager()
       Call WinR()
       Application.SendKeys "devmgmt.msc" ' Befehl für Gerätemanager
       Application.SendKeys "{ENTER}"
    End Sub
  2. Ein Programm direkt starten

    Public Sub OpenNotepad()
       Call WinR()
       Application.SendKeys "notepad.exe"
       Application.SendKeys "{ENTER}"
    End Sub

Mit diesen Makros kannst Du häufig verwendete Programme schnell und effizient aufrufen.


Tipps für Profis

  • Nutze die Sleep-Funktion, um sicherzustellen, dass das Ausführen-Fenster genug Zeit hat, um zu erscheinen, bevor Du den nächsten Befehl sendest.
  • Experimentiere mit verschiedenen Windows R Codes, um mehr Funktionen direkt zu integrieren.
  • Achte darauf, dass Du das Makro in einer vertrauenswürdigen Umgebung testest, um Sicherheitsrisiken zu vermeiden.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die Anwendung ohne VBA starten?
Du kannst die Kombination Windows + R direkt auf Deiner Tastatur drücken und den gewünschten Befehl eingeben.

2. Frage
Was tun, wenn Application.SendKeys nicht funktioniert?
In diesem Fall empfiehlt es sich, die keybd_event Methode zu verwenden, da sie zuverlässiger ist.

3. Frage
Gibt es eine Möglichkeit, mehrere Befehle hintereinander auszuführen?
Ja, Du kannst die Befehle in verschiedenen Sub-Prozeduren definieren und sie nacheinander aufrufen. Stelle sicher, dass Du zwischen den Befehlen ausreichend Zeit lässt.

4. Frage
Kann ich auch andere Tasten kombinieren?
Ja, Du kannst die keybd_event-Methode anpassen, um andere Tasten zu kombinieren, indem Du die entsprechenden Virtual-Key-Codes verwendest.

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