• C++Qt开发——阻止系统休眠方法


    1. Windows下阻止系统休眠

    有的程序在运行过程中需要阻止系统休眠以保证正常地工作,比如常见的迅雷,在Qt开发中实现这样的效果只需要增加一行代码即可。

    在main函数中增加如下代码:

    SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED);

    这样程序启动后就会阻止系统休眠和息屏。

    2. MacOs 下阻止系统休眠

    实现‘App防睡眠’功能 :打开Mac App时,不进入睡眠模式!

    头文件:#import

    如果上面这个头文件不行的话用这个 :#include

    实现代码如下:

    1. #import <IOKit/pwr_mgt/IOPMLib.h>
    2. // kIOPMAssertionTypeNoDisplaySleep防止显示休眠,
    3. // kIOPMAssertionTypeNoldleSleep防止空闲休眠
    4. // reasonForActivity是系统在需要时使用的描述性字符串
    5. // 告诉用户系统没有休眠的原因。例如,
    6. // "Mail Compacting Mailboxes" 是一个有用的字符串
    7. // 注意:IOPMAssertionCreateWithName将字符串限制为128个字符。
    8. CFStringRef reasonForActivity = CFSTR("Describle Activity Type");
    9. IOPMAssertionID assertionID;
    10. IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &assertionID);
    11. if (success == kIOReturnSuccess)
    12. {
    13. // 添加你不需要做的工作
    14. // 系统在这里休眠。
    15. //success = IOPMAssertionRelease(assertionID);
    16. // 系统将能够再次休眠。
    17. }

    CSDN QT大纲:Qt开发必备技术栈学习路线和资料

    (1). 新旧IPA

    废弃的IPA:IOPMAssertionCreate(<#CFStringRef AssertionType#>, <#IOPMAssertionLevel AssertionLevel#>, <#IOPMAssertionID *AssertionID#>) 使用提示信息:'IOPMAssertionCreate' is deprecated: first deprecated in macOS 10.6 新的IPA:IOPMAssertionCreateWithName是Mac OS X 10.6雪豹中可用的新API。 IOPMAssertionCreateWithName允许应用程序返回一个简短的字符串给用户,解释为什么该应用程序阻止了睡眠。

    (2). 关于AssertionType参数 —— kIOPMAssertionType... 用kIOPMAssertionTypeNoDisplaySleep 防止显示器睡眠(会防止系统睡眠); 用kIOPMAssertionTypeNoIdleSleep 防止系统睡眠(显示器会睡眠)。

    测试结果是: 测试系统: Mac OS X 10.9.5 用kIOPMAssertionTypeNoDisplaySleep 既能防止显示器睡眠又能防止系统睡眠,就像放视频或做幻灯片一样。

    3. 获取 Windows系统使用的语言

    1. QString g_LocaleLanguage()//获取系统语言
    2. {
    3. QString strLanguage = "en";//默认语言是英文
    4. if( QLocale::Chinese == QLocale::system().language() )
    5. {
    6. strLanguage = "zh";
    7. }
    8. else if( QLocale::Japanese == QLocale::system().language() )
    9. {
    10. strLanguage = "jp";
    11. }
    12. else if( QLocale::German == QLocale::system().language() )
    13. {
    14. strLanguage = "de";
    15. }
    16. return strLanguage;
    17. }

    4. 获取 MacOs 系统使用的语言

    1. void MacGetSystemLanguage(char *array)//获取Mac系统语言
    2. {
    3. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];//取得用户默认信息
    4. NSArray *languages = [defaults objectForKey:@"AppleLanguages"];//取得Mac系统下支持的所有语言设置
    5. NSLog(@"当前Mac系统支持的语言:%@",languages);
    6. NSString *currentLanguage = [languages objectAtIndex:0];//获取当前Mac系统使用的语言
    7. NSLog(@"当前Mac系统使用的语言:%@",currentLanguage);
    8. int iLen = [currentLanguage length];
    9. memcpy(array, [currentLanguage UTF8String], iLen);
    10. }
    1. QString g_LocaleLanguage()
    2. {
    3. char array[128];
    4. memset(array, 0, 128);
    5. MacGetSystemLanguage(array);//获取Mac系统语言
    6. qDebug()<<"array = "<<array;
    7. if (QString::compare(array, "zh-Hans-CN",Qt::CaseSensitive) == 0)
    8. {
    9. strLanguage = "zh";
    10. }
    11. else if (QString::compare(array, "ja-CN",Qt::CaseSensitive) == 0)
    12. {
    13. strLanguage = "jp";
    14. }
    15. else if (QString::compare(array, "de-CN",Qt::CaseSensitive) == 0)
    16. {
    17. strLanguage = "de";
    18. }
    19. return strLanguage;
    20. }

    本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 相关阅读:
    react setState异步操作数据的问题
    《Oracle系列》Oracle 索引使用情况查看
    【网络安全必看】如何提升自身WEB渗透能力?
    阿里35+老测试员生涯回顾,自动化测试真的有这么吃香吗?
    PLC学习笔记(一):概述
    Qt实现自定义多选下拉列表
    【网络编程】Linux网络编程基础与实战第二弹——Socket编程
    bfs广度优先遍历
    【面试普通人VS高手系列】说一说Mybatis里面的缓存机制
    laravel 事件 & 监听
  • 原文地址:https://blog.csdn.net/m0_60259116/article/details/127888026