关于一个系统软件置顶的问题
2017-11-10 14:21
423 查看
一个新的项目需要用到系统置顶的功能,本来是件很简单的事情,但是越做发现并不那么简单,所以记录下来:
系统环境:win7旗舰版本64位;
IDE :VS2013;
WPF+C#开发。
一、开始用Topmost属性设置为true。
运行木有问题,很简单哟。呵呵,随后运行打开osk.exe;卵,被按下去了。
查资料,人家也用了置顶的功能,两个都在置顶,而且一旦被人家(osk.exe)按下去就再也上不来。
二、那就用笨点的办法呗,循环设置Topmost = true;
while (true)
{
try
{
Thread.Sleep(2);
lock (_thisLock)
{
this.Dispatcher.Invoke(new Action(() =>
{
this.Topmost = false;
}), null);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
嘿嘿,搞定。然后在win7的系统上实现各种功能。终于算是开发完了,然后测试。
发现一个问题:
win7系统在areo主题下有个预览窗口,如上图,在上面那种情况下,我的窗口是没法置顶。
在微软论坛发帖子找大神解救,大神的解答如下:
“
Hi,
简单的说,不能,Windows7的任务栏(缩略图)预览本身是一个窗口,而你想实现直接把一个WPF的窗口setparent到预览窗口,相当于当前wpf窗体必须有两个同样的窗体实例,一个在桌面,一个在预览窗口。
如果你想在这个预览窗口和你的程序直接交互,那么Windows API Code Pack缩略图按钮和跳转列表可能是你想要的,直接操作这个Windows7的任务栏缩略图预览功能是不能的。
”
好吧!先只好把这个问题放一边,如果园子有大神有解决方案,欢迎留言。
然后win7系统的测试告一段落;
=============================================================================
系统环境:win10企业版本64位;
IDE :VS2013;
WPF+C#开发。
win10系统测试,在其他软件层面上置顶是都ok的,但是在开始菜单上没法置顶,如下图:
然后又各种找资料加测试,用过的方法有以下:
HwndSource source = (HwndSource)PresentationSource.FromVisual(this);
IntPtr handle = source.Handle;
bool b1 = BringWindowToTop(handle);
------------------------------------------------------------
IntPtr CustomBar = FindWindow(null, "MainWindow"); //程序中需要置顶的窗体的名字
IntPtr desktop= GetDesktopWindow();
if (CustomBar != null)
{
SetWindowPos(CustomBar, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
SetParent(desktop, CustomBar);
}
------------------------------------------------
就是各种win32的API吧,还是不行啊!大神们有解决方案吗?win10的这个开始菜单是么子做的啊?
不过拿搜狗的输入法测试了一下,呵呵
园子里有搜狗工程师么?怎么实现的?怎么实现的?怎么实现的?
然后拿自己的窗口和搜狗输入法两个软件比对,如下:
我的窗口又在搜狗输入法的上面了。真是*****
大神在哪里?大神在哪里?大神在哪里?
系统环境:win7旗舰版本64位;
IDE :VS2013;
WPF+C#开发。
一、开始用Topmost属性设置为true。
运行木有问题,很简单哟。呵呵,随后运行打开osk.exe;卵,被按下去了。
查资料,人家也用了置顶的功能,两个都在置顶,而且一旦被人家(osk.exe)按下去就再也上不来。
二、那就用笨点的办法呗,循环设置Topmost = true;
while (true)
{
try
{
Thread.Sleep(2);
lock (_thisLock)
{
this.Dispatcher.Invoke(new Action(() =>
{
this.Topmost = false;
}), null);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
嘿嘿,搞定。然后在win7的系统上实现各种功能。终于算是开发完了,然后测试。
发现一个问题:
win7系统在areo主题下有个预览窗口,如上图,在上面那种情况下,我的窗口是没法置顶。
在微软论坛发帖子找大神解救,大神的解答如下:
“
Hi,
简单的说,不能,Windows7的任务栏(缩略图)预览本身是一个窗口,而你想实现直接把一个WPF的窗口setparent到预览窗口,相当于当前wpf窗体必须有两个同样的窗体实例,一个在桌面,一个在预览窗口。
如果你想在这个预览窗口和你的程序直接交互,那么Windows API Code Pack缩略图按钮和跳转列表可能是你想要的,直接操作这个Windows7的任务栏缩略图预览功能是不能的。
”
好吧!先只好把这个问题放一边,如果园子有大神有解决方案,欢迎留言。
然后win7系统的测试告一段落;
=============================================================================
系统环境:win10企业版本64位;
IDE :VS2013;
WPF+C#开发。
win10系统测试,在其他软件层面上置顶是都ok的,但是在开始菜单上没法置顶,如下图:
然后又各种找资料加测试,用过的方法有以下:
HwndSource source = (HwndSource)PresentationSource.FromVisual(this);
IntPtr handle = source.Handle;
bool b1 = BringWindowToTop(handle);
------------------------------------------------------------
IntPtr CustomBar = FindWindow(null, "MainWindow"); //程序中需要置顶的窗体的名字
IntPtr desktop= GetDesktopWindow();
if (CustomBar != null)
{
SetWindowPos(CustomBar, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
SetParent(desktop, CustomBar);
}
------------------------------------------------
就是各种win32的API吧,还是不行啊!大神们有解决方案吗?win10的这个开始菜单是么子做的啊?
不过拿搜狗的输入法测试了一下,呵呵
园子里有搜狗工程师么?怎么实现的?怎么实现的?怎么实现的?
然后拿自己的窗口和搜狗输入法两个软件比对,如下:
我的窗口又在搜狗输入法的上面了。真是*****
大神在哪里?大神在哪里?大神在哪里?
相关文章推荐
- 关于 唱票软件以及系统的一个构思
- 关于软件项目中如何寻求问题和了解情况的一个思维导图
- 对于面向对象的软件系统而言,如何提高软件的可维护性和可复用性始终是一个核心问题
- 关于置顶问题的一个小算法
- 一个小的知识点关于java获取系统时间的问题
- 关于移动设备上GIS系统开发的一个问题(EVC+MapXMobile)
- 关于一个系统的调试问题
- 关于一个简单ATM系统的UML建模——问题描述&词汇表&领域类图
- 关于更新windows Service Pack 3 更新后系统登录出现“一个问题阻止Windows正确检查机器的许可证。错误代码 0x80070002”问题解决方案
- 关于Android7.0系统使用webview遇到的一个问题(二级跳转后界面空白)
- 关于软件系统可靠性的几个9问题
- 解决一个系统启动过慢问题(软件服务启动错误影响)
- 一个关于heka采集系统的问题
- 【软件测试】关于停车系统的若干问题和反思
- 谈一个现实问题,关于软件开发使用中给用户照成的损失谁来赔偿谁来负责的问题,您怎么看?
- 关于流氓软件不能禁止随系统自启动的问题
- 关于系统(ios7+)自带的向右滑动手势返回上一个界面的一个问题
- 关于2000系统资料共享的一个小问题
- 关于重装系统后,Windows和Linux双系统只能进入一个的问题
- [置顶] ubuntu下配置conky-一个漂亮的系统监控软件