请教高手 vb 调用外部exe程序,如何让该程序后台运行

时间:2022-09-29 12:07:30
请教高手  vb 调用外部exe程序,如何让该程序后台运行
目前他会打开原先程序的界面,用vbhide 也解决不了

调用的是个 键盘设置器,程序在附件里,哪个高手帮忙给调试一下,如何能只在进程里运行,谢谢了

Private Sub Command1_Click()
Dim a As Integer
a = Shell("jp.exe", 0)
End Sub


这样实现不了, 我测试过 调用 notepad.exe 是可以隐藏到后台运行的(即只能在进程里看到)

有别的办法也行, 多谢了

30 个解决方案

#1


打开程序后,遍历其线程窗口,然后一个个ShowWindow(0)。

#2


您能否说明白一点呢,俺比较业余。 谢谢了

#3



'标准模块代码
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long


Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
    Dim pid As Long
    GetWindowThreadProcessId hwnd, pid
    If pid = lParam Then
        ShowWindow hwnd, vbHide
    End If
    EnumWindowsProc = 1
End Function

Public Function RunApp(ByVal sApp As String) As Boolean
    Dim pid As Long
    pid = Shell(sApp, vbHide)
    EnumWindows AddressOf EnumWindowsProc, pid
End Function




'窗体调用代码
Private Sub Command1_Click()
    RunApp "F:\AVConverter MP3 Converter\MP3Converter.exe"
End Sub

#4


直接调用Shell app.exe

#5


Private Sub Command1_Click()
   Shell "E:\jp.exe", vbMinimizedNoFocus
End Sub

#6


帅哥 ,程序调试不通过哦,显示

常数、固定长度字符串、数组、用户定义类型以及Declare语句,不允许作为对象模块的public成员

麻烦您再给调试一下看看,谢谢了

#7


引用 5 楼 DengXingJie 的回复:
VB codePrivate Sub Command1_Click()
   Shell "E:\jp.exe", vbMinimizedNoFocus
End Sub



这种只能最小化哦,最小化也不要显示,系统栏目也不要显示,如何才能实现哦

#8


有两个方法:

1. jp.exe不要用窗体。
2. 在 Form_Load() 事件中,把窗体设置为不可见。

#9


引用 8 楼 Chen8013 的回复:
有两个方法: 

1. jp.exe不要用窗体。 
2. 在 Form_Load() 事件中,把窗体设置为不可见。 



jp。exe 是外部程序别人的已经有窗体的。


第二种方法  ,不是很明白,麻烦您说仔细点,谢谢

#10


引用 8 楼 Chen8013 的回复:
有两个方法: 

1. jp.exe不要用窗体。 
2. 在 Form_Load() 事件中,把窗体设置为不可见。 



jp.exe 是外部程序哦,不是自己编写的。

#11


ShowWindow hwnd, SW_HIDE

#12


引用 6 楼 liushui513 的回复:
帅哥 ,程序调试不通过哦,显示 

常数、固定长度字符串、数组、用户定义类型以及Declare语句,不允许作为对象模块的public成员 

麻烦您再给调试一下看看,谢谢了


你看清楚每个代码块第一行的中文简体汉字...........

#13


引用 12 楼 myjian 的回复:
引用 6 楼 liushui513 的回复:
帅哥 ,程序调试不通过哦,显示 

常数、固定长度字符串、数组、用户定义类型以及Declare语句,不允许作为对象模块的public成员 

麻烦您再给调试一下看看,谢谢了 
 

你看清楚每个代码块第一行的中文简体汉字...........



老马,不被人理解很痛苦,我想死了....

#14


还是实现不了啊, 那个哥哥能调试好了,给个明确弄用的。  谢谢了

#15


三楼正解,代码测试通过~~~~~~~~学习了,谢谢!!

#16


引用 14 楼 liushui513 的回复:
还是实现不了啊, 那个哥哥能调试好了,给个明确弄用的。  谢谢了


上面的那块代码放到标准模块(.bas文件)

下面的那块代码放到窗体,然后窗体上放个叫Command1的命令按钮


如果你这样还调试不出来的话…… 我晚上不吃绿豆了

#17


标准模块?什么是标准模块?
窗体,什么是窗体?
放command1要怎么放?
我是把全部代码拷进去,然后直接按F5的,怎么不行?你们代码调好再发出来啊,不要误人子弟!

#18


引用 10 楼 liushui513 的回复:
引用 8 楼 Chen8013 的回复:
有两个方法: 

1. jp.exe不要用窗体。 
2. 在 Form_Load() 事件中,把窗体设置为不可见。 
 


jp.exe 是外部程序哦,不是自己编写的。


我以为是你自己编写的程序。
当我没说~~~

#19


引用 16 楼 supergreenbean 的回复:
引用 14 楼 liushui513 的回复:
还是实现不了啊, 那个哥哥能调试好了,给个明确弄用的。  谢谢了 
 

上面的那块代码放到标准模块(.bas文件) 

下面的那块代码放到窗体,然后窗体上放个叫Command1的命令按钮 


如果你这样还调试不出来的话…… 我晚上不吃绿豆了


我估计你只有吃黄豆了~~~~   请教高手 vb 调用外部exe程序,如何让该程序后台运行

#20


晚上咬胡豆...
才有味道

#21


引用 13 楼 supergreenbean 的回复:
引用 12 楼 myjian 的回复:
引用 6 楼 liushui513 的回复: 
帅哥 ,程序调试不通过哦,显示 

常数、固定长度字符串、数组、用户定义类型以及Declare语句,不允许作为对象模块的public成员 

麻烦您再给调试一下看看,谢谢了 


你看清楚每个代码块第一行的中文简体汉字........... 
 


老马,不被人理解很痛苦,我想死了....

引用 16 楼 supergreenbean 的回复:
引用 14 楼 liushui513 的回复:
还是实现不了啊, 那个哥哥能调试好了,给个明确弄用的。  谢谢了 
 

上面的那块代码放到标准模块(.bas文件) 

下面的那块代码放到窗体,然后窗体上放个叫Command1的命令按钮 


如果你这样还调试不出来的话…… 我晚上不吃绿豆了


//

哈哈哈哈哈哈哈哈哈哈

豆子可千万别有那想法~~~~~~~

咱VB版可不能少了你呀~~~~~~~~

请教高手 vb 调用外部exe程序,如何让该程序后台运行

#22


改吃巴豆吧 请教高手 vb 调用外部exe程序,如何让该程序后台运行

#23


刚下班回家 ,俺试试,纯属业余选手啊。 生百度代码 做小东西的。 谢谢各位大虾的关怀了。

#24


3楼老大,程序调试通过,但是 还是显示原程序的窗口。麻烦您再想想办法啊  我要隐藏的软件叫  JOY to key  是个游戏设置器。几百k。 麻烦老兄给调试个可以隐藏的。就是只在进程里可以看到,但是没有主窗口,包括右下角的状态栏目里也不能哟。  谢谢了。

#25


另外 例如迅雷 千千静听 之类 都不能实现隐藏的哦

#26


你加个计时器,在计时器事件中一直调用那个EnumWindows看看

#27


引用 1 楼 supergreenbean 的回复:
打开程序后,遍历其线程窗口,然后一个个ShowWindow(0)。

#28


绿豆吃巴豆没,哈哈哈哈~~~

#29


JoyToKey貌似本身就有"启动时不显示本窗口"功能~~~

至于托盘,遍历一下托盘区再隐藏之即可~~~

还有一个猥琐的方案~~~~就是新建一个桌面,把你要隐藏的程序启动到那个桌面上去 请教高手 vb 调用外部exe程序,如何让该程序后台运行

#30


怎么那多星星啊

#1


打开程序后,遍历其线程窗口,然后一个个ShowWindow(0)。

#2


您能否说明白一点呢,俺比较业余。 谢谢了

#3



'标准模块代码
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long


Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
    Dim pid As Long
    GetWindowThreadProcessId hwnd, pid
    If pid = lParam Then
        ShowWindow hwnd, vbHide
    End If
    EnumWindowsProc = 1
End Function

Public Function RunApp(ByVal sApp As String) As Boolean
    Dim pid As Long
    pid = Shell(sApp, vbHide)
    EnumWindows AddressOf EnumWindowsProc, pid
End Function




'窗体调用代码
Private Sub Command1_Click()
    RunApp "F:\AVConverter MP3 Converter\MP3Converter.exe"
End Sub

#4


直接调用Shell app.exe

#5


Private Sub Command1_Click()
   Shell "E:\jp.exe", vbMinimizedNoFocus
End Sub

#6


帅哥 ,程序调试不通过哦,显示

常数、固定长度字符串、数组、用户定义类型以及Declare语句,不允许作为对象模块的public成员

麻烦您再给调试一下看看,谢谢了

#7


引用 5 楼 DengXingJie 的回复:
VB codePrivate Sub Command1_Click()
   Shell "E:\jp.exe", vbMinimizedNoFocus
End Sub



这种只能最小化哦,最小化也不要显示,系统栏目也不要显示,如何才能实现哦

#8


有两个方法:

1. jp.exe不要用窗体。
2. 在 Form_Load() 事件中,把窗体设置为不可见。

#9


引用 8 楼 Chen8013 的回复:
有两个方法: 

1. jp.exe不要用窗体。 
2. 在 Form_Load() 事件中,把窗体设置为不可见。 



jp。exe 是外部程序别人的已经有窗体的。


第二种方法  ,不是很明白,麻烦您说仔细点,谢谢

#10


引用 8 楼 Chen8013 的回复:
有两个方法: 

1. jp.exe不要用窗体。 
2. 在 Form_Load() 事件中,把窗体设置为不可见。 



jp.exe 是外部程序哦,不是自己编写的。

#11


ShowWindow hwnd, SW_HIDE

#12


引用 6 楼 liushui513 的回复:
帅哥 ,程序调试不通过哦,显示 

常数、固定长度字符串、数组、用户定义类型以及Declare语句,不允许作为对象模块的public成员 

麻烦您再给调试一下看看,谢谢了


你看清楚每个代码块第一行的中文简体汉字...........

#13


引用 12 楼 myjian 的回复:
引用 6 楼 liushui513 的回复:
帅哥 ,程序调试不通过哦,显示 

常数、固定长度字符串、数组、用户定义类型以及Declare语句,不允许作为对象模块的public成员 

麻烦您再给调试一下看看,谢谢了 
 

你看清楚每个代码块第一行的中文简体汉字...........



老马,不被人理解很痛苦,我想死了....

#14


还是实现不了啊, 那个哥哥能调试好了,给个明确弄用的。  谢谢了

#15


三楼正解,代码测试通过~~~~~~~~学习了,谢谢!!

#16


引用 14 楼 liushui513 的回复:
还是实现不了啊, 那个哥哥能调试好了,给个明确弄用的。  谢谢了


上面的那块代码放到标准模块(.bas文件)

下面的那块代码放到窗体,然后窗体上放个叫Command1的命令按钮


如果你这样还调试不出来的话…… 我晚上不吃绿豆了

#17


标准模块?什么是标准模块?
窗体,什么是窗体?
放command1要怎么放?
我是把全部代码拷进去,然后直接按F5的,怎么不行?你们代码调好再发出来啊,不要误人子弟!

#18


引用 10 楼 liushui513 的回复:
引用 8 楼 Chen8013 的回复:
有两个方法: 

1. jp.exe不要用窗体。 
2. 在 Form_Load() 事件中,把窗体设置为不可见。 
 


jp.exe 是外部程序哦,不是自己编写的。


我以为是你自己编写的程序。
当我没说~~~

#19


引用 16 楼 supergreenbean 的回复:
引用 14 楼 liushui513 的回复:
还是实现不了啊, 那个哥哥能调试好了,给个明确弄用的。  谢谢了 
 

上面的那块代码放到标准模块(.bas文件) 

下面的那块代码放到窗体,然后窗体上放个叫Command1的命令按钮 


如果你这样还调试不出来的话…… 我晚上不吃绿豆了


我估计你只有吃黄豆了~~~~   请教高手 vb 调用外部exe程序,如何让该程序后台运行

#20


晚上咬胡豆...
才有味道

#21


引用 13 楼 supergreenbean 的回复:
引用 12 楼 myjian 的回复:
引用 6 楼 liushui513 的回复: 
帅哥 ,程序调试不通过哦,显示 

常数、固定长度字符串、数组、用户定义类型以及Declare语句,不允许作为对象模块的public成员 

麻烦您再给调试一下看看,谢谢了 


你看清楚每个代码块第一行的中文简体汉字........... 
 


老马,不被人理解很痛苦,我想死了....

引用 16 楼 supergreenbean 的回复:
引用 14 楼 liushui513 的回复:
还是实现不了啊, 那个哥哥能调试好了,给个明确弄用的。  谢谢了 
 

上面的那块代码放到标准模块(.bas文件) 

下面的那块代码放到窗体,然后窗体上放个叫Command1的命令按钮 


如果你这样还调试不出来的话…… 我晚上不吃绿豆了


//

哈哈哈哈哈哈哈哈哈哈

豆子可千万别有那想法~~~~~~~

咱VB版可不能少了你呀~~~~~~~~

请教高手 vb 调用外部exe程序,如何让该程序后台运行

#22


改吃巴豆吧 请教高手 vb 调用外部exe程序,如何让该程序后台运行

#23


刚下班回家 ,俺试试,纯属业余选手啊。 生百度代码 做小东西的。 谢谢各位大虾的关怀了。

#24


3楼老大,程序调试通过,但是 还是显示原程序的窗口。麻烦您再想想办法啊  我要隐藏的软件叫  JOY to key  是个游戏设置器。几百k。 麻烦老兄给调试个可以隐藏的。就是只在进程里可以看到,但是没有主窗口,包括右下角的状态栏目里也不能哟。  谢谢了。

#25


另外 例如迅雷 千千静听 之类 都不能实现隐藏的哦

#26


你加个计时器,在计时器事件中一直调用那个EnumWindows看看

#27


引用 1 楼 supergreenbean 的回复:
打开程序后,遍历其线程窗口,然后一个个ShowWindow(0)。

#28


绿豆吃巴豆没,哈哈哈哈~~~

#29


JoyToKey貌似本身就有"启动时不显示本窗口"功能~~~

至于托盘,遍历一下托盘区再隐藏之即可~~~

还有一个猥琐的方案~~~~就是新建一个桌面,把你要隐藏的程序启动到那个桌面上去 请教高手 vb 调用外部exe程序,如何让该程序后台运行

#30


怎么那多星星啊