使用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
样式。