本帖最后由 sgbyg 于 2023-7-15 20:13 编辑
参考 这个写的
下载 ---> https://wwng.lanzoub.com/iTKtG12kaarg 解压密码:52pj
看到有问源码的 这是关键源码
[Asm] 纯文本查看 复制代码 // 定时器函数 我设置了每1000毫秒执行一次
private static void CheckIdleTime(object sender, EventArgs e) {
// 获取上次输入时间
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
GetLastInputInfo(ref lastInputInfo);
// 计算得到空闲时间
TimeSpan idleTime = TimeSpan.FromMilliseconds(Environment.TickCount - lastInputInfo.dwTime);
// 更新标题栏
form.Text = idleTime.ToString(@"hh\:mm\:ss") + " " + "By: sgbyg";
// 关闭显示器任务
if (btn1_flag) {
double seconds = idleTime.TotalSeconds;
int result = num1 - Convert.ToInt32(seconds);
// 倒计时显示到输入框
textBox.Text = result.ToString();
// 如果空闲时间超过指定时间
int minutes;
if (int.TryParse(textBox.Text, out minutes) && idleTime.TotalMinutes >= minutes) {
// 关闭显示器
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
// 初始化
btn1_flag = false;
button.Text = "开始";
textBox.ReadOnly = false;
textBox.Text = "";
}
}
// 关机任务
if (btn2_flag) {
// 获取选定的小时和分钟
int hour = int.Parse(cbxHour.SelectedItem.ToString());
int minute = int.Parse(cbxMinute.SelectedItem.ToString());
DateTime shutdownTime = DateTime.Today.AddHours(hour).AddMinutes(minute);
// 计算关机时间
if (DateTime.Now > shutdownTime) {
Process.Start("shutdown", "/s /t 0");
}
}
}
|