.NET 3.x Отправить нажатие Ctrl+F9 программе работающего в фоном режиме - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Доброго, гуглил вопрос и нашел массу не работающих решений - не получается отправить нажатие Ctrl+F9 программе работающего в фоном режиме через SendMessage на 64 битной системе сам код
Листинг программы
  1. Imports prog1
  2. Imports System
  3. Imports System.Diagnostics
  4. Imports System.Runtime.InteropServices
  5. Module Module1
  6. <DllImport("user32.dll")> _
  7. Public Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As ntPtr
  8. End Function
  9. Public Const WM_KEYDOWN = &H100
  10. Public Const WM_KEYUP = &H101
  11. Public Const VK_CONTROL = &H11
  12. Public Const VK_F9 = &H78
  13. Dim app1 As prog1.Application
  14. Sub Main()
  15. While True
  16. Dim mcommand As String = Console.ReadLine
  17. If mcommand = "Recalculate" Then
  18. app1 = New prog1.Application
  19. app1.Visible = False
  20. ' пытаюсь получить хендл так и приводит к ошибке
  21. ' handle = app1.Handle
  22. ' а так работает но к ошибке может привести если запущено несколько программ(но всем отправлять Ctrl + F9 не нужно)
  23. Dim p As Process() = Process.GetProcessesByName("prog1")
  24. Dim title As String = p(0).MainWindowTitle
  25. Dim handle As IntPtr = p(0).MainWindowHandle
  26. ' отправка нажатия Ctrl + F9 - не работает
  27. SendMessage(handle, WM_KEYDOWN, VK_CONTROL, 0)
  28. SendMessage(handle, WM_KEYDOWN, VK_F9, 0)
  29. SendMessage(handle, WM_KEYUP, VK_CONTROL, 0)
  30. SendMessage(handle, WM_KEYUP, VK_F9, 0)
  31. ' не работает и PostMessage
  32. End If
  33. End While
  34. End Sub
  35. End Module
заранее спс!

Решение задачи: «.NET 3.x Отправить нажатие Ctrl+F9 программе работающего в фоном режиме»

textual
Листинг программы
  1. Module Module1
  2.     Public Declare Function SetForegroundWindow Lib "user32.DLL" Alias "SetForegroundWindow" (ByVal hwnd As Integer) As Integer
  3.  
  4.     Public Declare Sub Send_Key_Down Lib "user32.DLL" Alias "keybd_event" (ByVal Клавиша As Byte, Optional ByVal bScan As Byte = 0, Optional ByVal Действие As Integer = 0, Optional ByVal dwExtraInfo As Integer = 0)
  5.     Public Declare Sub Send_Key_Up Lib "user32.DLL" Alias "keybd_event" (ByVal Клавиша As Byte, Optional ByVal bScan As Byte = 0, Optional ByVal Действие As Integer = &H2, Optional ByVal dwExtraInfo As Integer = 0)
  6.  
  7.     Public Sub Send_Key_Press(ByVal Клавиша As Byte)
  8.         Send_Key_Down(Клавиша) : Send_Key_Up(Клавиша)
  9.     End Sub
  10.  
  11.     Public Const VK_F1 = &H70
  12.  
  13.     Sub Main()
  14.         Dim handle As IntPtr = Process.GetProcessesByName("notepad")(0).MainWindowHandle.ToInt32
  15.         SetForegroundWindow(handle)
  16.  
  17.         Threading.Thread.Sleep(500)
  18.         Send_Key_Press(VK_F1)
  19.         Console.ReadKey()
  20.     End Sub
  21.  
  22. End Module

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы