2009-02-20 67 views
1

精確複製How to make 'always on bottom' window?
相關:Window on desktop?如何讓窗戶保持在所有其他窗口(「最底層」)


我正在開發的小應用程序Delphi需要表現得像一個shell(替換)啓動板(用於Windows Embedded)。我有一些圖標/按鈕將啓動其他應用程序。關鍵是應用程序需要始終保持在「shell」之前。此外,應用程序使用簡單點擊開始,但如果雙擊(意外)使用應用程序將落後(「殼」將集中)

由於此應用程序將取代實際的殼(資源管理器)將有行爲類似於資源管理器......所以它必須始終保持「後臺」狀態,並且不應出現在ALT + TAB列表中。

我測試了很多SetWindowPos組合與HWND _ BOTTOMSWP _ NOACTIVATE等沒有成功..

此外,我發現這方面的一些信息,但它不爲工作廣告:
How to keep a form always in the background (bottommost)

任何提示如何實現所有這些?

更新:對於來自ALT-TAB列表/切換器隱藏窗口(從任務欄,但因爲我有興趣創建外殼更換,這將是沒有任務欄),我發現下面的文章:

Hide a Delphi Application Button from the TaskBar
Hide a Delphi 2007 Application Button from the TaskBar (with MainFormOnTaskBar)

+0

你是否完全將explorer.exe替換爲你的shell,或者你試圖用自己的應用程序「掩蓋」瀏覽器? – Vegar 2009-02-20 08:21:24

+0

我需要爲Windows Embedded解決方案創建一個「外殼」替代,因爲我無法使用常規Explorer外殼。所以我嘗試模擬瀏覽器的行爲方式=一直停留在底部,並且不會出現在ALT-TAB列表中。 – user68682 2009-02-20 08:36:45

+0

@jaguard,你可能會在你的問題的第二部分得到更好的迴應..作爲一個新問題。關於alt-tab。 – mmcdole 2009-02-20 08:44:23

回答

0

目前還不清楚您是否試圖讓應用程序在當前shell的頂部作爲「啓動板」運行,或者如果您試圖使應用程序成爲shell。

這兩者之間有很大的區別。

聽起來像最後一個選項是你真正想要的,然後任務欄等應該不會有任何麻煩 - 它們不會在那裏,因爲它們是舊shell(explorer.exe)的一部分,它你已經取代。

SharpEnvironment,用Delphi製作的開源外殼替換,可能會給你一些提示。

0

我不知道確切的效果是什麼,你想實現的,但我認爲你基本上要改變你的屏幕上的工作區。

您可以使用Monitor.WorkareaRect作爲TRect獲取當前工作區。 您可以通過SystemparametersInfo()

下面的例子將您的形式到的東西,多多少少類似於Windows任務欄的工作方式設置:

  • 沒有邊界
  • 總在最前面
  • 卡住在屏幕的底部
  • 其他Windows應用程序的最大化,將只會最大化,直到我們的窗體的頂部。

讓我知道這是你的意思。

procedure TfrmMain.FormCreate(Sender: TObject); 
var 
    Rect :TRect; 
begin 
    Height  := 25; 
    BorderStyle := bsNone; 
    FormStyle := fsStayOnTop; 
    Rect  := Monitor.WorkareaRect; 
    Rect.Bottom := Rect.Bottom - Height; 
    Left  := Rect.Left; 
    Width  := Rect.Right; 
    Top   := Rect.Bottom; 
    SystemparametersInfo(SPI_SETWORKAREA,0, @Rect,SPIF_SENDCHANGE); 
end; 

有些事情要記住:

  • 當你的程序完成後,桌面上的工作區將仍然是你設置的方式,所以記得在終止前將其恢復應用。我相信你會弄清楚如何做到這一點。

  • 當您調整Windows任務欄的大小時,運行中的應用程序會收到更改通知,並且最大化的應用程序會將其大小調整爲新的工作區。上面的代碼似乎沒有觸發,所以你可能需要找到一種方法來做到這一點。

0

@dummzeuch 你提到不包括任何代碼只是一些建議的解決方案......還不能處理ALT-TAB問題,我需要解決太多(我的窗口不應該進入ALT-TAB列表,類似於Explorer--作爲shell的行爲)。

@Wouter 我需要創建一個外殼更換(無邊框全屏形式),需要留在「底部」的所有類似於常規資源管理器外殼的時間(將取代)。所以它應該停留在最低點,而不是像你所建議的那樣。

此「外殼」替換用於Windows嵌入式解決方案,我無法使用常規資源管理器外殼程序。此外殼程序包含一些可從中啓動的選定可執行文件的「軟按鈕」(TImage來模擬圖標)。問題是 這就是我需要確保shell始終保持在後面,否則它可能會隱藏其他一些應用程序(例如:多次快速單擊一個將啓動應用程序的圖標,但會重新集中在shell上,或者何時使用ALT TAB)。

在這種情況下,我還有一個問題:有什麼方法可以等待任何應用程序啓動?

我真的很感激一些代碼提示開始。

0

這是你想要的嗎?

procedure SetWindowPosToBack(handle: HWND); 
begin 
    SetWindowPos(Handle,HWND_BOTTOM,0,0,0,0,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); 
end; 
相關問題