關於一個系統軟件置頂的問題


一個新的項目需要用到系統置頂的功能,本來是件很簡單的事情,但是越做發現並不那么簡單,所以記錄下來:

系統環境: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的這個開始菜單是么子做的啊?

不過拿搜狗的輸入法測試了一下,呵呵

 
園子里有搜狗工程師么?怎么實現的?怎么實現的?怎么實現的?
 
然后拿自己的窗口和搜狗輸入法兩個軟件比對,如下:
 
我的窗口又在搜狗輸入法的上面了。真是*****
 
大神在哪里?大神在哪里?大神在哪里?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM