VerySource

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

程序关闭了,但进程中仍存在,有时要等几分钟才能关闭。怎样才能避免这种情况?

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-7 20:00:01 | 显示全部楼层 |阅读模式
程序关闭了,但进程中仍存在,有时要等几分钟才能关闭。由于我的程序只允许打开一次,如果打开后再执行程序时系统会提示“系统已打开”,虽然程序关闭了,但由于进程仍然存在,此时便会使用户莫明其妙了。怎样才能避免这种情况?
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-8-9 02:00:02 | 显示全部楼层
不用等几分钟吧.几秒就可以了啊
回复

使用道具 举报

2

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-8-16 01:15:01 | 显示全部楼层
是不是有太多未DESTORY的资源在被系统回收中?
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-17 07:00:02 | 显示全部楼层
可能是系统忙
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-17 07:30:01 | 显示全部楼层
在close里面halt试试
回复

使用道具 举报

0

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-18 14:45:02 | 显示全部楼层

我不知道你指的是关闭某个窗口还是某个应用程序进程。如果是某个应用程序进程,则可以参
考以上的代码,可以结束任意进程。只要传入一个进程名称就可以。
回复

使用道具 举报

0

主题

4

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-18 15:00:02 | 显示全部楼层
//创建非可视对象uf_get_exename   
   
  //声明local   external   function(api)     
  Function   Long   CreateToolhelp32Snapshot(Long   Flags,Long   ProcessId)   Library   "kernel32.dll"   
  Function   Integer   Process32First(uLong   Snapshot,ref   s_Process   Process)   Library   "kernel32.dll"   
  Function   Integer   Process32Next(uLong   Snapshot,ref   s_Process   Process)   Library   "kernel32.dll"   
   
  //声明前先创建结构   
  unsignedlong structsize   
  unsignedlong usage   
  unsignedlong processid   
  unsignedlong defaultheapid   
  unsignedlong moduleid   
  unsignedlong threads   
  unsignedlong parentprocessid   
  unsignedlong classbase   
  unsignedlong flags   
  character                   filename[260]   
  //构造对象uf_get_exename的函数of_getexe()   
   
  ///////////////////////////of_getexe()////////////////////////   
  功能:枚举进程并返回指定进程号PID   
  传入:无   
  返回:Long   
  /////////////////////////////////////////////////////////////   
   
  s_Process   lst_Process   
  string   ls_filename[100]   ,ls_curexename   
  ulong   ln_ProcessID,ln_SameCount,ln_Snapshot,ln_Circle,ln_Count,ul_PID   
   
  ul_PID   =   0   
  ln_Snapshot   =   CreateToolhelp32Snapshot(2,0)   
  if   (ln_Snapshot<1)   then   return   0   
  lst_Process.StructSize   =   296   
   
  if   Process32First(ln_Snapshot,lst_Process)=0   then   return   0   
   
  //枚举当前权限下的进程   
  debugbreak()   
  do while   true   
   
  if   Process32Next(ln_Snapshot,lst_Process)=0   then   exit   
  ln_Count   =   ln_Count   +   1   
  ls_FileName[ln_Count]   =   lst_Process.FileName   
  If   Lower(ls_FileName[ln_Count])   =   'iexplore.exe'   Then     
  //取得进程号   
  ul_PID   =   lst_Process.ProcessID   
  //messagebox(string(ul_PID),ls_FileName[ln_Count])   
  End   If   
   
  loop   
   
  return   ul_PID   
   
  //接下来   
  //创建一个窗体,上面放一按钮cb_click   
   
  //在窗体声明local   external   function(api)     
  FUNCTION   ulong   TerminateProcess(ulong   hProcess,ulong   uExitCode)   LIBRARY   "kernel32.dll"   
  FUNCTION   ulong   OpenProcess(ulong   dwDesiredAccess,ulong   bInheritHandle,ulong   dwProcessId)   LIBRARY   "kernel32.dll"   
   
  //cb_click的clicked事件   
   
  uf_get_exename       luf_get_exename   
   
   
  INTEGER     li_rc   
  ULONG         ul_PID   
  ULONG         PROCESS_TERMINATE   =   0001   
  ULONG         hwdprocess   
   
  If   messagebox('结束进程','确定吗?Kill?',question!,yesno!,1)   =   2   Then   return   
   
  //创建实例变量   
  luf_get_exename   =   create   uf_get_exename   
  //获取指定进程号   
  ul_PID   =   luf_get_exename.of_getexe()   
   
  If   ul_PID   =   0   Then     
        Messagebox('结束进程','没有发现IE进程!')   
        return   
  End   If   
   
  If   ul_PID   <>   0   Then   
  //获取指定进程号的进程句柄   
  hwdprocess   =   OpenProcess(PROCESS_TERMINATE,1,ul_PID)   
  //messagebox('',string(hwdprocess))   
    //结束进程,成功返回非零   
  li_rc   =   TerminateProcess(hwdprocess,0)   
  If   li_rc   <>   0   Then   Messagebox('结束进程','成功结束进程!')   
  End   If   
   
   
  Destroy     luf_get_exename;
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-27 11:45:01 | 显示全部楼层
我是出现程序出错时,才会在进程中不消失的情况。
回复

使用道具 举报

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

本版积分规则

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

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