代码之家  ›  专栏  ›  技术社区  ›  Tom A RRUZ

服务应用程序太明显

  •  3
  • Tom A RRUZ  · 技术社区  · 14 年前

    在Delphi5中处理一个服务应用程序,该应用程序打算在WindowsXP-7上运行。大多数应用程序都很好地结合在一起,但我遇到了一个问题。此服务应用程序的一部分是偶尔显示数据的表单(类似于avast用来让您知道其已更新的滑块框)。当服务显示窗体时,该窗体将显示在任务栏上,但我们不希望它显示。有人对如何隐藏Taksbar上的表单按钮有什么建议吗?到目前为止,我为常规应用程序找到的标准方法都没有起作用。谢谢。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Zoë Peterson RRUZ    14 年前

    覆盖窗体的 CreateParams 方法并添加 WS_EX_TOOLWINDOW 价值到 Params.ExStyle 字段。这将把它标记为一个工具窗口,没有任务栏条目。

        2
  •  7
  •   Deltics    14 年前

    听起来好像您设想有一个通知区域图标(也称为系统托盘图标)来通知用户有关服务中/与服务相关的事件。

    您需要将服务的这个gui方面与服务本身分离,并使用某种ipc允许托盘图标applet根据需要与服务通信。根据您的ipc的需要,这可能是一个命名管道、对内存映射文件的共享访问或更复杂的东西。

    然后,管理gui w.r.t(任务栏)行为的技术应该按预期工作。

        3
  •  1
  •   Zartog    14 年前

    在上找到这个 http://delphi.about.com/od/adptips1999/qt/hidefromtaskbar.htm

    procedure TMainForm.FormCreate(Sender: TObject) ;
    begin
      ShowWindow(Application.Handle, SW_HIDE) ;
      SetWindowLong(Application.Handle, GWL_EXSTYLE, getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW) ;
      ShowWindow(Application.Handle, SW_SHOW) ;
    end;
    

    在Delphi2007中,要隐藏任务栏按钮,需要几行代码:

    将mainformontaskbar设置为false

    在主窗体的onshow事件处理程序调用中

    ShowWindow(Application.Handle, SW_HIDE);
    

    在主窗体的onActivate事件处理程序调用中

    ShowWindow(Application.Handle, SW_HIDE);