cumulonimbus8
Fleet Admiral
- Registriert
- Apr. 2012
- Beiträge
- 19.124
Moin!
Googel liefert vieles - und nichts funktioniert. Auch nicht
dieses.
Den netten Bug NumLock auszuschalten erwähne ich nur am Rande. Unterbau ist W10 (Home wie Pro) und mir in die Hände gefallene W2010 und 2016 (gibt noch mehr die ich gerade nicht erwische) haben dieses Problem.
SendKeys wird gar nicht erst ausgeführt, in WORD. Mache ichs in VBA bekommt der Code die gedrückten Tasten ab..!
Was ich möchte ist einfach an der Cursorposition, festgelegt nach Einfügen eines Seitenumbruchs [anschließend, nach weiteren Maßnahmen die dieses Umbruchs bedürfen], 3-mal ENTF auszulösen. Ganz bescheiden. Den Umbruch wieder entfernen und 2 Zeilenschaltungen.
Mit was kann ich Word dazu bringen das zu machen? Wenn es ginge einen Range «ab hier» mit 3 Zeichen Länge zu erzueugen und diesen dann zu leeren wäre das wenigstes ein Ansatz.
CN8
Googel liefert vieles - und nichts funktioniert. Auch nicht
Code:
'SendKeysEx(ByVal Text As String)
'#################################
Private Declare Sub keybd_event Lib "User32" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Private Declare Function VkKeyScan Lib "User32" _
Alias "VkKeyScanA" ( _
ByVal Char As Byte) As Integer
Private Declare Function MapVirtualKey Lib "User32" _
Alias "MapVirtualKeyA" ( _
ByVal Code As Long, _
ByVal MapType As Long) As Long
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Enum VirtualKeyCode
VK_BAK = &H8
VK_TAB = &H9
VK_CLEAR = &HC
VK_RETURN = &HD
VK_SHIFT = &H10
VK_CONTROL = &H11
VK_MENU = &H12
VK_PAUSE = &H13
VK_CAPITAL = &H14
VK_ESCAPE = &H1B
VK_PRIOR = &H21
VK_NEXT = &H22
VK_END = &H23
VK_HOME = &H24
VK_LEFT = &H25
VK_UP = &H26
VK_RIGHT = &H27
VK_DOWN = &H28
VK_SELECT = &H29
VK_SNAPSHOT = &H2C 'NEU! Windows-Taste (Sicher???)
VK_INSERT = &H2D
VK_DELETE = &H2E
VK_HELP = &H2F
VK_F1 = &H70
VK_F2 = &H71
VK_F3 = &H72
VK_F4 = &H73
VK_F5 = &H74
VK_F6 = &H75
VK_F7 = &H76
VK_F8 = &H77
VK_F9 = &H78
VK_F10 = &H79
VK_F11 = &H7A
VK_F12 = &H7B
VK_F13 = &H7C
VK_F14 = &H7D
VK_F15 = &H7E
VK_F16 = &H7F
VK_NUMLOCK = &H90
VK_SCROLL = &H91
VK_WIN = &H5B 'NEU! Windows-Taste
VK_APPS = &H5D 'NEU! Taste für Kontextmenü
End Enum
'Text durch Simulieren von Tastenanschlägen an das aktive Control senden
Public Sub SendKeysEx(ByVal Text As String)
Dim VK As VirtualKeyCode
Dim Char As String
Dim I As Integer
Dim Shift As Boolean
Dim Alt As Boolean
Dim Ctrl As Boolean
Dim Scan As Long
Dim Extended As Long
'Jedes Zeichen einzeln senden
For I = 1 To Len(Text)
'aktuelles Zeichen extrahieren
Char = Mid$(Text, I, 1)
'Sonderzeichen?
Shift = False
Alt = False
Ctrl = False
If Char = "{" Then
If UCase$(Mid$(Text, I + 1, 9)) = "BACKSPACE" Then
VK = VK_BAK
I = I + 9
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "BS" Then
VK = VK_BAK
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 4)) = "BKSP" Then
VK = VK_BAK
I = I + 5
ElseIf UCase$(Mid$(Text, I + 1, 5)) = "BREAK" Then
VK = VK_PAUSE
I = I + 6
ElseIf UCase$(Mid$(Text, I + 1, 8)) = "CAPSLOCK" Then
VK = VK_CAPITAL
I = I + 9
ElseIf UCase$(Mid$(Text, I + 1, 6)) = "DELETE" Then
VK = VK_DELETE
I = I + 7
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "DEL" Then
VK = VK_DELETE
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 4)) = "DOWN" Then
VK = VK_DOWN
I = I + 5
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "UP" Then
VK = VK_UP
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 4)) = "LEFT" Then
VK = VK_LEFT
I = I + 5
ElseIf UCase$(Mid$(Text, I + 1, 5)) = "RIGHT" Then
VK = VK_RIGHT
I = I + 6
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "END" Then
VK = VK_END
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 5)) = "ENTER" Then
VK = VK_RETURN
I = I + 6
ElseIf UCase$(Mid$(Text, I + 1, 4)) = "HOME" Then
VK = VK_HOME
I = I + 5
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "ESC" Then
VK = VK_ESCAPE
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 4)) = "HELP" Then
VK = VK_HELP
I = I + 5
ElseIf UCase$(Mid$(Text, I + 1, 6)) = "INSERT" Then
VK = VK_INSERT
I = I + 7
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "INS" Then
VK = VK_INSERT
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 7)) = "NUMLOCK" Then
VK = VK_NUMLOCK
I = I + 8
ElseIf UCase$(Mid$(Text, I + 1, 4)) = "PGUP" Then
VK = VK_PRIOR
I = I + 5
ElseIf UCase$(Mid$(Text, I + 1, 4)) = "PGDN" Then
VK = VK_NEXT
I = I + 5
ElseIf UCase$(Mid$(Text, I + 1, 10)) = "SCROLLLOCK" Then
VK = VK_SCROLL
I = I + 11
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "TAB" Then
VK = VK_TAB
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "F1" Then
VK = VK_F1
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "F2" Then
VK = VK_F2
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "F3" Then
VK = VK_F3
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "F4" Then
VK = VK_F4
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "F5" Then
VK = VK_F5
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "F6" Then
VK = VK_F6
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "F7" Then
VK = VK_F7
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "F8" Then
VK = VK_F8
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 2)) = "F9" Then
VK = VK_F9
I = I + 3
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "F10" Then
VK = VK_F10
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "F11" Then
VK = VK_F11
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "F12" Then
VK = VK_F12
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "F13" Then
VK = VK_F13
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "F14" Then
VK = VK_F14
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "F15" Then
VK = VK_F15
I = I + 4
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "F16" Then
VK = VK_F16
I = I + 4
'NEU! Windows-Taste
ElseIf UCase$(Mid$(Text, I + 1, 3)) = "WIN" Then
VK = VK_WIN
I = I + 4
'NEU! Kontextmenü
ElseIf UCase$(Mid$(Text, I + 1, 4)) = "APPS" Then
VK = VK_APPS
I = I + 5
'NEU! PrintScreen-Taste (DRUCK)
ElseIf UCase$(Mid$(Text, I + 1, 5)) = "PRINT" Then
VK = VK_SNAPSHOT
I = I + 6
End If
ElseIf Char = "+" Then
'Umschalttaste
VK = VK_SHIFT
ElseIf Char = "%" Then
'ALT
VK = VK_MENU
ElseIf Char = "^" Then
'STRG
VK = VK_CONTROL
Else
'Virtual KeyCode ermitteln...
VK = VkKeyScan(Asc(Char))
End If
Scan = MapVirtualKey(VK, 2)
Extended = 0
If Scan = 0 Then Extended = KEYEVENTF_EXTENDEDKEY
Scan = MapVirtualKey(VK, 0)
If VK <> VK_SHIFT Then
'Großbuchstabe...?
Shift = (VK And &H100)
Ctrl = (VK And &H200)
Alt = (VK And &H400)
VK = (VK And &HFF)
End If
'niederdrücken und wieder loslassen
If Shift Then keybd_event VK_SHIFT, 0, 0, 0
If Ctrl Then keybd_event VK_CONTROL, 0, 0, 0
If Alt Then keybd_event VK_MENU, 0, 0, 0
keybd_event VK, Scan, Extended, 0
keybd_event VK, Scan, KEYEVENTF_KEYUP Or Extended, 0
'Shift (Umsch)-Taste wieder loslassen
If Shift Then keybd_event VK_SHIFT, 0, KEYEVENTF_KEYUP, 0
If Ctrl Then keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
If Alt Then keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
Next I
End Sub
Den netten Bug NumLock auszuschalten erwähne ich nur am Rande. Unterbau ist W10 (Home wie Pro) und mir in die Hände gefallene W2010 und 2016 (gibt noch mehr die ich gerade nicht erwische) haben dieses Problem.
SendKeys wird gar nicht erst ausgeführt, in WORD. Mache ichs in VBA bekommt der Code die gedrückten Tasten ab..!
Was ich möchte ist einfach an der Cursorposition, festgelegt nach Einfügen eines Seitenumbruchs [anschließend, nach weiteren Maßnahmen die dieses Umbruchs bedürfen], 3-mal ENTF auszulösen. Ganz bescheiden. Den Umbruch wieder entfernen und 2 Zeilenschaltungen.
Mit was kann ich Word dazu bringen das zu machen? Wenn es ginge einen Range «ab hier» mit 3 Zeichen Länge zu erzueugen und diesen dann zu leeren wäre das wenigstes ein Ansatz.
CN8