| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13274 人关注过本帖
标题:如何用VB关闭其他应用程序
只看楼主 加入收藏
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
结帖率:86.67%
收藏
已结贴  问题点数:20 回复次数:11 
如何用VB关闭其他应用程序
    我用Shell打开了一个其他的应用程序,请问如何在关闭窗口时关闭这个应用程序?
搜索更多相关主题的帖子: VB 关闭 其他 应用程序 窗口 
2017-07-23 18:20
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:941
专家分:5244
注 册:2015-8-10
收藏
得分:10 
你可以使用API函数FindWindow和PostMessage来寻找一个窗口并且关闭它。下面的范例演示如何关闭一个标题为"Calculator"的窗口。

程序代码:
'下面的代码放到模块中 
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 'FindWindowAPI函数
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 'PostMessageAPI函数
Public Const WM_CLOSE = &H10 '常用变量定义
 
'程序代码
Dim winHwnd As Long '定义一个长整形变量winHwnd
Dim RetVal As Long '定义一个长整形变量RetVal
winHwnd = FindWindow(vbNullString, "Calculator") 'API函数查找"Calculator"这个窗口
Debug.Print winHwnd '显示这个窗口句柄
If winHwnd <> 0 Then '如不为0,表示找到窗口
RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&) '向这个窗口发送关闭信息
If RetVal = 0 Then '如果返回信息为0.表示失败,未发送成功
MsgBox "Error posting message." '提示发送失败
End If
Else
MsgBox "The Calculator is not open." '提示没有找到打开的程序
End If
2017-07-23 19:20
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:10 
你用 Shell ,那就继续用 Shell  
有一个命令是 :taskkill ,用这命令直接结束进程吧。
如果第一次调用 Shell 时,保留了 pid ,那就就 pid 参数,防止结束错了,否则就只能用 映像 名了。
--------------
taskkill是用来终止进程的。具体的命令规则如下:
TASKKILL [/S [/U [/P []]]]
{ [/FI ] [/PID | /IM ] } [/F] [/T]
描述:
这个命令行工具可用来结束至少一个进程。
可以根据进程 id 或图像名来结束进程。
参数列表:
/S system 指定要连接到的远程系统。
/U [domain\]user 指定应该在哪个用户上下文
执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果忽略,提示输入。
/F 指定要强行终止的进程。
/FI filter 指定筛选进或筛选出查询的的任务。
/PID process id 指定要终止的进程的PID。
/IM image name 指定要终止的进程的图像名。通配符 '*'可用来指定所有图像名。
/T Tree kill: 终止指定的进程和任何由此启动的子进程。
/? 显示帮助/用法。
筛选器:
筛选器名 有效运算符 有效值
----------- --------------- --------------
STATUS eq, ne 运行 | 没有响应
IMAGENAME eq, ne 图像名
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 时,
mm - 钟,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用,单位为 KB
USERNAME eq, ne 用户名,格式为
[domain\]user
MODULES eq, ne DLL 名
SERVICES eq, ne 服务名
WINDOWTITLE eq, ne 窗口标题
注意: 只有带有筛选器的情况下,才能跟 /IM 切换使用通配符 '*'。
注意: 远程进程总是要强行终止,
不管是否指定了 /F 选项。

授人于鱼,不如授人于渔
早已停用QQ了
2017-07-23 22:50
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
收藏
得分:0 
回复 2楼 xiangyue0510
谢谢,可以用,请问有没有使用“对话框”或其他方法,自己选择关闭某一程序的方法?

[此贴子已经被作者于2017-7-24 12:18编辑过]

2017-07-24 12:03
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
收藏
得分:0 
回复 3楼 风吹过b
谢谢,只是我没看懂,请问能具体点吗?我在百度上找到这个,只是好像不可以。   Shell "Tskill 应用程序.exe"   

[此贴子已经被作者于2017-7-24 12:07编辑过]

2017-07-24 12:04
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:941
专家分:5244
注 册:2015-8-10
收藏
得分:0 
回复 4楼 古123
你的意思是类似于任务管理器那样的?
那你需要遍历系统进程,参考以下代码
http://bbs.
2017-07-24 12:56
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
程序代码:
Option Explicit

Dim pid As Long            '保存进程PID

Private Sub Command1_Click()
'打开记事本,保存pid
pid = Shell("notepad.exe", vbNormalFocus)
End Sub

Private Sub Command2_Click()
'关闭自己打开的记事本,使用 pid
Shell "taskkill /pid " & pid, vbHide
End Sub


vb6 测试通过。

授人于鱼,不如授人于渔
早已停用QQ了
2017-07-24 14:38
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
收藏
得分:0 
回复 6楼 xiangyue0510
谢谢
2017-07-24 18:33
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
收藏
得分:0 
回复 7楼 风吹过b
谢谢,可以用,但是我刚才试了一下,只能定义pid,定义其他可以打开,但无法关掉。且在一个窗体里打开多个应用程序时,只能关闭最后一个程序。
2017-07-24 18:39
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
你可以定义一个数组 保存每次的 pid ,然后依次调用 这个进行结束进程。
我例子,保存一个,当然只有一个。

授人于鱼,不如授人于渔
早已停用QQ了
2017-07-24 22:00
快速回复:如何用VB关闭其他应用程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030806 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved