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

尝试 强制刷新 window 的状态栏, 失败了

parent c5d98bb6
...@@ -16,6 +16,16 @@ namespace FLY.AppHelper ...@@ -16,6 +16,16 @@ namespace FLY.AppHelper
void app_Startup(object sender, StartupEventArgs e) 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;
}
}
Process process = Process.GetCurrentProcess(); Process process = Process.GetCurrentProcess();
string name = process.ProcessName; string name = process.ProcessName;
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
<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,6 +24,8 @@ namespace FLY.AppHelper ...@@ -24,6 +24,8 @@ 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;
......
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