问题描述
只要程序运行,不管是否激活这个程序,都可以使快捷键响应!
解决方案
解决方案二:
我也想知道
解决方案三:
虽然只有5分,看一下下面的代码吧。ImportsSystem.Windows.FormsPublicEnumKeyModifiersNone=0Alt=1Control=2Shift=4Windows=8EndEnum'''<summary>'''支持系统热键呼叫'''</summary>'''<remarks></remarks>publicClassHotKeysInheritsNativeWindowImplementsIDisposablePrivateConstWM_HOTKEY=&H312PrivateDeclareFunctionRegisterHotKeyLib"user32.dll"(ByValhwndAsInt32,ByValidAsInt32,ByValfsModifiersAsInt32,ByValvkAsInt32)AsInt32PrivateDeclareFunctionUnregisterHotKeyLib"user32.dll"(ByValhwndAsInt32,ByValidAsInt32)AsInt32'''<summary>'''返回下一个可用ID号'''</summary>'''<returns></returns>'''<remarks></remarks>PrivateSharedFunctionNextID()AsInt32StaticidAsInteger=0id+=1ReturnidEndFunctionPrivatemIdAsIntegerPrivatemModifiersAsInt32PrivatemKeyAsIntegerPublicSubNew(ByValmodifersAsKeyModifiers,ByValkeyAsKeys)mModifiers=modifersmKey=keyEndSub'''<summary>'''表示热键被按下'''</summary>'''<remarks></remarks>PublicEventHotKeyDowAsEventHandler'''<summary>'''注册热键'''</summary>'''<returns></returns>'''<remarks></remarks>PublicFunctionRegister()AsBooleanIf(mId<>0)ThenUnRegister()EndIfIf(Me.Handle=IntPtr.Zero)ThenDimcpAsCreateParamscp=NewCreateParams()Me.CreateHandle(cp)EndIfmId=NextID()ReturnRegisterHotKey(Me.Handle,mId,Me.mModifiers,Me.mKey)EndFunction'''<summary>'''注销热键'''</summary>'''<returns></returns>'''<remarks></remarks>PublicFunctionUnRegister()AsBooleanIf(mId<>0)ThenmId=0Me.DestroyHandle()ReturnUnregisterHotKey(Handle,mId)EndIfReturnFalseEndFunction'''<summary>'''处理windows消息'''</summary>'''<paramname="m"></param>'''<remarks></remarks>ProtectedOverridesSubWndProc(ByRefmAsSystem.Windows.Forms.Message)If(m.Msg=WM_HOTKEY)ThenIf(m.WParam=mId)ThenRaiseEventHotKeyDow(Me,EventArgs.Empty)EndIfEndIfMyBase.WndProc(m)EndSubPublicSubDispose()ImplementsIDisposable.DisposeUnRegister()EndSubEndClass
'使用方式如下PrivateWithEventsmHotKeyAsNewHotKeys(KeyModifiers.Control,Keys.W)'注册系统热键mHotKey.Register()'注销系统热键mHotKey.UnRegister()'处理mHotKey的事件'HotKeyDow'可以监测热键在什么时候按下。