2009-02-20 63 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; 
相关问题