以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何找到程序执行时的句柄的进程ID,然后杀掉该进程  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=95837)

--  作者:wh420
--  发布时间:2017/2/6 18:00:00
--  如何找到程序执行时的句柄的进程ID,然后杀掉该进程
问题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();

--  作者:有点色
--  发布时间: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
--  发布时间:2017/2/6 18:59:00
--  
GetWindowThreadProcessId用这个函数如何获得进程PID再进行KILL掉进程,不是盲目地见到EXCEL进程就杀掉。
--  作者:wh420
--  发布时间: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
--  发布时间:2017/2/6 19:00:00
--  
用msexcel的方式打开EXCEL
--  作者:有点色
--  发布时间:2017/2/6 20:10:00
--  
 那就不可能有问题。上传实例说明