【问题标题】:Appactivate method doesn't work vb.netAppactivate 方法不起作用 vb.net
【发布时间】:2013-12-19 04:54:56
【问题描述】:

我有一个从 vb6 迁移而来的 vb.net 桌面应用程序。

有一个按钮单击哪个 Shell 或 Prcess.Start 方法启动一个 exe。

现在用户调整 exe 窗口的大小。

我希望再次单击按钮将启动或刷新现有 exe 窗口中的 exe。不应打开新窗口,并且窗口大小保持用户设置的大小。

使用了 AppActivate 方法,但它只将焦点设置到现有的 exe 窗口,而不是刷新窗口上的 exe。

有没有办法做到这一点。 提前致谢。

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    您需要P/Invoke 来实现此目的。

    这是一个sn-p。刚刚测试过,似乎工作正常。

    Imports System.Diagnostics
    Imports System.Runtime.InteropServices
    
    Public Class ProcessStuff
        Private _processRunning as Process
    
        Public Sub StartOrActivate()
           If _processRunning Is Nothing
              _processRunning = ' Arguments to Start the process and retrieve the object
           Else
              ' Activate Process' Main Window
              SetForegroundWindow(_processRunning.MainWindowHandle)
           End If
        End Sub
    
        <DllImport("user32.dll")>
        Private Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean
        End Function
    
    End Class
    

    编辑:

    我可以理解您的最后评论,您希望流程为single instanced

    但是:注意,目标应用程序(进程)必须为此做好准备!

    【讨论】:

    • 我用进程 notepad.exe 对此进行了测试。我打开一个记事本,然后把它写在一些东西上。然后再次打开记事本,但它不会重新启动记事本,而是只显示上一个。
    • 然后发布一些代码。您的应用程序在 VB6 中是如何工作的?另外,这句话对我来说不清楚:“我希望再次单击按钮时将启动或刷新已经存在的 exe 窗口中的 exe”。
    • 我的意思是如果我再次重新启动相同的过程。然后它不应该打开新窗口,而是应该在具有新实例的现有窗口中启动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多