Commit d762af99 authored by 潘栩锋's avatar 潘栩锋 🚴

状态栏 图标 释放

parent aa7d0d93
......@@ -8,6 +8,18 @@ namespace FLY.AppHelper
{
public class AppJustOne
{
static bool IsReboot = false;
public static void Restart()
{
//通知AppJustOne不要限制
IsReboot = true;
//重启软件
System.Windows.Forms.Application.Restart();
Application.Current.Shutdown();
}
public AppJustOne(Application app)
{
app.Startup += new StartupEventHandler(app_Startup);
......@@ -16,13 +28,10 @@ namespace FLY.AppHelper
void app_Startup(object sender, StartupEventArgs e)
{
if (Application.Current.Properties.Contains("reboot")) {
bool isReboot = (bool)Application.Current.Properties["reboot"];
Application.Current.Properties["reboot"] = false;
if (isReboot) {
return;
}
if (IsReboot)
{
IsReboot = false;
return;
}
......
......@@ -52,7 +52,6 @@
<ItemGroup>
<Compile Include="AppJustOne.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="TaskBarUtil.cs" />
<Compile Include="WindowNotifyIconHelper.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
......
using System;
using System.Runtime.InteropServices;
namespace FLY.AppHelper
{
public class TaskBarUtil
{
struct RECT
{
public int left, top, right, bottom;
}
public static void RefreshNotificationArea()
{
var notificationAreaHandle = GetNotificationAreaHandle();
if (notificationAreaHandle == IntPtr.Zero)
return;
RefreshWindow(notificationAreaHandle);
}
private static void RefreshWindow(IntPtr windowHandle)
{
const uint wmMousemove = 0x0200;
RECT rect;
GetClientRect(windowHandle, out rect);
for (var x = 0; x < rect.right; x += 5)
for (var y = 0; y < rect.bottom; y += 5)
SendMessage(
windowHandle,
wmMousemove,
0,
(y << 16) + x);
}
private static IntPtr GetNotificationAreaHandle()
{
const string notificationAreaTitle = "Notification Area";
//const string notificationAreaTitleInWindows7 = "User Promoted Notification Area";
const string notificationAreaTitleInWindows7 = "用户显示的通知区域"; //for chinese version
var systemTrayContainerHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero,
"Shell_TrayWnd", string.Empty);
var systemTrayHandle = FindWindowEx(systemTrayContainerHandle, IntPtr.Zero,
"TrayNotifyWnd", string.Empty);
var sysPagerHandle = FindWindowEx(systemTrayHandle, IntPtr.Zero, "SysPager",
string.Empty);
var notificationAreaHandle = FindWindowEx(sysPagerHandle, IntPtr.Zero,
"ToolbarWindow32",
notificationAreaTitle);
if (notificationAreaHandle == IntPtr.Zero)
notificationAreaHandle = FindWindowEx(sysPagerHandle, IntPtr.Zero,
"ToolbarWindow32",
notificationAreaTitleInWindows7);
return notificationAreaHandle;
}
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter,
string className,
string windowTitle);
[DllImport("user32.dll")]
static extern bool GetClientRect(IntPtr handle, out RECT rect);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr handle, UInt32 message, Int32 wParam,
Int32 lParam);
}
}
......@@ -22,10 +22,8 @@ namespace FLY.AppHelper
/// </summary>
/// <param name="window">窗体</param>
/// <param name="text">当鼠标指针停留在通知区域图标上时显示的工具提示文本</param>
public WindowNotifyIconHelper(System.Windows.Window window, string text)
public WindowNotifyIconHelper(System.Windows.Window window, string text)
{
TaskBarUtil.RefreshNotificationArea();
notifyIcon = new System.Windows.Forms.NotifyIcon();
//this.notifyIcon.BalloonTipText = "Hello, NotifyIcon!";
notifyIcon.Text = text;
......@@ -40,7 +38,7 @@ namespace FLY.AppHelper
//关联托盘控件
MenuItem[] childen = new MenuItem[] { exit };
notifyIcon.ContextMenu = new ContextMenu(childen);
notifyIcon.ContextMenu = new ContextMenu(childen);
//this.notifyIcon.ShowBalloonTip(1000);
......@@ -49,8 +47,16 @@ namespace FLY.AppHelper
wsl = this.window.WindowState;
this.window.StateChanged += new EventHandler(window_StateChanged);
this.window.Closing += new System.ComponentModel.CancelEventHandler(window_Closing);
Application.ApplicationExit += Application_ApplicationExit;
}
private void Application_ApplicationExit(object sender, EventArgs e)
{
notifyIcon.Dispose();
//System.Environment.Exit(0); //这个是不会触发 ApplicationExit, 但可以把全部线程清除掉
}
/// <summary>
/// 退出选项
......@@ -63,11 +69,13 @@ namespace FLY.AppHelper
if (r == System.Windows.MessageBoxResult.Yes)
{
//notifyIcon.Visible = false;
notifyIcon.Dispose();
//notifyIcon.Dispose();
//System.Windows.Application.Current.Shutdown();
System.Environment.Exit(0);
//Application.Exit();
notifyIcon.Dispose();
System.Environment.Exit(0); //这个是不会触发 ApplicationExit, 但可以把全部线程清除掉
}
}
}
void window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//this.notifyIcon.Visible = false;
......@@ -76,7 +84,7 @@ namespace FLY.AppHelper
//System.Windows.MessageBoxResult r = System.Windows.MessageBox.Show("是否真的要退出程序??", "警告", System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Warning, System.Windows.MessageBoxResult.No);
//if (r == System.Windows.MessageBoxResult.Yes)
//{
//}
//else
//{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment