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

状态栏 图标 释放

parent aa7d0d93
...@@ -8,6 +8,18 @@ namespace FLY.AppHelper ...@@ -8,6 +8,18 @@ namespace FLY.AppHelper
{ {
public class AppJustOne 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) public AppJustOne(Application app)
{ {
app.Startup += new StartupEventHandler(app_Startup); app.Startup += new StartupEventHandler(app_Startup);
...@@ -16,14 +28,11 @@ namespace FLY.AppHelper ...@@ -16,14 +28,11 @@ namespace FLY.AppHelper
void app_Startup(object sender, StartupEventArgs e) void app_Startup(object sender, StartupEventArgs e)
{ {
if (Application.Current.Properties.Contains("reboot")) { if (IsReboot)
bool isReboot = (bool)Application.Current.Properties["reboot"]; {
Application.Current.Properties["reboot"] = false; IsReboot = false;
if (isReboot) {
return; return;
} }
}
Process process = Process.GetCurrentProcess(); Process process = Process.GetCurrentProcess();
......
...@@ -52,7 +52,6 @@ ...@@ -52,7 +52,6 @@
<ItemGroup> <ItemGroup>
<Compile Include="AppJustOne.cs" /> <Compile Include="AppJustOne.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="TaskBarUtil.cs" />
<Compile Include="WindowNotifyIconHelper.cs" /> <Compile Include="WindowNotifyIconHelper.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <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 ...@@ -24,8 +24,6 @@ namespace FLY.AppHelper
/// <param name="text">当鼠标指针停留在通知区域图标上时显示的工具提示文本</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(); notifyIcon = new System.Windows.Forms.NotifyIcon();
//this.notifyIcon.BalloonTipText = "Hello, NotifyIcon!"; //this.notifyIcon.BalloonTipText = "Hello, NotifyIcon!";
notifyIcon.Text = text; notifyIcon.Text = text;
...@@ -49,6 +47,14 @@ namespace FLY.AppHelper ...@@ -49,6 +47,14 @@ namespace FLY.AppHelper
wsl = this.window.WindowState; wsl = this.window.WindowState;
this.window.StateChanged += new EventHandler(window_StateChanged); this.window.StateChanged += new EventHandler(window_StateChanged);
this.window.Closing += new System.ComponentModel.CancelEventHandler(window_Closing); 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 ...@@ -63,9 +69,11 @@ namespace FLY.AppHelper
if (r == System.Windows.MessageBoxResult.Yes) if (r == System.Windows.MessageBoxResult.Yes)
{ {
//notifyIcon.Visible = false; //notifyIcon.Visible = false;
notifyIcon.Dispose(); //notifyIcon.Dispose();
//System.Windows.Application.Current.Shutdown(); //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) 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