You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
254 lines
10 KiB
254 lines
10 KiB
using Container.Common;
|
|
using Container.Model;
|
|
using Container.Services;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Shapes;
|
|
|
|
namespace Container.ChildWindows
|
|
{
|
|
/// <summary>
|
|
/// UCAppButton.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class UCAppButton : UserControl
|
|
{
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
static extern IntPtr FindWindow(string lpWindowClass, string lpWindowName);
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
|
|
const int GWL_HWNDPARENT = -8;
|
|
[DllImport("user32.dll")]
|
|
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
|
|
[DllImport("user32.dll")]
|
|
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
|
|
public static extern bool ShowWindow(System.IntPtr hWnd, int nCmdShow);
|
|
public static int SW_SHOW = 5;
|
|
public static int SW_NORMAL = 1;
|
|
public static int SW_MAX = 3;
|
|
public static int SW_HIDE = 0;
|
|
public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); //窗体置顶
|
|
public static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2); //取消窗体置顶
|
|
public static readonly IntPtr HWND_BOTTOM = new IntPtr(1); //取消窗体置顶
|
|
|
|
|
|
public const uint SWP_NOMOVE = 0x0002; //不调整窗体位置
|
|
public const uint SWP_NOSIZE = 0x0001; //不调整窗体大小
|
|
Class_Log log = new Class_Log();
|
|
App app = ((App)System.Windows.Application.Current);
|
|
string ProcessName = "";
|
|
AppListModel AppInfo = new AppListModel();
|
|
public UCAppButton(AppListModel ExeInfo)
|
|
{
|
|
InitializeComponent();
|
|
AppInfo = ExeInfo;
|
|
//this.DataContext = ExeInfo;
|
|
//this.mask.DataContext = ExeInfo;
|
|
Uri uri = new Uri(ExeInfo.Logo, UriKind.Relative);
|
|
//ImageBrush ib = new ImageBrush();
|
|
//image.Source = new BitmapImage(uri);
|
|
//Uri uri = new Uri(logo, UriKind.Absolute);
|
|
this.image.Source = BitmapFrame.Create(uri);
|
|
txtName.Text = ExeInfo.Name;
|
|
this.MouseLeftButtonUp += new MouseButtonEventHandler(this_MouseLeftButtonDown);
|
|
}
|
|
|
|
private void this_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
|
{
|
|
Window w = ((Canvas)(((Canvas)this.Parent).Parent)).Parent as Window;
|
|
w.Close();
|
|
//打开应用
|
|
try
|
|
{
|
|
app.appClick = true;
|
|
if (!AppInfo.Code.Equals(app.AppPlayinfo.Code))
|
|
{
|
|
if (app.NowAppType != "html" && app.NowAppType != "bat" && app.NowAppType != "")
|
|
{
|
|
killExE();
|
|
}
|
|
////else if (app.NowAppType == "html")
|
|
////{
|
|
//// app.winh5.WinClose();
|
|
//// //app.winh5 = null;
|
|
////}
|
|
string fileName = AppInfo.Startup;
|
|
//if (string.IsNullOrEmpty(AppInfo.Startup))
|
|
//{
|
|
// fileName = AppInfo.Startup;
|
|
//}
|
|
//else
|
|
//{
|
|
// fileName = AppInfo.exestartname + "/" + AppInfo.exestartname;
|
|
//}
|
|
if (StartExE(fileName))
|
|
{
|
|
app.AppPlayinfo = AppInfo;
|
|
//app.AppPlayName = ProcessName;
|
|
//app.AppPlayNameCH = "";
|
|
//app.Appversion = "";
|
|
IntPtr Win = FindWindow(null, "WindowButton"); //CustomBar是我的程序中需要置顶的窗体的名字
|
|
if (Win != null)
|
|
{
|
|
SetWindowPos(Win, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
}
|
|
else
|
|
{
|
|
if (app.AppList != null && app.AppList.Count > 1)
|
|
{
|
|
WindowButton win = new WindowButton();
|
|
win.Show();
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
app.AppPlayName = "";
|
|
app.CurAppPlayName = app.AppPlayName;
|
|
app.AppPlayNameCH = "";
|
|
app.Appversion = "";
|
|
//打开失败
|
|
}
|
|
|
|
}
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
// MessageBox.Show(ex.ToString());
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 打开外部exe应用程序
|
|
/// <param name="path">应用程序地址</param>
|
|
/// </summary>
|
|
private bool StartExE(string path,string param = "")
|
|
{
|
|
try
|
|
{
|
|
if (!File.Exists(path))
|
|
{
|
|
//System.Windows.MessageBox.Show("应用程序打开失败:。。。" + path + " 文件不存在");
|
|
log.WriteLogFile("应用程序打开失败:" + path + " 文件不存在","UCAppButtonlog");
|
|
return false;
|
|
}
|
|
|
|
if (path.Substring(path.Length - 4, 4).ToLower().Equals(".bat"))
|
|
{
|
|
param = "";
|
|
Process myprocess = new Process();
|
|
ProcessStartInfo startInfo = new ProcessStartInfo(path, param);
|
|
path = path.Replace("\\", "/");
|
|
startInfo.WorkingDirectory = path.Substring(0, path.LastIndexOf("/"));//设置应用程序在其所在目录
|
|
startInfo.Verb = "runas";
|
|
startInfo.CreateNoWindow = true;
|
|
myprocess.StartInfo = startInfo;
|
|
myprocess.StartInfo.UseShellExecute = false;
|
|
myprocess.Start();
|
|
//MyProcessName.Add("chrome");
|
|
app.AppPlayName = "chrome";
|
|
app.CurAppPlayName = app.AppPlayName;
|
|
app.NowAppType = "bat";
|
|
//startexe = true;
|
|
//timer.Start();
|
|
log.WriteLogFile("打开成功111", "startlog");
|
|
}
|
|
else
|
|
{
|
|
Process myprocess = new Process();
|
|
path = path.Replace("\\", "/").Replace("//", "/");
|
|
ProcessStartInfo startInfo = new ProcessStartInfo(path, param);
|
|
startInfo.WorkingDirectory = path.Substring(0, path.LastIndexOf("/"));//设置应用程序在其所在目录
|
|
startInfo.Verb = "runas";
|
|
startInfo.CreateNoWindow = true;
|
|
myprocess.StartInfo = startInfo;
|
|
myprocess.StartInfo.UseShellExecute = false;
|
|
log.WriteLogFile(startInfo.WorkingDirectory);
|
|
log.WriteLogFile(startInfo.FileName);
|
|
myprocess.Start();
|
|
//MyProcessName.Add(myprocess.ProcessName);
|
|
app.NowAppType = "exe";
|
|
app.AppPlayName = myprocess.ProcessName;
|
|
app.CurAppPlayName = app.AppPlayName;
|
|
//startexe = true;
|
|
}
|
|
//Process myprocess = new Process();
|
|
//ProcessStartInfo startInfo = new ProcessStartInfo(path, param);
|
|
//path = path.Replace("\\", "/");
|
|
//startInfo.WorkingDirectory = path.Substring(0, path.LastIndexOf("/"));//设置应用程序在其所在目录工作
|
|
//myprocess.StartInfo = startInfo;
|
|
//myprocess.StartInfo.UseShellExecute = false;
|
|
//myprocess.Start();
|
|
//ProcessName = myprocess.ProcessName;
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString(), "UCAppButtonlog");
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 关闭已打开外部应用程序
|
|
/// </summary>
|
|
private bool killExE()
|
|
{
|
|
try
|
|
{
|
|
if (app.NowAppType == "exe")
|
|
{
|
|
Process[] pro = Process.GetProcesses();
|
|
for (int i = 0; i < pro.Length; i++)
|
|
{
|
|
if (pro[i].ProcessName.ToLower() == app.AppPlayName.ToLower())
|
|
{
|
|
pro[i].Kill();//结束进程
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
else if (app.NowAppType == "html")
|
|
{
|
|
//this.Dispatcher.Invoke(new Action(() =>
|
|
//{
|
|
// try
|
|
// {
|
|
// if (app.winh5 != null)
|
|
// app.winh5.Close();
|
|
// }
|
|
// catch { }
|
|
//}));
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString(), "UCAppButtonlog");
|
|
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|