我有一个vb.net应用程序,当按下快捷方式时,会弹出一个窗口。除非按下捷径,否则我也想让它完全隐形。在默认类中包含我的代码以注意捷径并协调快捷方式的事件,我已经放置了以下代码:
Me.ShowInTaskbar = False
我已将此代码隔离为问题。问题是我的应用程序在任务栏中没有显示时不起作用。这只是默认表单 - 对于弹出窗口,我有一个单独的类。如何创建一个解决方法,将窗口隐藏在任务栏中并隐藏它?
感谢。
是的,这是我的热键代码: Public Const MOD_ALT As Integer = &H1
Public Const WM_HOTKEY As Integer = &H312
Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_HOTKEY Then
'Stuff do do when Alt-Q is pressed
End If
MyBase.WndProc(m)
End Sub
答案 0 :(得分:4)
您没有发布足够的代码。我可以猜到原因。更改ShowInTaskbar属性具有大副作用。它是其中一个属性,实际上是引擎盖下的窗口样式标志。在CreateWindowsEx()调用中指定。这意味着一个问题,更改属性需要重新创建本机窗口。
这是在Winforms中实现的,但它可能会带来麻烦。注意RegisterHotKey()函数声明,第一个参数是窗口句柄。问题是,当Winforms重新创建本机窗口时,窗口句柄将不同。或者换句话说,您的热键不再注册。
解决方法很简单,您需要在重新创建窗口时重新注册热键。移动RegisterHotKey()调用,我需要再次猜测,这个方法的Load事件处理程序:
Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs)
MyBase.OnHandleCreated(e)
RegisterHotKey(me.Handle, etc...)
End Sub
答案 1 :(得分:1)
应该有像Me.object.Visible或form2.visible这样的属性,您可以将其设置为true和false。只要确保它在主程序退出时也关闭。