Тема: Как с помощью функции SendMessage послать нажатие клавиши в другое приложение?

Помогите с помощью функции WIN32API SendMessage послать нажатие клавиши в другое приложение.

Re: Как с помощью функции SendMessage послать нажатие клавиши в другое приложение?

Нажатие клавиш эмулируется ф-цией  VB - sendkeys

Re: Как с помощью функции SendMessage послать нажатие клавиши в другое приложение?

Держи:
Запускаем NotePad и пишем в него, что хотим
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Const MAX_PATH = 255
Sub write_to_NotePad()
Shell "notepad.exe", 1   ' Çàïóñêàåì Notepad
Dim sTitle As String
Dim I As Integer
Dim hWnd As Long
hWnd = FindWindow("Notepad", 0)
   sTitle = Space$(MAX_PATH)
hWnd = FindWindow("Notepad", 0)
Call GetWindowText(hWnd, sTitle, MAX_PATH)
sTitle = TrimNull(sTitle)
AppActivate sTitle
SendKeys "Ïèøåì â NotePad, ÷òî õîòèì" & Chr(13) & Chr(10) & "Åùå ïèøåì" & Chr(13) & Chr(10) & "È åùå ïèøåì", True '& Chr(10), 1       ' Ïîñûëàåì ñòðî÷êè â îòêðûòûé ôàéë Notepada
End Sub
Private Function TrimNull(item As String)
  'remove string before the terminating null(s)
   Dim pos As Integer
   pos = InStr(item, Chr$(0))
   If pos Then
         TrimNull = Left$(item, pos - 1)
   Else: TrimNull = item
   End If
End Function
Private Sub Command1_Click()
write_to_NotePad
End Sub

Re: Как с помощью функции SendMessage послать нажатие клавиши в другое приложение?

Dim ОтветПрограммы As Variant
Dim RetVal
Dim HandleProgram As Long
   RetVal = Shell(cPrompt, vbMinimizedFocus)
   MsgBox RetVal
   HandleProgram = FindWindow(vbNullString, cPrompt)
   RetVal = SendMessage(HandleProgram, "2", 0, 0)
   RetVal = SendMessage(HandleProgram, "{ENTER}", 0, 0)
   RetVal = SendMessage(HandleProgram, "3", 0, 0)
   RetVal = SendMessage(HandleProgram, "{ENTER}", 0, 0)
   RetVal = SendMessage(HandleProgram, "4", 0, 0)
   RetVal = SendMessage(HandleProgram, "{ENTER}", 0, 0)
'   If N_prg = 2 Then
'      Application.Wait (Now + TimeValue("0:00:3"))
'      VBA.SendKeys "2", True
'      VBA.SendKeys "{ENTER}", True
'      VBA.SendKeys "3", True
'      VBA.SendKeys "{ENTER}", True
'      VBA.SendKeys "4", True
'      VBA.SendKeys "{ENTER}", True
'   End If
Сначала пробовал VBA функцию SendMessage и кое-что получалось, но не то что надо: в окне программы какбуд-то в текстовом редакторе 6 раз появлялся символ "\" и курсор перемещался на следующую строку, т.е. получался столбец из этого символа. А должно было быть: название файла - 2, затем "Enter", название файла - 3, "Enter" и т.д. и если не правильно введено название файла, то после нажатия "Enter" программа снова выводит запрос на указание имени файла, а у меня после применения SendKeys никакой работы и никаких запросов.
Функция FindWindow возвращает Handel окна программы, однако SendMessage не работает. Наверное надо разобраться с параметрами этой функции: второму параметру наверное надо присвоить значение WM_KEYDOWN, а в дополнительных 3 и (4) параметрах указать название клавиши (и клавиатуру на которой эта клавиша вроде бы как нажимается). Но как это сделать, а именно сначала надо понять как описать параметр WM_KEYDOWN и вообще есть ли такая константа. Вот константа WM_BUTTONDOWN есть, сам видел, но снажатием кнопки окна проще, там просто указывается Handel этой кнопки и программе ясно какую кнопку надо нажимать, а вот с клавишей непонятно как программе обяснить нажатие какой клавиши требуется эмулировать. Может специалисты объяснят?