⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wordapplication.cs

📁 工作时用C#编写的WPS密码测试工具,主要用于测试与MSO文件兼容(IO)而写的.功能主要是由MSO文件加密.WPS打开,再由WPS加密,再由MSO打开.每个加密都是根据文件加密类型来加的,此代码.与
💻 CS
字号:
using System;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices;
using v6SmokeTest;
using v6SmokeTest.PasswordTest.PlugIn.Global;

namespace v6SmokeTest.PasswordTest.PlugIn
{
	/// <summary>
	/// WORD应用程序服务类
	/// </summary>
	public class WORDApplication
	{
        static private Word.Document m_pWordDocument = null;
        static private Word.Application m_pWordApp = null;
		static private CaptureException m_pCapEx = null;

        /// <summary>
        /// 构造函数
        /// </summary>
		public WORDApplication()
		{
		}
		/// <summary>
		/// 传递关闭异常类对象指针
		/// </summary>
		static public CaptureException SetCaptureException
		{set{m_pCapEx = value;}}
        /// <summary>
        /// 创建应用程序实例
        /// </summary>
        /// <param name="quiet">是否显示程序主窗口</param>
        /// <returns>返回启动是否成功</returns>
        static public bool StartProcess(bool quiet)
        {
			bool _blResult = false;
			Thread _pThread = new Thread(new ThreadStart(CloseExcDlg));
			_pThread.Priority = ThreadPriority.Lowest;
			_pThread.Start();
			try
            {
                m_pWordApp = new Word.ApplicationClass();
                m_pWordApp.Visible = quiet;
                _blResult = true;
            }
            catch
            {_blResult = false;}
			try
			{
				_pThread.Abort();
				_pThread = null;
			}
			catch
			{}
			return _blResult;
		}
        /// <summary>
        /// 打开文件
        /// </summary>
        /// <param name="strFilename">打开的文件名</param>
        /// <param name="password">打开文件时的密码</param>
        /// <returns>返回打开成功与否</returns>
        static public bool OpenFile(string strFilename, string password)
        {
            int _nTryTimes = 0;
            bool _blResult = false;
            Thread _pThread = new Thread(new ThreadStart(CloseExcDlg));
            _pThread.Priority = ThreadPriority.Lowest;
            _pThread.Start();
        OpenFileTest:
            try
            {
                object[] _pArgs = {strFilename, false, false, false, password, String.Empty, 
                    false, String.Empty, String.Empty, Word.WdOpenFormat.wdOpenFormatDocument, 
                    Microsoft.Office.Core.MsoEncoding.msoEncodingSimplifiedChineseAutoDetect, true, true, 
                    Word.WdDocumentDirection.wdLeftToRight, false, String.Empty};
                m_pWordDocument = m_pWordApp.Documents.Open(ref _pArgs[0], ref _pArgs[1],
                    ref _pArgs[2], ref _pArgs[3], ref _pArgs[4], ref _pArgs[5], ref _pArgs[6], ref _pArgs[7]
                    , ref _pArgs[8], ref _pArgs[9], ref _pArgs[10], ref _pArgs[11], ref _pArgs[12]
                    , ref _pArgs[13], ref _pArgs[14], ref _pArgs[15]);
                object[] _pSubArgs = {Word.WdUnits.wdStory, Word.WdMovementType.wdMove};
                m_pWordDocument.ActiveWindow.Selection.EndKey(ref _pSubArgs[0],
                    ref _pSubArgs[1]);
                _blResult = true;
            }
            catch
            {
                if(_nTryTimes < 5)
                {
                    APIIntegrate.SleepSomeSecond("1000");
                    _nTryTimes ++;
                    goto OpenFileTest;
                }
                else
                    _blResult = false;
            }
            try
            {
                _pThread.Abort();
                _pThread = null;
            }
            catch
            {}
            return _blResult;
        }
        /// <summary>
        /// 处理输入密码对话框等异常对话框线程
        /// </summary>
        static private void CloseExcDlg()
        {
            while(1 == 1)
            {
                IntPtr _nHwnd = APIIntegrate.FindWindow("bosa_sdm_Microsoft Office Word 11.0", "密码");
                if(_nHwnd != IntPtr.Zero)
                    APIIntegrate.CloseWindow(_nHwnd);
                APIIntegrate.SleepSomeSecond("500");
                m_pCapEx.CloseExcepWin("PasswordTest", String.Empty);
                APIIntegrate.SleepSomeSecond("500");
            }
        }
        /// <summary>
        /// 转存文件
        /// </summary>
        /// <param name="targetFilename">转存为的文件名</param>
        /// <param name="provider">加密类型的提供者</param>
        /// <param name="name">加密类型名</param>
        /// <param name="password">密码信息</param>
        /// <returns>返回转存是否成功</returns>
        static public bool SaveAs(string targetFilename, string provider, string name, PasswordInf password)
        {
            bool _blResult = false;
            int _nTryTimes = 0;
			Thread _pThread = new Thread(new ThreadStart(CloseExcDlg));
			_pThread.Priority = ThreadPriority.Lowest;
			_pThread.Start();
		SaveAsFileTest:
            try
            {
                object _pArg = password.EncryFilePro;
                m_pWordDocument.SetPasswordEncryptionOptions(provider, name,
                    password.Length, ref _pArg);
				m_pWordDocument.Password = password.Password;
                object[] _pArgs = {targetFilename, Word.WdSaveFormat.wdFormatDocument, false, password.Password,true,
                String.Empty, false,false, false, false, false, 0, true, true, Word.WdLineEndingType.wdCRLF, true};
                m_pWordDocument.SaveAs(ref _pArgs[0], ref _pArgs[1], ref _pArgs[2], ref _pArgs[3],
                    ref _pArgs[4], ref _pArgs[5], ref _pArgs[6], ref _pArgs[7], ref _pArgs[8], 
                    ref _pArgs[9], ref _pArgs[10], ref _pArgs[11], ref _pArgs[12], ref _pArgs[13],
                    ref _pArgs[14], ref _pArgs[15]);
                _blResult = true;
            }
            catch
            {
                if(_nTryTimes < 5)
                {
                    APIIntegrate.SleepSomeSecond("1000");
                    _nTryTimes ++;
                    goto SaveAsFileTest;
                }
                else
                    _blResult = false;
            }
			try
			{
				_pThread.Abort();
				_pThread = null;
			}
			catch{}
			if(_blResult && File.Exists(targetFilename))
                return true;
            else
                return false;
        }
        /// <summary>
        /// 杀掉进程
        /// </summary>
        static public void DestroyProcess()
        {
            try
            {
                foreach(Process _pProcess in Process.GetProcessesByName("WINWORD"))
                    _pProcess.Kill();
            }
            catch
            {}
        }
        /// <summary>
        /// 关闭文档
        /// </summary>
        /// <returns>返回关闭成功与否</returns>
        static public bool CloseDocument()
        {
            Object[] _pPars = {0, 0, false};
            try
            {
                m_pWordDocument.Close(ref _pPars[0], ref _pPars[1], ref _pPars[2]);
                return true;
            }
            catch
            {return false;}
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -