不用说了,这个试用窗口真心非常讨厌。
先说下原理
如果长期使用DevexPRess就会知道,Devexpress 实际上每30分钟就会弹出一次试用窗口,还没啥好办法屏蔽。
后来通过分析Dev的代码发现,他存储的时间实际是在
注册表的[HKEY_CURRENT_USER/SOFTWARE/DevExpress/Components]节点下存放的。
"SmartTagWidth"="350" "LastAboutShowedTime"="02/05/2017 10:41:32" "DisableSmartTag"="False"
子节点LastAboutShowedTime 就是上次显示关于窗口的时间,如果一直更新这个时间,这样不就不会显示试用窗口啦!(当前时间-LastAboutShowedTime的绝对值大于30分钟就会显示,这是我反编译Dev的源代码发现的)
废话不多说,上代码
public class SetNoDisplay { private const string Data= "SOFTWARE//DevExpress//Components"; private const string keys = "LastAboutShowedTime"; private const string formate = "MM/dd/yyyy HH:mm:ss"; private const string disable = "DisableSmartTag"; private const string SmartTagWidth = "SmartTagWidth"; public void SetDate() { CreateKey(); try { RegistryKey regkey = Registry.CurrentUser; var key = regkey.OpenSubKey(Data, true); var value = key.GetValue(keys); var date = DateTime.Now.ToString(formate); key.SetValue(keys, date); regkey.Dispose(); } catch { } } private void CreateKey() { try { RegistryKey regkey = Registry.CurrentUser; var data = regkey.OpenSubKey(Data, true); if (data == null) { var subkey = regkey.CreateSubKey(Data); subkey.CreateSubKey(keys).SetValue(keys, DateTime.Now.ToString(formate)); subkey.CreateSubKey(disable).SetValue(keys, false); subkey.CreateSubKey(SmartTagWidth).SetValue(keys, 350); } regkey.Dispose(); } catch { } } public SetNoDisplay() { Task.Factory.StartNew(()=> { while (true) { SetDate(); Thread.Sleep(TimeSpan.FromSeconds(15)); } }); } }使用方法,在App应用中,直接New 一个SetNoDisplay就好了,就这么简单。
新闻热点
疑难解答