打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
打开程序并显示在窗体上vb代码
userphoto

2023.03.14 广东

关注

​正确例题

打开程序并且显示在窗体上

VB 让外部程序在VB程序的窗体里面运行

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long

Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long

Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long

Private Const GW_HWNDNEXT = 2

Private m_Hwnd As Long

Private Sub Form_Load()

    Dim dblPid As Long

    Call LockWindowUpdate(GetDesktopWindow)

    dblPid = Shell("c:\windows\notepad.exe", vbNormalFocus)

    m_Hwnd = InstanceToWnd(dblPid) '根据进程PID找窗口句柄

    SetParent m_Hwnd, Me.hwnd

    Putfocus m_Hwnd                 '记事本设置焦点

    Call LockWindowUpdate(0)

End Sub

Function InstanceToWnd(ByVal target_pid As Long) As Long

    Dim i As Long, lHwnd As Long, lPid As Long, lThreadId As Long

    lHwnd = FindWindow(ByVal 0&, ByVal 0&)   '查找第一个窗口

    Do While lHwnd <> 0

        i = i + 1

        If i Mod 20 = 0 Then DoEvents

        '判断窗口是否没父窗口

        If GetParent(lHwnd) = 0 Then

            '获取该窗口的线程ID

            lThreadId = GetWindowThreadProcessId(lHwnd, lPid)

            If lPid = target_pid Then '找到PID所在窗口句柄

                InstanceToWnd = lHwnd

                Exit Do

            End If

        End If

        '继续查找下一个兄弟窗口

        lHwnd = GetWindow(lHwnd, GW_HWNDNEXT)

        Debug.Print Hex$(lHwnd)

    Loop

End Function

Private Sub Form_Unload(Cancel As Integer)

    Call DestroyWindow(m_Hwnd)

    'TerminateProcess GetCurrentProcess, 0    '野蛮了些

    Set Form1 = Nothing

End Sub

正确例题

打开程序并且显示在窗体上

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long

Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long

Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long

Private Const GW_HWNDNEXT = 2

Private m_Hwnd As Long

Function InstanceToWnd(ByVal target_pid As Long) As Long

    Dim i As Long, lHwnd As Long, lPid As Long, lThreadId As Long

    lHwnd = FindWindow(ByVal 0&, ByVal 0&)   '查找第一个窗口

    Do While lHwnd <> 0

        i = i + 1

        If i Mod 20 = 0 Then DoEvents

        '判断窗口是否没父窗口

        If GetParent(lHwnd) = 0 Then

            '获取该窗口的线程ID

            lThreadId = GetWindowThreadProcessId(lHwnd, lPid)

            If lPid = target_pid Then '找到PID所在窗口句柄

                InstanceToWnd = lHwnd

                Exit Do

            End If

        End If

        '继续查找下一个兄弟窗口

        lHwnd = GetWindow(lHwnd, GW_HWNDNEXT)

        Debug.Print Hex$(lHwnd)

    Loop

End Function

Private Sub Form_Load()

    Dim dblPid As Long

    Call LockWindowUpdate(GetDesktopWindow)

    dblPid = Shell("C:\Users\28261\Desktop\密码登录程序.exe", vbNormalFocus)

    m_Hwnd = InstanceToWnd(dblPid) '根据进程PID找窗口句柄

    SetParent m_Hwnd, Me.hwnd

    Putfocus m_Hwnd                 '记事本设置焦点

    Call LockWindowUpdate(0)

End Sub

Private Sub Form_Unload(Cancel As Integer)

    Call DestroyWindow(m_Hwnd)

    'TerminateProcess GetCurrentProcess, 0    '野蛮了些

    Set Form1 = Nothing

End Sub

正确例题

打开exe文件并显示出来

Private Sub Command4_Click()

Shell "notepad.exe", vbNormalFocus

End Sub

打开exe文件并显示出来

Private Sub Command3_Click()

Shell "密码登录程序.exe", vbNormalFocus

End Sub

打开exe文件并显示出来

Private Sub Command5_Click()

CommonDialog1.ShowOpen

Shell CommonDialog1.FileName, vbNormalFocus

End Sub

打开文本文件并显示出来

Private Sub Command6_Click()

CommonDialog1.ShowOpen

Open CommonDialog1.FileName For Binary As #1

MsgBox Input(LOF(1), #1)

Close #1

End Sub

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
将cad嵌入到vb中
定制化窗体之闪烁窗体标题栏(2)
SendMessage给另一个程序
标题栏
VB实用代码,收藏!!
如何屏蔽掉窗体中的关闭按钮X?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服