我创建了一个小型的C#控制台应用程序,用于在屏幕上移动指针,希望这可以防止屏幕在几分钟后进入休眠/锁定状态。不幸的是,几分钟后屏幕仍然会进入睡眠状态。
有没有人知道它是否真的可以在C#中写一些像用户输入(鼠标或键盘)的东西,并防止屏幕自动睡眠/锁定?
这就是我所拥有的,我认为可以做到这一点。
procedure TfmMain.CreateDocument0;
var
TempleateFileName: string;
WordApp, Document: OleVariant;
procedure FillBookmark(BookmarkName, bText: string);
var
Range: OleVariant;
begin
if Document.Bookmarks.Exists(BookmarkName) then
begin
Range := Document.Bookmarks.Item(BookmarkName).Range;
Range.Text := bText;
end;
end;
begin
TempleateFileName := ExtractFilePath(Application.ExeName)+'Templates\0.dot';
try
WordApp := GetActiveOleObject('Word.Application');
except
try
WordApp := CreateOleObject('Word.Application');
except
on E: Exception do
begin
MessageBox(Self.Handle, PChar(E.Message), PChar(fmMain.Caption), MB_OK+MB_ICONERROR);
Exit;
end;
end;
end;
try
Document := WordApp.Documents.Add(TempleateFileName, False);
FillBookmark('ObjectType', edt0ObjectType.Text);
...
WordApp.Visible := True;
WordApp.Activate;
finally
WordApp := Unassigned;
end;
end;
答案 0 :(得分:6)
使应用程序能够通知系统它正在使用中 防止系统进入睡眠状态或关闭显示屏 应用程序正在运行。
<强>说明强>
在没有
SetThreadExecutionState
的情况下调用ES_CONTINUOUS
只会重置 空闲计时器;保持显示器或系统处于工作状态, 线程必须定期调用SetThreadExecutionState
。要在电源管理的计算机上正常运行,请使用传真等应用程序 服务器,应答机,备份代理和网络管理 应用程序必须同时使用
ES_SYSTEM_REQUIRED
和ES_CONTINUOUS
他们处理事件。多媒体应用程序,例如视频播放器 和演示文稿应用程序,必须使用ES_DISPLAY_REQUIRED
在没有用户输入的情况下长时间显示视频。 应用程序,如文字处理程序,电子表格,浏览器和 游戏不需要拨打SetThreadExecutionState
。
<强>的DllImport 强>
[DllImport("kernel32.dll", CharSet = CharSet.Auto,SetLastError = true)]
static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
<强>枚举强>
[FlagsAttribute]
public enum EXECUTION_STATE :uint
{
ES_AWAYMODE_REQUIRED = 0x00000040,
ES_CONTINUOUS = 0x80000000,
ES_DISPLAY_REQUIRED = 0x00000002,
ES_SYSTEM_REQUIRED = 0x00000001
// Legacy flag, should not be used.
// ES_USER_PRESENT = 0x00000004
}
<强>用法强>
void PreventSleep ()
{
// Prevent Idle-to-Sleep (monitor not affected) (see note above)
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_AWAYMODE_REQUIRED);
}
。