|
|
|
|
using KGIS.Framework.Utils;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using static Kingo.Plugin.EngineEditor.Common.GetAllDesktopWindows;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using KGIS.Framework.Utils.Helper;
|
|
|
|
|
|
|
|
|
|
namespace Kingo.Plugin.EngineEditor.Common
|
|
|
|
|
{
|
|
|
|
|
public class CloseTheDesktopWindows
|
|
|
|
|
{
|
|
|
|
|
[DllImport("coredll.dll", EntryPoint = "FindWindow")]
|
|
|
|
|
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
|
|
|
|
|
|
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
|
|
|
|
|
public static extern IntPtr GetForegroundWindow();
|
|
|
|
|
|
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
|
|
|
|
|
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
|
|
|
|
|
|
|
|
|
|
//这个外部函数(非托管) 可以向句柄发送消息,关闭事件就是这个
|
|
|
|
|
[DllImport("User32.dll", EntryPoint = "SendMessage")]
|
|
|
|
|
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
|
|
|
|
|
|
|
|
|
|
public const int WM_CLOSE = 0x0010;
|
|
|
|
|
|
|
|
|
|
public bool bShowJudgeMsg = false;
|
|
|
|
|
|
|
|
|
|
public bool ToCloseTheDesktopWindows()
|
|
|
|
|
{
|
|
|
|
|
IntPtr intPtrTemp = new IntPtr(0);
|
|
|
|
|
string sNeedCloseWindowsNames = "";
|
|
|
|
|
|
|
|
|
|
string sNameT_ = "";
|
|
|
|
|
|
|
|
|
|
//右击图层
|
|
|
|
|
#region 右击图层
|
|
|
|
|
sNeedCloseWindowsNames += ",数据导入";
|
|
|
|
|
sNeedCloseWindowsNames += ",选择导入的数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",SQL";
|
|
|
|
|
sNeedCloseWindowsNames += ",图层属性";
|
|
|
|
|
sNeedCloseWindowsNames += ",选择矢量图层数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",标注表达式";
|
|
|
|
|
sNeedCloseWindowsNames += ",符号选择";
|
|
|
|
|
sNeedCloseWindowsNames += ",标注布局";
|
|
|
|
|
sNeedCloseWindowsNames += ",标注可视比例尺设置";
|
|
|
|
|
sNeedCloseWindowsNames += ",创建查询";
|
|
|
|
|
sNeedCloseWindowsNames += ",导入符号渲染";
|
|
|
|
|
sNeedCloseWindowsNames += ",符号库选择";
|
|
|
|
|
sNeedCloseWindowsNames += ",点符号旋转";
|
|
|
|
|
sNeedCloseWindowsNames += ",字段查找与替换";
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//图形编辑
|
|
|
|
|
#region 数据转换
|
|
|
|
|
sNeedCloseWindowsNames += ",画双线";
|
|
|
|
|
sNeedCloseWindowsNames += ",画线物面";
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//地图操作
|
|
|
|
|
#region 地图操作
|
|
|
|
|
sNeedCloseWindowsNames += ",新建方案";
|
|
|
|
|
sNeedCloseWindowsNames += ",测量";
|
|
|
|
|
sNeedCloseWindowsNames += ",转到XY";
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//数据导入导出
|
|
|
|
|
#region 数据导入导出
|
|
|
|
|
sNeedCloseWindowsNames += ",导入MDB数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",选择导入的数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",提示信息";
|
|
|
|
|
sNeedCloseWindowsNames += ",导入GDB数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",导入Shape数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",导入VCT数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",导入调查数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",选择监测图斑数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",选择行政区数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",选择村级调查区数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",选择地类图斑数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",导入举证数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",VCT任意范围导出";
|
|
|
|
|
sNeedCloseWindowsNames += ",自定义导出MDB数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",自定义导出GDB数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",自定义导出SHAPE数据";
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//数据转换
|
|
|
|
|
#region 数据转换
|
|
|
|
|
sNeedCloseWindowsNames += ",VCT转MDB(Personal Geodatabse)数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",VCT转GDB(File Geodatabase)数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",VCT转SHP数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",MDB转GDB";
|
|
|
|
|
sNeedCloseWindowsNames += ",MDB转SHP";
|
|
|
|
|
sNeedCloseWindowsNames += ",MDB(Personal Geodatabase)转VCT";
|
|
|
|
|
sNeedCloseWindowsNames += ",GDB转MDB";
|
|
|
|
|
sNeedCloseWindowsNames += ",GDB转SHP";
|
|
|
|
|
sNeedCloseWindowsNames += ",GDB(File Geodatabase)转VCT";
|
|
|
|
|
sNeedCloseWindowsNames += ",SHP转MDB";
|
|
|
|
|
sNeedCloseWindowsNames += ",SHP转GDB";
|
|
|
|
|
sNeedCloseWindowsNames += ",Shape转VCT";
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//查询分析(智能查询)
|
|
|
|
|
#region 查询分析(智能查询)
|
|
|
|
|
sNeedCloseWindowsNames += ",根据属性查询";
|
|
|
|
|
sNeedCloseWindowsNames += ",错误信息";
|
|
|
|
|
sNeedCloseWindowsNames += ",空间查询";
|
|
|
|
|
sNeedCloseWindowsNames += ",自定义统计";
|
|
|
|
|
sNeedCloseWindowsNames += ",空间分析";
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//变更管理
|
|
|
|
|
#region 变更管理
|
|
|
|
|
sNeedCloseWindowsNames += ",浏览文件夹";
|
|
|
|
|
sNeedCloseWindowsNames += ",整层更新数据入库";
|
|
|
|
|
sNeedCloseWindowsNames += ",选择数据";
|
|
|
|
|
sNeedCloseWindowsNames += ",举证信息";
|
|
|
|
|
sNeedCloseWindowsNames += ",导入数据字典";
|
|
|
|
|
sNeedCloseWindowsNames += ",数据字典编辑";
|
|
|
|
|
sNeedCloseWindowsNames += ",编辑字典";
|
|
|
|
|
sNeedCloseWindowsNames += ",新增字典项";
|
|
|
|
|
sNeedCloseWindowsNames += ",导出数据字典";
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//成果管理
|
|
|
|
|
#region 成果管理
|
|
|
|
|
sNeedCloseWindowsNames += ",创建变更成果模板";
|
|
|
|
|
sNeedCloseWindowsNames += ",一键变更成果导出";
|
|
|
|
|
sNeedCloseWindowsNames += ",一键整库成果输出";
|
|
|
|
|
sNeedCloseWindowsNames += ",变更成果更新入库";
|
|
|
|
|
sNeedCloseWindowsNames += ",检查设置";
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//图件制作
|
|
|
|
|
#region 图件制作
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
sNeedCloseWindowsNames += ",";
|
|
|
|
|
|
|
|
|
|
GetAllDesktopWindows allDesktopWindows = new GetAllDesktopWindows();
|
|
|
|
|
|
|
|
|
|
List<WindowInfo> windowInfoList = new List<WindowInfo>();
|
|
|
|
|
|
|
|
|
|
List<WindowInfo> windowInfoList_Judge = new List<WindowInfo>();
|
|
|
|
|
|
|
|
|
|
int iWindowxsCount_Now = 0;
|
|
|
|
|
|
|
|
|
|
int iCloseWindowsCount_Now = 0;
|
|
|
|
|
string sCloseWindowsName = "";
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
windowInfoList = allDesktopWindows.ToGetAllDesktopWindows();
|
|
|
|
|
if (windowInfoList != null && windowInfoList.Count() > 0)
|
|
|
|
|
{
|
|
|
|
|
iWindowxsCount_Now = windowInfoList.Count();
|
|
|
|
|
|
|
|
|
|
foreach (WindowInfo wInfo in windowInfoList)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrWhiteSpace(wInfo.szWindowName) == true)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sNameT_ = wInfo.szWindowName;
|
|
|
|
|
sNameT_ = sNameT_.Trim();
|
|
|
|
|
|
|
|
|
|
if (sNeedCloseWindowsNames.Contains("," + sNameT_ + ",") == true)
|
|
|
|
|
{
|
|
|
|
|
intPtrTemp = wInfo.hWnd;
|
|
|
|
|
//ShowWindow(intPtrTemp, 0);//不显示
|
|
|
|
|
SendMessage(intPtrTemp, WM_CLOSE, 0, 0);// 调用了 发送消息 发送关闭窗口的消息
|
|
|
|
|
iCloseWindowsCount_Now += 1;
|
|
|
|
|
sCloseWindowsName += sNameT_ + ",";
|
|
|
|
|
//LogAPI.Debug("当前关闭窗口名称: " + sNameT_ + " \r\n ; ");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (sNameT_.EndsWith("属性表") == true)
|
|
|
|
|
{
|
|
|
|
|
intPtrTemp = wInfo.hWnd;
|
|
|
|
|
//ShowWindow(intPtrTemp, 0);
|
|
|
|
|
SendMessage(intPtrTemp, WM_CLOSE, 0, 0);// 调用了 发送消息 发送关闭窗口的消息
|
|
|
|
|
iCloseWindowsCount_Now += 1;
|
|
|
|
|
sCloseWindowsName += sNameT_ + ",";
|
|
|
|
|
//LogAPI.Debug("当前关闭窗口名称: " + sNameT_ + " \r\n ; ");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (sNameT_.EndsWith("字段统计") == true)
|
|
|
|
|
{
|
|
|
|
|
intPtrTemp = wInfo.hWnd;
|
|
|
|
|
//ShowWindow(intPtrTemp, 0);
|
|
|
|
|
SendMessage(intPtrTemp, WM_CLOSE, 0, 0);// 调用了 发送消息 发送关闭窗口的消息
|
|
|
|
|
iCloseWindowsCount_Now += 1;
|
|
|
|
|
sCloseWindowsName += sNameT_ + ",";
|
|
|
|
|
//LogAPI.Debug("当前关闭窗口名称: " + sNameT_ + " \r\n ; ");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string sShowMsg = "";
|
|
|
|
|
sShowMsg += "关闭前 窗口数: " + iWindowxsCount_Now + " 个;\r\n";
|
|
|
|
|
sShowMsg += "关闭数: " + iCloseWindowsCount_Now + " 个:\r\n ";
|
|
|
|
|
sShowMsg += "关闭窗口名字: " + sCloseWindowsName + " :\r\n ";
|
|
|
|
|
|
|
|
|
|
windowInfoList_Judge = allDesktopWindows.ToGetAllDesktopWindows();
|
|
|
|
|
if (windowInfoList_Judge != null && windowInfoList_Judge.Count() > 0)
|
|
|
|
|
{
|
|
|
|
|
sShowMsg += "关闭后 窗口数: " + windowInfoList_Judge.Count() + " 个;\r\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (bShowJudgeMsg == true)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(sShowMsg);
|
|
|
|
|
MessageHelper.Show(sShowMsg, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("关闭其他窗口 时失败,异常原因: " + ex + " ; ");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
if (windowInfoList != null && windowInfoList.Count() > 0)
|
|
|
|
|
{
|
|
|
|
|
windowInfoList = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|