关于一个系统软件置顶的问题_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 关于一个系统软件置顶的问题

关于一个系统软件置顶的问题

 2017/11/10 16:24:08  布尔2013  程序员俱乐部  我要评论(0)
  • 摘要:一个新的项目需要用到系统置顶的功能,本来是件很简单的事情,但是越做发现并不那么简单,所以记录下来:系统环境:win7旗舰版本64位;IDE:VS2013;WPF+C#开发。一、开始用Topmost属性设置为true。运行木有问题,很简单哟。呵呵,随后运行打开osk.exe;卵,被按下去了。查资料,人家也用了置顶的功能,两个都在置顶,而且一旦被人家(osk.exe)按下去就再也上不来。二、那就用笨点的办法呗,循环设置Topmost=true;while(true){try{Thread
  • 标签:一个 问题 软件

一个新的项目需要用到系统置顶的功能,本来是件很简单的事情,但是越做发现并不那么简单,所以记录下来:

系统环境: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的这个开始菜单是么子做的啊?

不过拿搜狗输入法测试了一下,呵呵

  园子里有搜狗工程师么?怎么实现的?怎么实现的?怎么实现的?   然后拿自己的窗口和搜狗输入法两个软件比对,如下:   我的窗口又在搜狗输入法的上面了。真是*****   大神在哪里?大神在哪里?大神在哪里?
发表评论
用户名: 匿名