Foxtable(狐表)用户栏目专家坐堂 → 如何找到程序执行时的句柄的进程ID,然后杀掉该进程


  共有1496人关注过本帖树形打印复制链接

主题:如何找到程序执行时的句柄的进程ID,然后杀掉该进程

帅哥哟,离线,有人找我吗?
wh420
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1107 积分:10562 威望:0 精华:0 注册:2014/2/19 16:32:00
如何找到程序执行时的句柄的进程ID,然后杀掉该进程  发帖心情 Post By:2017/2/6 18:00:00 [只看该作者]

问题1:程序反复打开多个EXCEL读取其中内容到狐表中,读取完成后关闭狐表,但只要程序不关闭系统进程中会有多个EXCEL进程,如何找到当前句柄的ID并杀掉该进程?
(注:曾经用过GC.Collect();来回收垃圾,但程序执行完了始终还有一个EXCEL进程无法清除)

问题2:下面代码是我在网上找的,如何修改使其在狐表中生效
IntPtr t = new IntPtr(excelApp.Hwnd);
                
int k = 0;
                GetWindowThreadProcessId(t, 
out k);
                System.Diagnostics.Process p 
= System.Diagnostics.Process.GetProcessById(k);
                p.Kill();

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/6 18:15:00 [只看该作者]

 你用什么方式打开excel?

 

 如果用vba打开,你要加入try catch,也就是最后一定要执行 app.quit 退出excel

 

 如果要kill掉进程,参考

 

Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
For Each p As System.Diagnostics.Process In ps
    output.show(p.processName)
    If ("Excel" = p.ProcessName)
        msgbox(p.MainWindowTitle)
        p.kill
    End If
Next

 


 回到顶部
帅哥哟,离线,有人找我吗?
wh420
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1107 积分:10562 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2017/2/6 18:59:00 [只看该作者]

GetWindowThreadProcessId用这个函数如何获得进程PID再进行KILL掉进程,不是盲目地见到EXCEL进程就杀掉。

 回到顶部
帅哥哟,离线,有人找我吗?
wh420
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1107 积分:10562 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2017/2/6 18:59:00 [只看该作者]

   public void Close(bool isSave)
        {
            
try
            {
                excelWorkBook.Close(isSave, Type.Missing, Type.Missing);
                excelApp.Quit();
            }
            
catch
            {
                IntPtr t 
= new IntPtr(excelApp.Hwnd);
                
int k = 0;
                GetWindowThreadProcessId(t, 
out k);
                System.Diagnostics.Process p 
= System.Diagnostics.Process.GetProcessById(k);
                p.Kill();
            }
            excelWorkBook 
= null;
            excelApp 
= null;
            GC.Collect();
        }

 回到顶部
帅哥哟,离线,有人找我吗?
wh420
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1107 积分:10562 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2017/2/6 19:00:00 [只看该作者]

用msexcel的方式打开EXCEL

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/6 20:10:00 [只看该作者]

 那就不可能有问题。上传实例说明

 回到顶部