Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1820to1824
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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)

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

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)

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige