나는 당신이하고 싶은 일을하기가 쉽지 않을까 걱정됩니다. 먼저 WebBrowser 컨트롤에 포함 된 PDF 판독기의 창 핸들을 찾아야합니다. 여기에 예제 코드가 있습니다 :
Public Function GetPdfViewerHandle() As System.IntPtr
Dim tempHandle As System.IntPtr
'--------------------------------------
' get handle to pdf viewer
'--------------------------------------
'--------------------------------------
' first check for the foxit reader
'--------------------------------------
tempHandle = FindChildWindow(WebBrowser1.Handle, "AfxWnd42s", "Reader", 1, True)
If IntPtr.Zero.Equals(tempHandle) = True Then
'---------------------------------
' if not foxit, check for adobe
'---------------------------------
tempHandle = FindChildWindow(WebBrowser1.Handle, "AVL_AVVIEW", "AVPageView", 1, True)
End If
Return tempHandle
End Function
Public Shared Function FindChildWindow(ByVal hParent As IntPtr, ByVal P_childClass As String, ByVal P_childTitle As String, ByVal P_count As Integer, ByVal p_recursive As Boolean) As IntPtr
Dim hChild As IntPtr
Dim className As String
Dim title As String
Dim cnt As Integer
Dim tempPtr As IntPtr
Dim Declare Function FindWindowExA Lib "user32.dll" (ByVal hWnd1 As IntPtr, ByVal hWnd2 As Int32, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr
cnt = 0
hChild = FindWindowExA(hParent, 0, Nothing, Nothing)
While hChild.ToInt32 > 0
If P_childClass Is Nothing Then
className = GetClassName(hChild)
Else
className = GetClassName(hChild)
If P_childClass.Length < className.Length Then
className = className.Substring(0, P_childClass.Length)
End If
End If
If P_childTitle Is Nothing Then
title = GetWindowText(hChild).Replace("&", "")
Else
title = GetWindowText(hChild).Replace("&", "")
If P_childTitle.Length < title.Length Then
title = title.Substring(0, P_childTitle.Length)
End If
End If
Debug.WriteLine("hwnd=" + Hex$(hChild.ToInt32) + ", className = " + className + ", title = " + title)
If (String.Compare(className, P_childClass, True) = 0 And String.Compare(title, P_childTitle, True) = 0) Or (P_childClass = Nothing And String.Compare(title, P_childTitle, True) = 0) Or (String.Compare(className, P_childClass, True) = 0 And P_childTitle = Nothing) Then
cnt += 1
If cnt >= P_count Then
Return hChild
End If
End If
If p_recursive = True Then
tempPtr = FindChildWindow(hChild, P_childClass, P_childTitle, 1, p_recursive)
If IntPtr.Zero.Equals(tempPtr) = False Then
Return tempPtr
End If
End If
hChild = FindWindowExA(hParent, hChild.ToInt32, Nothing, Nothing)
End While
Return Nothing
End Function
일단 사용자가 창 핸들을 사용하면 양식 필드를 찾는 방법이 많이 있습니다. 당신이 일의 순서를 알고 있다면, 당신은 단순히 PDF 리더 핸들에 키 명령을 전송 시작하거나 Win32Api SendMessageW 대신 기능을 통해 그들에게 데이터를 입력 양식 필드의 핸들을 찾기 위해 스파이 ++를 사용할 수 있습니다
Public Declare Function SendMessageA Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
asciiChar = CByte(Asc(data.Substring(0, 1)))
rc = SendMessageA(hwnd, WM_CHAR, asciiChar, 0)
좋음, 운.
폼의 레이아웃이 항상 동일해야하며 이미 텍스트 필드의 이름을 가지고 있습니다 (iText # 덕분에) – Cloud007
감사합니다! 이것은 내가 필요한 것입니다. –