关闭Windows8CharmBar我有一个SurfacePro,我需要将其“锁定”为一种信息亭模式。我知道“Kiosk模式”的作品有更新……但我需要在那之前完成。我在互联网上搜索过,但看起来您无法通过在屏幕上滑动来禁用超级按钮栏。我找到了禁用触控板的方法。但不幸的是,由于这款平板电脑将在没有键盘的情况下使用,因此我需要禁用charmbar。我的新想法是将整个Charm栏移出屏幕HWND数千像素,或者,可能在其上设置窗口样式以使其不出现。我正在尝试使用Spy++和基于EnumWindows的自定义控制台应用程序来为我提供一些窗口句柄。但我无法将Charm栏保持足够长的时间以使它们生效。所以我的问题是:如何在Windows8中找到CharmBar的窗口句柄(HWND)?或者,我如何以其他方式获得对Charm栏的引用,以便我可以在其上抛出SetWindowLong或SetWindowPos?事实上,我找到了一种方法(显然,没有其他人有:/)。对于那些想知道的人,“Start8”和“SkipMetroSuite”等软件可以通过按键停止CharmBar。他们从字面上模拟按键,在一个紧密的循环中将其关闭。我发现(我认为是)更好的方法。首先……一些WinAPI函数:usingSystem.Runtime.InteropServices;....privateenumWindowShowStyle:uint{//在http://stackoverflow.com/a/8210120/1245420找到更多信息Hide=0,ShowNormal=1,ShowMinimized=2,ShowMaximized=3,ShowNormalNoActvate=4,Show=5,最小化=6,ShowNoActivate=8,恢复=9,ShowDefault=10,ForceMinimized=11}[DllImport("user32.dll",SetLastError=true)]staticexternSystem.IntPtrFindWindow(stringlpClassName,stringlpWindowName);[DllImport("user32.dll",EntryPoint="FindWindow",SetLastError=true)]staticexternSystem.IntPtrFindWindowByCaption(System.IntPtrZeroOnly,stringlpWindowName);[DllImport("user32.dll")]staticexternboolShowWindow(System.IntPtrhWnd,WindowShowStylenCmdShow);那么第一个出现的问题就是魅力吧。这个窗口的标题原来是CharmBar。产生一个不断寻找这个窗口并将其隐藏的线程很漂亮。所以我生成一个线程并不断地轮询它:;ShowWindow(hWndCharmBar,0);System.Threading.Thread.Sleep(100);//睡一会儿}});这很好用,并且还有一个额外的好处,那就是在应用程序关闭时保持CharmBar工作。Thread.Sleep用于阻止线程压垮CPU-但延迟也允许CharmBar出现一瞬间。我没有成功打开CharmBar并按下按钮,然后线程再次隐藏它,所以没关系。降低睡眠时间显然会加快速度。Windows8的另一个问题是,如果你有某种滑块(在我的应用程序中,我有一个包含来自画廊的图像的列表框),那么你实际上可以滑动到屏幕的一侧......把你的手指放在那里,以访问任务栏...所以..下一部分是关闭任务栏:IntPtrhWndTray=FindWindow("Shell_TrayWnd",null);ShowWindow(hWndTray,0);..然后我再次显示应用程序何时关闭:IntPtrhWndTray=FindWindow("Shell_TrayWnd",null);ShowWindow(hWndTray,1);从功能上讲,这就是我的应用程序所需要的。希望能帮助别人。我还会注意到时钟包含在标题为“时钟和日期”的窗口中。IntPtrhWndCharmClock=FindWindowByCaption(IntPtr.Zero,"时钟和日期");我制作了一个小应用程序来切换魅力栏:https://bitbucket.org/darkwingduck/charmsbartoggle/overview这是使用SHGetPropertyStoreForWindow互操作的最大化应用程序如何在程序时禁用魅力栏。应该很容易转换为C#:ImportsSystem.Runtime.InteropServicesImportsSystem.Runtime.CompilerServicesPublicClassEdgeGestureUtilPrivateSharedDISABLE_TOUCH_SCREENAsGuid=NewGuid("32CE38B2-2C9A-41B1-9BC5-B3784394AA44")PrivateSharedIID_STOREAsGuid=NewGuid("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99")PrivateSharedVT_BOOLAsShort=11#Region"Structures"_PublicStructurePropertyKeyPublicSubNew(guid作为Guid,pid作为UInt32)fmtid=guidMe.pid=pidEndSub_PublicfmtidAsGuidPublicpidAsUIntegerEndStructure_PublicStructurePropVariant_PublicvtAsShort_PrivatewReserved1AsShort_PrivatewReserved2AsShort_PrivatewReserved3AsShort_PrivatecValAsSByte_PrivatebValAsByte_PrivateiVal作为Short_PublicuiVal作为UShort_PrivatelValAsInteger_PrivateulValAsUInteger_PrivateintValAsInteger_PrivateuintValAsUInteger_PrivatehValAsLong_PrivateuhValAsLong_PrivatefltValAsSingle_PrivatedblValAsDouble_PublicboolValAsBoolean_PrivatescodeAsInteger'CYcyVal;_Private[date]AsDateTime_PrivatefiletimeAsSystem.Runtime.InteropServices.ComTypes.FILETIME'CLSID*puuid;'CLIPDATA*pclipdata;'BSTRbstrVal;'BSTRBLOBbstrblobVal;_privateblobValAsBlob'LPSTRpszVal;_PrivatepwszValAsIntPtr'LPWSTR'IUnknown*punkVal;'IDispatch*pdispVal;'IStream*pStream;'IStorage*pStorage;'LPVERSIONEDSTREAMpVersionedStream;'LPSAFEARRAY攻击;'CACcac;'CAUBcaub;'蔡蔡;'CAUIcaui;'校准校准;'因果;'CAHcah;'CAUHCAUH;'CAFLTcaflt;'CADBLcadbl;'CABOOLcabool;'级联级联;'CACYcacy;'CADATEcadate;'CAFILETIMEcafiletime;'CACLSIDcauuid;'CACLIPDATAcaclipdata;'CABSTR'CABSTRBLOBcabstrblob;'CALPSTR'CALPWSTRcalpwstr;'CAPROPVARIANTcapropvar;'CHAR*pcVal;'UCHAR*pbVal;'短*piVal;'USHORT*puiVal;'长*pLV铝;'ULONG*pulVal;'INT*品脱值;'UINT*puintVal;'浮动*pfltVal;'双*pdblVal;'VARIANT_BOOL*pboolVal;'十进制*pdecVal;'SCODE*密码;'CY*pcyVal;'日期*更新;'BSTR*pbstrVal;'IUnknown**ppunkVal;'IDispatch**ppdispVal;'LPSAFEARRAY*pparray;'PROPVARIANT*pvarVal;'''''''获取blob数据的辅助方法'''PrivateFunctionGetBlob()AsByte()DimResultAsByte()=NewByte(blobVal.Length-1){}Marshal.Copy(blobVal.Data,Result,0,Result.Length)ReturnResultEndFunction''''''属性值'''PublicReadOnlyPropertyValue()AsObjectGetDimveAsVarEnum=vtSelectCaseveCaseVarEnum.VT_I1ReturnbValCaseVarEnum.VT_I2返回iValCaseVarEnum.VT_I4返回lValCaseVarEnum.VT_I8返回hValCaseVarEnum.VT_INT返回iValCaseVarEnum.VT_UI4返回ulValCaseVarEnum.VT_LPWSTR新的NotImplementedException("PropVariant"+ve.ToString())EndGetEndPropertyEndStructureFriendStructureBlobPublicLengthAsIntegerPublicDataAsIntPtr'代码应该在警告级别4下编译,没有任何警告,'但是这个结构会给我们警告CS0649:Field[Fieldname]'从未分配给,并且将始终具有其默认值'您可以在项目选项中禁用CS0649,但这将禁用'整个项目的警告,这是一个很好的警告,我们确实希望它在其他地方所以我们做了一个很好的虚拟函数来让编译器“开心”。PrivateSubFixCS0649()Length=0Data=IntPtr.ZeroEndSubEndStructure#EndRegion#Region"Interfaces"_InterfaceIPropertyStore_SubGetCount(ByRefcPropsAsUInteger)_SubGetAt(iProp作为UInteger,ByRefpkey作为PropertyKey)_SubGetValue(ByRefkeyAsPropertyKey,ByRefpvAsPropVariant)_SubSetValue(ByRefkeyAsPropertyKey,ByRefpvAsPropVariant)_SubCommit()_SubRelease()EndInterface#EndRegion#Region“Methods”_PrivateSharedFunctionSHGetPropertyStoreForWindow(handleAsIntPtr,ByRefriidAsGuid,ByRefpropertyStoreAsIPropertyStore)AsIntegerEndFunction公共共享子作为EnableEdgeGestures(ByAsValInthwndBoolean)DimpPropStoreAsIPropertyStore=NothingDimhrAsIntegerhr=SHGetPropertyStoreForWindow(hwnd,IID_PROPERTY_STORE,pPropStore)Ifhr=0ThenDimpropKeyAsNewPropertyKeypropKey.fmtid=DISABLE_TOUCH_SCREENpropKey.pidari=2DimProvarp=VT_BOOLvar.boolVal=启用pPropStore.SetValue(propKey,var)Marshal.FinalReleaseComObject(pPropStore)EndIfEndSub#EndRegionEndClass更好最简单的方法是在启动应用程序时更改2个注册表项,并在关闭时恢复它?您只需要在HKEY_CURRENT_USERSoftwareMicrosoft的WindowsCurrentVersionImmersiveShell中创建(如果不存在)EdgeUI键并添加新的DWORD键:DisableTLcorner和DisableCharmsHint禁用:DisableTLcorner=1DisableCharmsHint=1启用更改为零或删除它们:DisableTLcorner=0DisableCharmsHint=0这一切都可以用任何语言轻松完成!简单的解决方案,并不完美,每次激活魅力条时,您的应用程序都会停用,因此请立即重新激活它,魅力条会消失在App.xaml.cs中添加以上为C#学习教程:关闭Windows8CharmBar共享的所有内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注~privateenumWindowShowStyle:uint{//更多信息,请访问http://stackoverflow.com/a/8210120/1245420隐藏=0,ShowNormal=1,ShowMinimized=2,ShowMaximized=3,ShowNormalNoActvate=4,Show=5,最小化=6,ShowNoActivate=8,Restore=9,ShowDefault=10,ForceMinimized=11}[DllImport("user32.dll",SetLastError=true)]staticexternSystem.IntPtrFindWindow(stringlpClassName,stringlpWindowName);[DllImport("user32.dll",EntryPoint="FindWindow",SetLastError=true)]staticexternSystem.IntPtrFindWindowByCaption(System.IntPtrZeroOnly,stringlpWindowName);[DllImport("user32.dll")]staticexternboolShowWindow(System.IntPtrhWnd,WindowShowStylenCmdShow);DispatcherTimer计时器=newSystem.Windows.Threading.DispatcherTimer();publicApp(){this.Deactivated+=App_Deactivated;this.Activated+=App_Activated;timer.Tick+=d委托{Application.Current.MainWindow.Activate();System.IntPtrhWndCharmBar=FindWindowByCaption(System.IntPtr.Zero,"超级按钮");ShowWindow(hWndCharmBar,0);};timer.Interval=newTimeSpan(0,0,0,0,10);}voidApp_Activated(objectsender,EventArgse){timer.Stop();}voidApp_Deactivated(objectsender,EventArgse){timer.Start();顶一下,如涉及侵权请点击维权联系管理员删除如转载请注明出处:
