如何在中以编程方式更改电池空闲超时.Net在Windows Mobile 6
本文关键字:超时 Net Windows Mobile 编程 方式更 | 更新日期: 2023-09-27 18:00:48
我们使用的是C#。Net Compact Edition 3.5和Windows Mobile 6.1,并且不太熟悉C++或Windows API调用。我们需要通过编程将电池空闲/可疑时间从设置的时间(通常默认为3/5分钟)更改为15分钟。我在网上找到了一些例子,但到目前为止,它们都不起作用,或者我不知道如何/无法找到如何实现它们,因为它们在C++中,或者没有在C#中运行的解释或上下文。
int test = SystemParametersInfo(SPI_SETBATTERYIDLETIMEOUT, 15, null, 0); //15 seconds, to test it actually working
//test return 0
我怎么能,从。C#中的Net CE 3.5,是否更改Windows Mobile 6.1中的电池超时?
感谢
编辑:请求此应用程序的客户端已专门请求此行为。他们希望在应用程序执行期间有更长的超时时间,而在应用程序未运行时有系统默认超时时间。
我同意Hans的观点,即这可能是通过在不询问的情况下更改最终用户的设备来惹恼最终用户的最佳方式。也就是说,我为一个客户做了类似的事情,该客户希望所有设备都带有识别设置。在安装程序中进行更改的速度更快,而不是进行一系列细微的更改。
我相信你想要的设置保存在的注册表设置中
'HKEY_LOCAL_MACHINE'System'CurrentControlSet'Control'Power'Timeouts
然后,您可以通过框架对此进行更改
RegistryKey singleKey =
registryKey.OpenSubKey(
"'HKEY_LOCAL_MACHINE'System'CurrentControlSet'Control'Power'Timeouts", true);
singleKey.SetValue("BattSystemIdle", 600);
singleKey.Close();
我不能100%确定你想要的是哪个注册表项,但你可以使用出色的Breaksoft Mobile注册表编辑器来定位你需要的确切注册表项。通过改变你的设备并在按键变化时保持警惕,你应该很快找到你想要的设置。
编辑:死链接-Breaksoft移动注册表编辑器
使用下方评论中提供的备选方案
MSDN-电源管理超时
在VS 2008中,我无法获得在Windows Mobile 6项目中工作的fluents精确方法。首先,注册表路径中的''被标识为控制代码前缀,其次,RegistryKey singleKey行在生成过程中导致错误。下面的代码确实有效:
var localMachine = Registry.LocalMachine;
var subKey = localMachine.OpenSubKey(@"'System'CurrentControlSet'Control'Power'Timeouts", true);
subKey.SetValue("BattSuspendTimeout", 600);
仍然需要重新启动才能生效。
对于SystemParametersInfo函数,您需要使用C#中的dllimport命令对其进行p/Invoke。pinvoke.net有一个在Windows中这样做的例子。要将其移植到Windows Mobile,只需将引用从user32.dll
更改为coredll.dll
即可。http://www.pinvoke.net/default.aspx/user32.systemparametersinfo
[DllImport("coredll.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, IntPtr pvParam, SPIF fWinIni);
还可以考虑,"如果两个程序都这样做了呢?"?
-PaulH