.NET 3.x Отправить нажатие Ctrl+F9 программе работающего в фоном режиме - Visual Basic .NET
Формулировка задачи:
Доброго, гуглил вопрос и нашел массу не работающих решений - не получается отправить нажатие Ctrl+F9 программе работающего в фоном режиме через SendMessage на 64 битной системе
сам код
заранее спс!
Листинг программы
- Imports prog1
- Imports System
- Imports System.Diagnostics
- Imports System.Runtime.InteropServices
- Module Module1
- <DllImport("user32.dll")> _
- Public Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As ntPtr
- End Function
- Public Const WM_KEYDOWN = &H100
- Public Const WM_KEYUP = &H101
- Public Const VK_CONTROL = &H11
- Public Const VK_F9 = &H78
- Dim app1 As prog1.Application
- Sub Main()
- While True
- Dim mcommand As String = Console.ReadLine
- If mcommand = "Recalculate" Then
- app1 = New prog1.Application
- app1.Visible = False
- ' пытаюсь получить хендл так и приводит к ошибке
- ' handle = app1.Handle
- ' а так работает но к ошибке может привести если запущено несколько программ(но всем отправлять Ctrl + F9 не нужно)
- Dim p As Process() = Process.GetProcessesByName("prog1")
- Dim title As String = p(0).MainWindowTitle
- Dim handle As IntPtr = p(0).MainWindowHandle
- ' отправка нажатия Ctrl + F9 - не работает
- SendMessage(handle, WM_KEYDOWN, VK_CONTROL, 0)
- SendMessage(handle, WM_KEYDOWN, VK_F9, 0)
- SendMessage(handle, WM_KEYUP, VK_CONTROL, 0)
- SendMessage(handle, WM_KEYUP, VK_F9, 0)
- ' не работает и PostMessage
- End If
- End While
- End Sub
- End Module
Решение задачи: «.NET 3.x Отправить нажатие Ctrl+F9 программе работающего в фоном режиме»
textual
Листинг программы
- Module Module1
- Public Declare Function SetForegroundWindow Lib "user32.DLL" Alias "SetForegroundWindow" (ByVal hwnd As Integer) As Integer
- 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)
- 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)
- Public Sub Send_Key_Press(ByVal Клавиша As Byte)
- Send_Key_Down(Клавиша) : Send_Key_Up(Клавиша)
- End Sub
- Public Const VK_F1 = &H70
- Sub Main()
- Dim handle As IntPtr = Process.GetProcessesByName("notepad")(0).MainWindowHandle.ToInt32
- SetForegroundWindow(handle)
- Threading.Thread.Sleep(500)
- Send_Key_Press(VK_F1)
- Console.ReadKey()
- End Sub
- End Module
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д