vb.net2015 调用外部exe程序,如何让该程序后台运行

p_flag 2020-08-22 03:17:06
vb.net2015 调用外部exe程序,如何让该程序后台运行,要打开的exe也是用vb.net2015写的
如果不能这么操作是否有办法可以修改要exe的程序,让它打开就后台运行
...全文
26110 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
良朋 2020-09-02
  • 打赏
  • 举报
回复
引用 2 楼 p_flag 的回复:
是有界面的,应该如何实现呢,效果(和主程序一起启动,在后台运行,主程序有个按钮,可以随时查看这个后台程序画面,查看完再点一个按钮,让其继续后台运行)
让它一启动就最小化到托盘,点击托盘图标,再让它正常化。

    '最小化可替代
    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        '最小化时显示托盘图标
        If Me.WindowState = FormWindowState.Minimized Then
            Call hideForm_and_showNotifyIcon()
        End If
    End Sub

    '单击图标的时候,如果已经隐藏,则显示form,如果显示状态,则最小化
    Private Sub NotifyIcon1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles NotifyIcon1.Click
        With Me
            If .Visible = True Then
                Call hideForm_and_showNotifyIcon()
            Else
                Call showForm_and_hideNotifyIcon()
            End If
        End With
    End Sub
    Private Sub showForm_and_hideNotifyIcon()
        With Me
            .Visible = True                         '显示form
            .ShowInTaskbar = True                   '在任务栏显示
            '.NotifyIcon1.Visible = False            '将托盘图标取消,可选项
            .WindowState = FormWindowState.Normal   '因为之前最小化了,现在要恢复为常规窗体显示
            '显示窗体时置顶,但不需要一直置顶,所以再设置false
            .TopMost = True
            .TopMost = False
        End With
    '隐藏form,并在托盘显示图标(Notifyicon的图标必须先设置好)
    Private Sub hideForm_and_showNotifyIcon()
        With Me
            .Visible = False            '隐藏form
            .ShowInTaskbar = False      '不在任务栏显示
            .NotifyIcon1.Visible = True '显示托盘图标
        End With
    End Sub
p_flag 2020-08-28
  • 打赏
  • 举报
回复
这个能后台打开,那么我通过什么函数能让后台的exe再显示出画面呢,不要关闭后再打开,要直接显示的
threenewbee 2020-08-25
  • 打赏
  • 举报
回复
在对方程序支持的前提下,用ShellExecute调用的时候最后一个参数指定 sw_hide
p_flag 2020-08-25
  • 打赏
  • 举报
回复
楼上您好,您这个不是vb.net吧,都报错呢,函数都不认
p_flag 2020-08-24
  • 打赏
  • 举报
回复
是有界面的,应该如何实现呢,效果(和主程序一起启动,在后台运行,主程序有个按钮,可以随时查看这个后台程序画面,查看完再点一个按钮,让其继续后台运行)
sprc_lcl 2020-08-24
  • 打赏
  • 举报
回复
string profn = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, tdtag, "xxx.exe"); pro = Process.Start(profn, trackfn); pro.WaitForInputIdle(5000);//等待进程空闲 if (pro.HasExited) throw new Exception("程序启动失败!"); while (apph == IntPtr.Zero && !pro.HasExited) { apph = pro.MainWindowHandle; Thread.Sleep(10); } if (pro.HasExited) throw new Exception("程序启动失败!"); //指定程序父对象 WinApi.SetParent(apph, this.panel1.Handle); //窗体显示样式 WinApi.SetWindowLong(apph, WinApi.GWL_STYLE, WinApi.WS_VISIBLE); //移动定义程序大小 WinApi.MoveWindow(apph, 0, 0, this.panel1.Width, this.panel1.Height, true); //其它:通知进程关闭 WinApi.PostMessage(apph, 0x10, 0, 0); [DllImport("user32.dll", SetLastError = true)] public static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll", EntryPoint = "GetWindowLongA", SetLastError = true)] public static extern long GetWindowLong(IntPtr hwnd, int nIndex); [DllImport("user32.dll")] public static extern long SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong); [DllImport("user32.dll", SetLastError = true)] public static extern long SetWindowPos(IntPtr hwnd, long hWndInsertAfter, long x, long y, long cx, long cy, long wFlags); [DllImport("user32.dll", SetLastError = true)] public static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint); [DllImport("user32.dll", EntryPoint = "PostMessageA", SetLastError = true)] public static extern bool PostMessage(IntPtr hwnd, uint Msg, long wParam, long lParam); 具体你测试一下
p_flag 2020-08-24
  • 打赏
  • 举报
回复
如果实现可以追加分数
p_flag 2020-08-24
  • 打赏
  • 举报
回复
各位大侠版主帮忙看看能否实现,谢谢
glen30 2020-08-23
  • 打赏
  • 举报
回复
如果外部的exe是没有图形界面的dos程序,是可以后台运行的
有图形界面的应该不行

16,718

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧