2016-01-26 5 views
2

Я пытался получить сценарий VBA направить KeyDown событие, но не успех ... Там нет много информации о получении «iniKeyboardEvent'working на InternetExplorer, а ..JavaScript клавишные События в IE10

Sub ie_evt() 

Dim ie As InternetExplorer 
Dim doc As HTMLDocument 

Set ie = CreateObject("InternetExplorer.Application") 
ie.Navigate "http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onkeydown.htm" 
Do While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE 
DoEvents 
Loop 
ie.Visible = True 

Set doc = ie.Document 

doc.parentWindow.execScript ("var tb = document.getElementById('oExample')") 
doc.parentWindow.execScript ("tb.value = 'a'") 
doc.parentWindow.execScript ("var e = document.createEvent('KeyboardEvent')") 
doc.parentWindow.execScript ("e.initKeyboardEvent('keydown', true, true, window, false, false, false, false, 65, 0);") 
doc.parentWindow.execScript ("tb.dispatchEvent(e)") 
End Sub 

Может ли кто-нибудь мне помочь?

Благодаря

ответ

0

Это всегда изворотливый в лучшем случае в VBA, но вы можете попробовать использовать Win API для отправки события клавиатуры к активному окну. 2 основных момента:

  • Убедитесь, что окно IE является активным окном в момент отправки ключевое событие (Вы можете использовать AppActivate() или другие методы API, чтобы сделать это)

  • Вам нужно будет знать виртуальный код клавиши для ключа (ов) вы хотите «нажмите» here is a list of most of them

Тогда что-то вроде этого в стандартном модуле кода:

#If Win64 Then 
    Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) 
#Else 
    Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) 
#End If 

'// Example, send the number 5 
Const NUM_5 As Byte = &H65 

Sub foo() 

'// your code here - ensure IE window is active window and then: 

'// Send key press event 
keybd_event NUM_5, 0&, 0&, 0& 

'// rest of code 
End Sub 
+0

Извините, но на самом деле не хочу использовать sendkeys ... IE не будет активным окном при запуске полного кода ... – drec4s

+0

Это не 'SendKeys()' это функция Win API, которая отправляет клавиатуры в активное окно. И если вы хотите вызвать ключевое событие для прессы, то вы ограничены своими вариантами –

 Смежные вопросы

  • Нет связанных вопросов^_^