/******************************
* 说明:窗口管理类
* 创建人:龚宇超
* 创建日期:2017-08-16
* 修改人:
* 修改日期:
* 修改备注:
* 版本:1.0.0.0
******************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace Lskj.Util
{
///
/// 窗口管理类
///
public sealed class FormHelper
{
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string className, string frmText);
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
public static extern int ShowWindow(IntPtr hwnd, int showWay);
public static IntPtr frmHwnd;
///
/// C#库标准调用模式
///
///
///
public static IForm LoadDllForm(string DllFileName, string[] args)
{
try
{
Console.WriteLine("反射开始:" + DateTime.Now);
DllFileName = DllFileName.Replace("\\r", "").Replace("\\t", "").Replace("\\n", "");
DllFileName = DllFileName.Equals("Lskj.PubAccraditationBrp.dll") ? "Lskj.PubAccraditation.dll" : DllFileName;
DllFileName = DllFileName.Equals("Lskj.PubBatchBrower.dll") ? "Lskj.PubBrower.dll" : DllFileName;
DllFileName = DllFileName.Equals("Lskj.SweepCodeSearch.dll") ? "Lskj.SweepCode.dll" : DllFileName;
DllFileName = DllFileName.Equals("Lskj.PubModuleDetailSearch.dll") ? "Lskj.PubModuleDetail.dll" : DllFileName.Equals("Lskj.PubModuleSearch.dll") ? "Lskj.PubModule.dll" : DllFileName.Equals("Lskj.PubModuleDetailSearch3.dll") ? "Lskj.PubModuleDetail3.dll" : DllFileName;
if (Lskj.Model.ERPInfo.Instance.PrimitiveBrowser && (DllFileName.Equals("Lskj.PubBrower.dll", StringComparison.CurrentCultureIgnoreCase) || DllFileName.Equals("Lskj.PubBrower2.dll", StringComparison.CurrentCultureIgnoreCase)))
{
DllFileName = "Lskj.PubBrowerXp.dll";
}
if (DllFileName.Equals("Lskj.PubCodeDesign1.dll"))
{
DllFileName = "Lskj.PubCodeDesign.dll";
args = args.Concat(new string[] { "", "1" }).ToArray();
}
//DllFileName = "Lskj.PubTabDll.dll";
string libPath = DllFileName.Trim().ToLower().Equals("lskj.pubbrowser.dll") ? PubUtil.AbsolutelyBrowserPath + DllFileName : PubUtil.AbsolutelyLibPath + DllFileName;
Assembly _Assembly = Assembly.UnsafeLoadFrom(libPath);
Type[] _types = _Assembly.GetTypes();
foreach (Type _type in _types)
{
if (!_type.ToString().EndsWith(".DllBaseClass"))
continue;
object[] ol = new object[] { args };
Console.WriteLine("反射完成:" + DateTime.Now);
//根据类型创建一个类并将参数通过构造函数传入
return Activator.CreateInstance(_type, ol) as IForm;
}
return null;
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex);
throw;
}
}
///
/// 说明:C#打开exe程序
/// 创建人:龚宇超
/// 创建日期:2017-08-16
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public static void StartProcess(string exeName, string[] args = null)
{
try
{
Process[] myprocess = Process.GetProcessesByName(exeName);
if (myprocess.Count() == 0)//判断如果存在
{
if (args == null) args = new string[] { };
string arg = string.Empty;
foreach (string s in args)
{
arg += s + " ";
}
Process myproces = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo(exeName + ".exe", arg.Trim());
myproces.StartInfo = startInfo;
myproces.StartInfo.UseShellExecute = false;
myproces.Start();
}
}
catch (Exception ex)
{
LogHelper.Instance.WriteError(ex);
throw;
}
}
}
}