您的位置:首页 > 编程语言 > C#

c#消除通知区域死程序图标

2006-01-15 00:48 435 查看
前两天在csdn上看到有人问这个问题,以前就弄过,不过没出结果,今天用spy++终于找到了,哈哈哈

贴代码最直接! 转载请注明作者!

#region 常量和结构体定义

private const int WM_MOUSEMOVE = 0x0200;

[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
private struct RECT
{
internal int left;
internal int top;
internal int right;
internal int bottom;
}
#endregion

#region P/Invoke

[DllImport("User32.dll",EntryPoint="FindWindow")]
private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);

[DllImport("User32.dll",EntryPoint="FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,
string lpClassName,string lpWindowName);

[DllImport("User32.dll",EntryPoint="GetClientRect")]
static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);

[DllImport("user32.dll", EntryPoint="PostMessageA")]
private static extern int PostMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

#endregion

private void button1_Click(object sender, System.EventArgs e)
{
IntPtr hParent = FindWindow("Shell_TrayWnd",null);
if(hParent!=IntPtr.Zero)
{
IntPtr hChild;
do
hChild = FindWindowEx(hParent,IntPtr.Zero,"TrayNotifyWnd",null);
while(hChild==IntPtr.Zero);
if(hChild!=IntPtr.Zero)
{
IntPtr hPager;
do
hPager = FindWindowEx(hChild,IntPtr.Zero,"SysPager",null);
while(hPager==IntPtr.Zero);
if(hPager!=IntPtr.Zero)
{
IntPtr hTray;
do
hTray = FindWindowEx(hPager,IntPtr.Zero,"ToolbarWindow32",null);
while(hTray==IntPtr.Zero);
if(hTray!=IntPtr.Zero)
{
RECT r = new RECT();
GetClientRect(hTray,out r);
for(int i=0;i<r.right;i++)
PostMessage(hTray,WM_MOUSEMOVE,0,(0x000E0000+i));
}
}
}
}

程序就不解释了,就是用win32API查找窗体,最费劲的就是发现那个SysPager了,整了好半天,最后那个PostMessage里面的0x000E0000表示老鼠标的位置,高位表示y,低位表示x,不过看起来这么大功夫就为了消除那个死图标,不值~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: