我想实现在程序运行的时候,保持屏幕常亮,不屏幕保护也不息屏
像播放视频一样。
用了以下的方法,但好像不起作用
import win.scrnsave;
win.scrnsave.setConfig(active=false) //禁用屏保
import sys.power;
sys.power.setMonitorTimeout(0);//禁止黑屏
求各位大神给个方便点的,谢谢!
AI 回答的
在C#中,可以使用以下代码让屏幕常亮: using System; using System.Windows.Forms; namespace KeepScreenOn { public partial class Form1 : Form { //常量:使屏幕保持常亮 private const uint WM_SYSCOMMAND = 0x0112; private const uint SC_MONITORPOWER = 0xF170; private const uint MONITOR_ON = 0x01; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //关闭屏幕保护程序和显示器熄灭 this.SettingChange("ScreenSaveActive", 0); this.SettingChange("MonitorPowerOffEnabled", 0); //设置屏幕常亮 SendMessage(this.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON); } //调用SystemParametersInfo函数 public void SettingChange(string valueName, int value) { bool result = SystemParametersInfo(0x14, value, null, 0); } //调用SendMessage函数 [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern int SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam); //调用SystemParametersInfo函数 [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern bool SystemParametersInfo(uint uiAction, uint uiParam, Object pvParam, uint fWinIni); } } 通过调用SendMessage函数发送消息来使屏幕常亮。使用SystemParametersInfo函数关闭屏幕保护程序和关闭显示器熄灭功能。在窗体加载时,通过调用SettingChange和SendMessage函数实现。
小肥羊 给你个另辟蹊径的思路,用mouse库定时挪动一下鼠标看看有没有效,不确保一定有效
鼠标移动这个方法肯定有用的! 只不过我希望的是能通过调用win的API来实现
AI回答的奇奇怪怪呢
wimport win.kernel/* 定义防止息屏和锁屏的函数 */function preventScreenTimeout(){ /* ES_CONTINUOUS 表示需要连续的执行状态 ES_DISPLAY_REQUIRED 表示需要显示设备处于开启状态 ES_SYSTEM_REQUIRED 表示需要系统处于开启状态 */ const ES_CONTINUOUS = 0x80000000 const ES_DISPLAY_REQUIRED = 0x2 const ES_SYSTEM_REQUIRED = 0x1 /* 调用API,组合标志以防止息屏和锁屏 */ win.kernel.SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED)}
话说,下边这种操作正确不?
var preventScreenTimeout = ::Kernel32.api("SetThreadExecutionState","void()" );
preventScreenTimeout( 0x80000000, 0x2,0x1)
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED); /*上述代码中, ES_CONTINUOUS 0x80000000 标志表示持续请求, ES_SYSTEM_REQUIRED 0x00000001 标志表示系统需要保持活动, ES_DISPLAY_REQUIRED 0x00000002 标志表示显示器需要保持开着。 通过这些标志组合,播放器可以在播放视频时保持系统和显示器唤醒。 */
小肥羊 SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_ ...
::Kernel32.SetThreadExecutionState( 0x80000000);
::Kernel32.SetThreadExecutionState( 0x00000002);
::Kernel32.SetThreadExecutionState( 0x00000001);
像这种?
cyzn_lfss ::Kernel32.SetThreadExecutionState( 0x80000000); ::Kernel32.SetThreadExecutionState( 0x0000 ...
感谢两位大佬的回复,我去试试