Boh*_*nov 9 windows powershell notifications
我正在尝试在Windows 8上创建简单的Powershell脚本,它将通过系统托盘通知气球通知我.代码很简单:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon
$objNotifyIcon.Icon = "D:\1.ico"
$objNotifyIcon.BalloonTipIcon = "Info"
$objNotifyIcon.BalloonTipText = "I'm there"
$objNotifyIcon.BalloonTipTitle = "Hello!"
$objNotifyIcon.Visible = $True
$objNotifyIcon.ShowBalloonTip(10000)
Run Code Online (Sandbox Code Playgroud)
1.ico是光盘上真正存在的自定义图标.
除了一件小事之外,它应该工作.我更喜欢在我的窗口上放置任务栏,它似乎会给气球带来麻烦:它被绘制在任务栏下面(屏幕:https://dl.dropbox.com/u/1138313/systraybug.PNG).我使用notifyIcon在C#中进行了测试应用,结果相同.但是像Dropbox或Skydrive这样的其他应用程序没有这样的问题,我的底部任务栏的脚本也很完美.我没有在NotifyIcon的文档中找到任何样式选项.这是烦人的bug还是我可以解决它?
问候.
UPS:看来,Dropbox应用程序有同样的问题(对我很羞耻,第一次看不到).所以这是系统错误,我想.
这是 Windows 中的已知错误。覆盖任务栏行为的唯一方法是找到气球的句柄,然后使用 SetWindowPos 将其置于最顶层:
BOOL WINAPI SetWindowPos(
_In_ HWND hWnd,
_In_opt_ HWND hWndInsertAfter,
_In_ int X,
_In_ int Y,
_In_ int cx,
_In_ int cy,
_In_ UINT uFlags
);
Run Code Online (Sandbox Code Playgroud)
MSDN:“通过将 hWndInsertAfter 参数设置为 HWND_TOPMOST 并确保未设置 SWP_NOZORDER 标志,或者通过设置窗口在 Z 顺序中的位置,使其位于任何现有的最顶层窗口之上,可以使窗口成为最顶层窗口。当一个非最顶层的窗口被设置为最顶层,它拥有的窗口也被设置为最顶层。但是,它的所有者不会改变。” 有关详细信息,请参阅SetWindowPos 。
另一个策略是降级任务栏。使用以下代码查找最顶层的窗口:
HWND FindMyTopMostWindow()
{
DWORD dwProcID = GetCurrentProcessId();
HWND hWnd = GetTopWindow(GetDesktopWindow());
while(hWnd)
{
DWORD dwWndProcID = 0;
GetWindowThreadProcessId(hWnd, &dwWndProcID);
if(dwWndProcID == dwProcID)
return hWnd;
hWnd = GetNextWindow(hWnd, GW_HWNDNEXT);
}
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
然后降级窗口或将窗口的 zorder 设置得更高。
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |