当前位置: 首页 > news >正文

delphi,c++程序 阻止Win11 用户更改系统时间

如果软件需要用系统时间,当用户改了后,会出问题,如何阻止呢,其实就是

W32Time服务,重启下就ok了

c++自己实现下

RestartService('W32Time',10000);

usesWinSvc, Windows;// 获取服务状态(返回状态常量:SERVICE_RUNNING/SERVICE_STOPPED等)
function GetServiceStatus(ServiceName: string): DWORD;
varSCMgr, hService: SC_HANDLE;Status: TServiceStatus;
beginResult := 0;SCMgr := OpenSCManager(nil, nil, SC_MANAGER_CONNECT);if SCMgr <> 0 thenbeginhService := OpenService(SCMgr, PChar(ServiceName), SERVICE_QUERY_STATUS);if hService <> 0 thenbeginQueryServiceStatus(hService, Status);Result := Status.dwCurrentState; // 返回当前状态CloseServiceHandle(hService);end;CloseServiceHandle(SCMgr);end;
end;// 停止服务(含超时等待)
function StopService(ServiceName: string; TimeoutSec: Integer): Boolean;
varSCMgr, hService: SC_HANDLE;Status: TServiceStatus;i: Integer;
beginResult := False;SCMgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);if SCMgr = 0 then Exit;hService := OpenService(SCMgr, PChar(ServiceName), SERVICE_STOP or SERVICE_QUERY_STATUS);if hService <> 0 thentry// 若服务正在运行则停止if GetServiceStatus(ServiceName) = SERVICE_RUNNING thenbeginControlService(hService, SERVICE_CONTROL_STOP, Status);i := 0;// 等待服务停止完成while (i < TimeoutSec) and (GetServiceStatus(ServiceName) <> SERVICE_STOPPED) dobeginSleep(1000);Inc(i);end;Result := (GetServiceStatus(ServiceName) = SERVICE_STOPPED);endelseResult := True; // 服务已停止finallyCloseServiceHandle(hService);CloseServiceHandle(SCMgr);end;
end;// 启动服务
function StartService(ServiceName: string): Boolean;
varSCMgr, hService: SC_HANDLE;s: pchar;
beginResult := False;SCMgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);if SCMgr = 0 then Exit;hService := OpenService(SCMgr, PChar(ServiceName), SERVICE_START);if hService <> 0 thentryResult := WinSvc.StartService(hService, 0, s);// 若服务已在运行也视为成功if not Result and (GetLastError = ERROR_SERVICE_ALREADY_RUNNING) thenResult := True;finallyCloseServiceHandle(hService);CloseServiceHandle(SCMgr);end;
end;// 重启服务(核心函数)
function RestartService(ServiceName: string; TimeoutSec: Integer): Boolean;
beginResult := False;// 先停止服务(超时由TimeoutSec控制)if StopService(ServiceName, TimeoutSec) thenResult := StartService(ServiceName); // 停止成功后启动
end;

http://www.dtcms.com/a/269026.html

相关文章:

  • 电子防抖(EIS)技术概述
  • Springboot 如何加密数据库连接相关配置信息
  • 特伦斯T1节拍器,突出综合优势与用户体验
  • AI建站工具对决:Wegic、腾讯云、Hocoos、Typedream深度测评,谁是国内用户的首选?
  • MySQL Galera Cluster企业级部署
  • 【Python】VSCode:解决模块导入与调试
  • 【音视频】HLS简介与服务器搭建
  • 【LLIE专题】通过预训练模型先验提升暗光增强模型复原效果
  • 安卓10.0系统修改定制化____如何修改固件 去除开机向导 实现开机直接进入桌面
  • C++笔记之开关控制的仿真与实际数据处理优雅设计
  • 基于物联网的城市低洼地段水深报警系统设计
  • 【人工智能学习路线(一)】以SCI为目标学习笔记——Python 编程基础入门
  • 面试总结46-50天
  • Python爬虫图片验证码和滑块验证码识别总结
  • 前端技术博客汇总文档
  • 思考5-10分钟,输出高质量的学术科研报告,谷歌的deepsearch模型太惊艳了!
  • 【最新版】Spring Boot 项目打包部署到服务器
  • 【配置+图解Android各种版本配置】
  • V8 主要版本与对应 ECMAScript 支持
  • 2025 API 开发管理工具 Apipost 与 Apifox 全维度对比
  • CentOS-7-x86_64解决:使用NAT模式无法ping通www.baidu.com或无法ping 8.8.8.8问题。
  • 防火墙防御DDoS攻击能力分析
  • AI 智能体记忆系统关键技术
  • vite打包的简单配置
  • 构建一个vue2的项目并安装echarts
  • 【机器学习笔记 Ⅲ】1 无监督学习
  • 讯飞结合kimi辅助文章博客写作
  • 如何解决微信小程序出现两个下拉刷新样式?
  • 【论文阅读】Dynamic Few-Shot Visual Learning without Forgetting
  • 科目一小述(二之前)