フォーム上のPDFがアクティブにならない への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 KOZ  (社会人) 投稿日時 2023/11/24 06:14:23
こんな感じです。
Option Strict On
Option Explicit On

Imports System.Text
Imports System.Runtime.InteropServices

Friend Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.AcroPDF1.LoadFile("z:\test.pdf")
    End Sub

    Private Const ZOOM_IN As Keys = Keys.Control Or Keys.Add
    Private Const ZOOM_OUT As Keys = Keys.Control Or Keys.Subtract

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
        Select Case keyData
            Case ZOOM_IN, ZOOM_OUT
                If msg.HWnd <> AcroPDF1.Handle Then
                    PostMessage(GetAVPageView(AcroPDF1), msg.Msg, msg.WParam, msg.LParam)
                    Return True
                End If
        End Select
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

    Private Function GetAVPageView(view As AxAcroPDFLib.AxAcroPDF) As IntPtr
        Dim LParam As IntPtr = CType(1, IntPtr)
        EnumChildWindows(view.Handle, AddressOf EnumChildProc, LParam)
        Return LParam
    End Function

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    Private Shared Function PostMessage(hWnd As IntPtr, Msg As Integer,
                                         wParam As IntPtr, lParam As IntPtr) As Boolean
    End Function

    Private Function EnumChildProc(ByVal hwnd As IntPtr, ByRef LParam As IntPtr) As Boolean
        If GetWindowText(hwnd) = "AVPageView" Then
            LParam = hwnd
            Return False
        End If
        Return True
    End Function

    <DllImport("user32.dll", CharSet:=CharSet.Auto)>
    Private Shared Function EnumChildWindows(hWndParent As IntPtr, lpEnumFunc As EnumChildProcDelegate, ByRef lParam As IntPtr) As Boolean
    End Function

    Private Delegate Function EnumChildProcDelegate(hwnd As IntPtr, ByRef Lparam As IntPtr) As Boolean

    <DllImport("user32.dll", CharSet:=CharSet.Auto)>
    Private Shared Function GetWindowTextLength(hWnd As IntPtr) As Integer
    End Function

    <DllImport("user32.dll", CharSet:=CharSet.Auto)>
    Private Shared Function GetWindowText(hWnd As IntPtr, lpString As StringBuilder, nMaxCount As IntegerAs Integer
    End Function

    Private Function GetWindowText(hwnd As IntPtr) As String
        Dim sb As New StringBuilder(256)
        GetWindowText(hwnd, sb, 255)
        Return sb.ToString()
    End Function

End Class
投稿者 コレ  (社会人) 投稿日時 2023/11/22 14:09:31
AcroPDFLib.AxAcroPDFのコントロールを使ってアプリのフォーム上にPDFを表示しています。
やりたいことはキーボードでPDFのショートカットキーが入力されたら
PDFが拡大、縮小する等を行いたいのですが問題があります。
キーボードで拡大、縮小のショートカットキーを入れても
PDFにフォーカスがあたってないと反応しません。
キーを押したらフォーカスがあたってなくてもPDFを操作できるようにしたいです。