使用C#包装器从任务栏中删除应用程序?

有没有办法为现有应用程序构建一个C#包装器,允许我从任务栏中删除它?

更多信息:

我有一个计时器应用程序,我想使用但不要因为它很好……很糟糕。 请参阅https://superuser.com/questions/92774/quickbooks-timer-replacement-windows 。

所以为了减少它,我想知道我是否可以构建一个包装器,然后只是与该包装器进行交互。 从任务栏中删除计时器,然后让我的应用程序隐藏/显示它将是朝这个方向迈出的一步。

另一种选择是对计时器进行逆向工程。 但那是另一天的又一个项目。 现在我很乐意隐藏这件事。

您需要找到任务栏中显示的窗口,并从其(扩展)样式中删除“在任务栏中显示”位。 这将涉及下降到Windows API级别。 您需要的function是:

  • GetWindowLongPtr – 检索现有的扩展样式( GWL_EXSTYLE
  • SetWindowLongPtr – 设置新的现有扩展样式( GWL_EXSTYLE

您需要删除的扩展样式位是WS_EX_APPWINDOW

有关使用SetWindowLongPtr影响其他线程中的窗口的限制的信息,请参阅SetWindowLongPtr文档,并可能需要调用SetWindowPos以引起可视更新。 Windows甚至可能会阻止您完全执行此操作(例如出于安全性或可用性原因)

我没有测试过它,它可能取决于目标应用程序。 最后,如果这确实有效,它将完全从任务栏中删除窗口,这可能会让您在重新显示窗口时感到困惑,因此您的应用可能需要在显示其他应用程序窗口之前重新启用WS_EX_APPWINDOW样式。