zoukankan      html  css  js  c++  java
  • [转]C# 关闭嵌在程序中的word进程而不关闭用户通过word手动打开的word进程

     

    命名空间 :System.Diagnostics

          以前在word的时候,经常碰到word进程产生一大堆,怕关错了,把用户自己打开的word也关闭,一直搞忽悠,今天上网花了10块钱,下了个文件,给我了一点启发,总于可以实现只关闭程序中打开的,,,我自己测试了,是可以实现的,各位也可以copy去试试,不行的话,给我留言。。。

                   //以下的定义为打开或保存word文件时,需要用到得参数

                    object confirmConversions = Type.Missing;
                    object readOnly = Type.Missing;
                    object addToRecentFiles = Type.Missing;
                    object passwordDocument = Type.Missing;
                    object passwordTemplate = Type.Missing;
                    object revert = Type.Missing;
                    object writePasswordDocument = Type.Missing;
                    object writePasswordTemplate = Type.Missing;
                    object format = Type.Missing;
                    object encoding = Type.Missing;
                    object visible = Type.Missing;
                    object openConflictDocument = Type.Missing;
                    object openAndRepair = Type.Missing;
                    object documentDirection = Type.Missing;
                    object noEncodingDialog = Type.Missing;
                    object missing = Type.Missing;
                    object filename = Filename;
                    object saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges; //解决normal.dot问题


                    Microsoft.Office.Interop.Word._Application wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
                    Microsoft.Office.Interop.Word._Document wordDoc = null;
                    try
                    {
                         
                        //打开Word文档对象  
                        wordDoc = wordApp.Documents.Open(ref filename, ref confirmConversions, ref readOnly, ref addToRecentFiles, ref passwordDocument, ref passwordTemplate, ref revert, ref writePasswordDocument, ref writePasswordTemplate, ref format, ref encoding, ref visible, ref openConflictDocument, ref openAndRepair, ref documentDirection, ref noEncodingDialog);
                        wordDoc.AcceptAllRevisions(); //接收word中所有的修订
                        wordDoc.Save();//保存
                        wordDoc.Close(ref missing, ref missing, ref missing);
                        wordApp.Application.Quit(ref saveOption, ref missing, ref missing);
                    }
                    catch { }
                    finally
                    {

                        //杀死打开的word进程
                        Process myProcess = new Process();
                        Process[] wordProcess = Process.GetProcessesByName("winword");
                        try
                        {
                            foreach (Process pro in wordProcess) //这里是找到那些没有界面的Word进程
                            {
                               IntPtr ip= pro.MainWindowHandle;

                               string str = pro.MainWindowTitle; //发现程序中打开跟用户自己打开的区别就在这个属性
                                //用户打开的str 是文件的名称,程序中打开的就是空字符串
                                if (string.IsNullOrEmpty(str))
                                {
                                    pro.Kill();
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            ex.ToString();
                        }

                    }
                }
                catch (Exception ex)
                {
                    bl = false;
                }

  • 相关阅读:
    react dva 的 connect 与 @connect
    es6 解构赋值 新认知/新习惯
    从一到面试题了解js异步机制:setTimeout 和 Pronmise
    React.Fragment 的作用:代替div作为外层
    解决dva dispatch yield生成器函数中异常中断,无法继续调用的问题
    vue v-model 与 组件化的表单组件如何沟通
    react 事件绑定的2种常用方式
    React dva 的使用
    gulp#4.0 Did you forget to signal async completion?
    gulp#4.0
  • 原文地址:https://www.cnblogs.com/tianjiaxiaobaicai/p/4812160.html
Copyright © 2011-2022 走看看