1

所以这是我的问题?如何在面板中打开 .exe 文件?我正在使用:Visual Studio。我的问题:它在我的表单之外打开 .exe 文件,而不是将其放在面板中。代码:

Public Class Form1
Declare Auto Function SetParent Lib "user32.dll" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As Integer
Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Const WM_SYSCOMMAND As Integer = 274
Private Const SC_MAXIMIZE As Integer = 61488
Dim proc As Process

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    proc = Process.Start("C:\WINDOWS\notepad.exe")
    proc.WaitForInputIdle()

    SetParent(proc.MainWindowHandle, Panel1.Handle)
    SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
End Sub

结束类

4

2 回答 2

0

Pinvoke SetParent是如何做到这一点的,但您可能无法通过某些应用程序获得您想要的确切行为,并且并非所有应用程序都会使用此 API 加载。

于 2013-11-15T06:23:23.353 回答
0

根据提供的其他信息,我建议采用不同的设计。您最好构建自己的具有按钮的应用程序,当您按下按钮时,您会向 cnc 应用程序发送击键。为方便起见,您可以将应用程序放在 cnc 应用程序旁边。

强制另一个应用程序在你的应用程序中运行是极其困难的,即使你可以让它工作,它也很可能是脆弱的。将两个应用程序分开。 SetParent不是解决方案。

我建议您看一下AutoHotKey,这是一个(免费)编程工具包,人们用来自动化各种事情。除此之外,AutoHotKey 非常擅长模拟其他应用程序的击键(它比简单地使用 PostMessage/SendMessage 更复杂)。

对于定位窗口,您应该能够编写一些代码自动将您的窗口定位到 cnc 应用程序旁边,您甚至可以跟踪 cnc 应用程序的移动并相应地移动您的窗口(如果您想处理这可能会有点棘手所有特殊情况,例如如果没有足够的空间,将您的应用程序移动到不同的边缘)。

于 2013-11-15T06:31:44.010 回答