SendKeys 당신이 활성화 될하기 위해 키를 전송하는 응용 프로그램이 필요합니다. 위의 링크에서
:
사용 SendKeys 매크로는 활성 응용 프로그램에 키 입력 및 키 입력 조합을 보낼 수 있습니다.
이 제한 사항을 해결하려면 WinApi 기능을 사용해야합니다.
,617 :
- FindWindowpInvoke.net
- FindWindowExpInvoke.net
- sendMessagepInvoke.net
는 여기서 예
이 MSDN Forum Post보기는 전기의 변형 예
Public Class Form1
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd As IntPtr, ByVal hWndChildAfterA As IntPtr, ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As String) As IntPtr
Const WM_SETTEXT As Integer = &HC
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim destination As IntPtr = FindWindow(Nothing, "Untitled - Notepad")
Dim destControl As IntPtr = FindWindowEx(destination, IntPtr.Zero, "Edit", Nothing)
SendMessage(destControl, WM_SETTEXT, IntPtr.Zero, "Hello" & vbTab & "GoodBye" & vbCrLf)
End Sub
End Class
은 추가는 WM_KEYDOWN
를 사용하여 추가 예 나는 TestForm로 설정 창 제목에 또 다른 작은 응용 프로그램을 만들고 응용 프로그램이 TabKey을 가지고 있는지 확인하기 위해의 WndProc 메소드를 오버라이드.
Public Class Form1
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr
Const WM_KEYDOWN As Integer = &H100
Const VK_TAB As Integer = &H9
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim destination As IntPtr = FindWindow(Nothing, "TestForm")
SendMessage(destination, WM_KEYDOWN, VK_TAB, 0)
End Sub
End Class
시험 양식
양식
보내기
는
MyBase.WndProc (m)에 중단 점을 넣고 전송 된 내용을 볼 수 m 봐.
Public Class Form1
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
End Sub
End Class
내가 다시 쓴 것을 읽으십시오. 창에 포커스가 없을 때 키를 보내려고합니다. – Nmmmm
포커스가 없다면 보낼 수 없다고 생각합니다. 저는이 문제에 대해 50 % 확신합니다. 몇 년 전에 시도했기 때문에 창을 먼저 집중시키는 것 외에는 어떻게해야 할지를 알 수 없었기 때문입니다. 그러나, 나는 완전히 틀릴 수 있었다. – urlreader