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,14 +28,11 @@ 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) {
if (IsReboot)
{
IsReboot = false;
return;
}
}
Process process = Process.GetCurrentProcess();
......
......@@ -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);
}
}
......@@ -24,8 +24,6 @@ namespace FLY.AppHelper
/// <param name="text">当鼠标指针停留在通知区域图标上时显示的工具提示文本</param>
public WindowNotifyIconHelper(System.Windows.Window window, string text)
{
TaskBarUtil.RefreshNotificationArea();
notifyIcon = new System.Windows.Forms.NotifyIcon();
//this.notifyIcon.BalloonTipText = "Hello, NotifyIcon!";
notifyIcon.Text = text;
......@@ -49,6 +47,14 @@ 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, 但可以把全部线程清除掉
}
......@@ -63,9 +69,11 @@ 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)
......
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