有没有办法为现有应用程序构建一个C#包装器,允许我从任务栏中删除它?
更多信息:
我有一个计时器应用程序,我想使用但不要因为它很好......很糟糕。请参阅https://superuser.com/questions/92774/quickbooks-timer-replacement-windows。
所以为了减少它,我想知道我是否可以构建一个包装器然后只是与该包装器进行交互。从任务栏中删除计时器,然后让我的应用程序隐藏/显示它将是朝这个方向迈出的一步。
另一种选择是对计时器进行逆向工程。但那是另一天的又一个项目。现在我很乐意隐藏这件事。
答案 0 :(得分:1)
您需要找到任务栏中显示的窗口,并从其(扩展)样式中删除“在任务栏中显示”位。这将涉及下降到Windows API级别。您需要的功能是:
GetWindowLongPtr
- 检索现有的扩展样式(GWL_EXSTYLE
)SetWindowLongPtr
- 设置新的现有扩展样式(GWL_EXSTYLE
)您需要删除的扩展样式位是WS_EX_APPWINDOW
。
请参阅SetWindowLongPtr文档,了解有关使用SetWindowLongPtr
影响其他线程中的窗口的限制的信息,并可能需要调用SetWindowPos
以进行可视更新。 Windows甚至可能会阻止您完全执行此操作(例如出于安全性或可用性原因)
我没有对此进行测试,这可能取决于目标应用程序。最后,如果这确实有效,它将完全从任务栏中删除窗口,这可能会让您在重新显示窗口时感到困惑,因此您的应用可能需要在显示其他应用程序窗口之前重新启用WS_EX_APPWINDOW
样式