📄 wordapplication.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 + -