VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1551|回复: 7

我用SHELL打开一个可执行文件,又怎么关闭它呢?

[复制链接]

3

主题

10

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-11-4 13:00:01 | 显示全部楼层 |阅读模式
我用SHELL打开一个可执行文件,又怎么关闭它呢?
回复

使用道具 举报

0

主题

18

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-11-4 16:00:01 | 显示全部楼层
OpenProcess()的第一个叁数,指的是所取得的hProcess所具有的能力,像PROCESS_QUERY_INFORMATION  便是让GetExitCode()可取得hProcess所指的process之状态,而PROCESS_TERMINATE,便是让TerminateProcess(hProcess..)的指令能够生效,也就是说,不同叁数设定,使hProcess所具有的权限、能力有所不同。  

所以,你只要使OpenProcess()的第一个叁数为PROCESS_TERMINATE就可以了关闭了,当然,针对于TerminateProcess(hProcess,  3838)你最好将第一个参数设为PROCESS_TERMINATE  Or  PROCESS_QUERY_INFORMATION,下面是修改后的代码:  

Option  Explicit  
Const  PROCESS_QUERY_INFORMATION  =  &H400  
Const  PROCESS_TERMINATE  =  &H1  
Private  Declare  Function  OpenProcess  Lib  "kernel32"  (ByVal  dwDesiredAccess  As  Long,  ByVal  bInheritHandle  As  Long,  ByVal  dwProcessId  As  Long)  As  Long  
Private  Declare  Function  CloseHandle  Lib  "kernel32"  (ByVal  hObject  As  Long)  As  Long  
Private  Declare  Function  TerminateProcess  Lib  "kernel32"  (ByVal  hProcess  As  Long,  ByVal  uExitCode  As  Long)  As  Long  

Sub  main()  
       Dim  ProcessId  As  Long  
       Dim  hProcess    As  Long  
       ProcessId  =  Shell("notepad.exe",  1)  '此处利用了  Shell当函数使用时返回的任务标识  
       hProcess  =  OpenProcess(PROCESS_TERMINATE  Or  PROCESS_QUERY_INFORMATION,  False,  ProcessId)  
       Call  TerminateProcess(hProcess,  3838)  
End  Sub  
回复

使用道具 举报

1

主题

11

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-11-4 17:30:01 | 显示全部楼层
shell开的程序窗体很容易监视的
回复

使用道具 举报

1

主题

11

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-11-4 17:45:02 | 显示全部楼层
关闭SHELL出来的程序   
  Option   Explicit   
  Const   PROCESS_QUERY_INFORMATION   =   &H400   
  Const   PROCESS_TERMINATE   =   &H1   
   
  Dim   ProcessId   As   Long   
  Dim   hProcess     As   Long   
   
  Private   Declare   Function   OpenProcess   Lib   "kernel32"   (ByVal   dwDesiredAccess   As   Long,   ByVal   bInheritHandle   As   Long,   ByVal   dwProcessId   As   Long)   As   Long   
  Private   Declare   Function   CloseHandle   Lib   "kernel32"   (ByVal   hObject   As   Long)   As   Long   
  Private   Declare   Function   TerminateProcess   Lib   "kernel32"   (ByVal   hProcess   As   Long,   ByVal   uExitCode   As   Long)   As   Long   
   
  Private   Sub   Command1_Click()   
  ProcessId   =   Shell("notepad.exe",   1)   '此处利用了   Shell当函数使用时返回的任务标识   
  End   Sub   
   
  Private   Sub   Command2_Click()   
  hProcess   =   OpenProcess(PROCESS_TERMINATE   Or   PROCESS_QUERY_INFORMATION,   False,   ProcessId)   
  Call   TerminateProcess(hProcess,   3838)   
  End   Sub

保存下句柄然后结束就可以了
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-11-4 18:00:02 | 显示全部楼层
呵呵~ 学习了  收藏了!
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-11-4 18:15:01 | 显示全部楼层
使用CloseWindow多好...
回复

使用道具 举报

0

主题

18

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-11-4 18:30:01 | 显示全部楼层
使用CloseWindow多好  -----------------------------
这个你还需要findwindow
回复

使用道具 举报

1

主题

2

帖子

1.00

积分

新手上路

Rank: 1

积分
1.00
发表于 2021-2-2 16:12:08 | 显示全部楼层
大佬們有沒有做過桌面管理類的項目啊,求教桌面右鍵怎麽實現功能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表