在 Win32 控制台应用程序中使用 ShutdownBlockRequestCreate

2023-12-26

阻止在 Windows 7 上运行的 Win32 控制台应用程序提前终止的正确方法是什么?

Vista 推出后,有关方式发生了变化应用程序关闭 http://msdn.microsoft.com/en-us/library/ms700677%28v=vs.85%29.aspx发生了。 XP 中的行为是打开一个 UI 来请求用户是否要强制关闭,与此相反,如果不以编程方式阻止该进程,Windows Vista(和 7)将终止该进程。控制台应用程序和没有可见顶级窗口的应用程序也必须使用新功能关闭块请求创建 http://msdn.microsoft.com/en-us/library/aa376877%28v=VS.85%29.aspx提供 Vista 在弹出的 UI 中显示的原因,否则它将在 5 秒后终止程序。

下面是我在 Win32 控制台应用程序中使用 ShutdownBlockRequestCreate 函数的尝试;向导创建后,预编译头选项已从项目中删除。每当我使用该函数时,我都会收到错误代码 5,对应于 ERROR_ACCESS_DENIED。这显然是(根据应用程序关闭链接 http://msdn.microsoft.com/en-us/library/ms700677%28v=vs.85%29.aspx)因为我没有从用于创建窗口(控制台窗口)的同一线程调用该函数。

#include <iostream>
#include <tchar.h>
#include <conio.h>
#include <windows.h>

typedef BOOL (WINAPI *SBRCREATEFUNC)(HWND,LPCWSTR);

void RegisterShutdownBlockReason() {
    SBRCREATEFUNC ShutdownBlockReasonCreate;
    HWND hWnd = GetForegroundWindow();
    HINSTANCE hinstLib = LoadLibrary(TEXT("user32.dll"));
    if (hinstLib != NULL) {
        ShutdownBlockReasonCreate = (SBRCREATEFUNC) GetProcAddress(hinstLib,"ShutdownBlockReasonCreate");
        if(ShutdownBlockReasonCreate != NULL) {
          if(!(ShutdownBlockReasonCreate) (hWnd, L"Terminating Communication Sessions")) {
              printf("\nfailed To Register Reason, failure code: %d\n", GetLastError());
          } else {
              printf("\nRegistered Reason\n");
          }
        } else {
            printf("\nCouldn't load ShutdownBlockReasonCreate procedure\n");
        }
    } else {
        printf("\nFailed to LoadLibrary(\"user32.dll\")\n");
    }
}

int _tmain(int argc, _TCHAR* argv[]) {
    RegisterShutdownBlockReason();
    printf("Type to terminate program.\n");
    getch();
    return 0;
};

作为解决方法,您可以在启动时创建一个仅显示消息的窗口并使用ShutdownBlockReasonCreate在它的窗把手上?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Win32 控制台应用程序中使用 ShutdownBlockRequestCreate 的相关文章

随机推荐

  • 用于 Pl/SQL 开发的 IDE [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有免费的 PL SQL 开发 IDE I use SQL开发人员 http www oracle com technology pro
  • 运行时从Jar文件加载资源

    我正在尝试从运行时添加的 Jar 文件加载资源 但没有走得太远 这是我的代码 常规 URL url new URL jar file out resource jar test resource def urlList lt lt url
  • sap abap 中系统忽略条件的循环

    我尝试应用带有条件的循环来总结相应的行 字段 其中条件应该是正确的 但在系统运行期间 程序忽略了条件并总结了所有行 有什么建议来解决这个问题吗 SELECT FROM LIPS INTO CORRESPONDING FIELDS OF TA
  • WebService 在 WebLogic 10.3 中不“可见”

    我目前正在尝试让我的应用程序提供网络服务 该应用程序使用 spring 并在 Weblogic 10 3 实例下运行 我按照 合同第一 的方法构建了网络服务 所以我基本上拥有的是生成的 WS 接口 该接口的实现 定义 servlet 绑定的
  • 从欧洲DTCO公司卡读取数据

    我需要能够从欧洲数字行车记录仪公司卡 智能卡 读取卡和公司识别数据 这些在文档中进行了描述委员会条例 EC No 1360 2002 http eur lex europa eu LexUriServ LexUriServ do uri O
  • Oracle 11g“绑定变量不存在”

    我在以下代码中收到 ORA 01006 绑定变量在第 15 行不存在 错误 DECLARE v search string varchar2 4000 OK v query str VARCHAR2 4000 match count int
  • 在 Web Deploy 工具中设置自动备份

    我一直在努力设置自动备份 但似乎遇到了困难 按照此document http www iis net learn publish using web deploy web deploy automatic backups 并使用 Power
  • 读取许多文件,计算一些内容,将结果保存在数据帧中(R)

    我有大约 100 个文件 长文件名 其中包含来自模拟的数据 主题是两种物质的降解 所以我有 3 个相关列 时间 物质 1 的相对浓度 Sub1 从 1 0 到零 和相对浓度 物质 2 Sub2 我想读取文件 确定每种基材 99 降解的时间
  • 将字节数组转换为对象

    C 有没有办法将纯字节数组转换为对象 例如给定这个类 class Data public int int1 public int int2 public short short1 public long long1 我希望基本上能够做这样的
  • 在 Android Studio 中运行 Python 脚本 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在运行 Android Studio 2 2 3 我需要在开发过程中运行 Python 脚本来处理一些数据文件 最终的APK不需要
  • 向 NSScrollView 添加大量视图

    我正在尝试添加一个子视图 来自NSViewController 对于字典中的每个元素NSScrollView获得某种表格视图 但对单元格具有更大的灵活性 是否可以 以编程方式 放置例如100 个子视图彼此放在一起 因此您必须向下滚动NSSc
  • 更新回收视图中的单个项目。我正在使用分页库并想更新单个项目/行

    我使用提交列表将 pagedlist 值传递给适配器 当我更新单个项目时 请考虑我正在点击回收器视图中的提要的类似按钮 如何更新单个项目 我正在按照这个例子进行分页实现 https github com saquib3705 PagingL
  • SignalR 不解析传入服务器调用的 JsonSerializer

    J原始值 https github com SignalR SignalR blob master src Microsoft AspNet SignalR Core Json JRawValue cs https github com S
  • 实体管理器是否需要关闭每个查询?

    我将在一年内使用 JPA 作为数据库框架使用 Java 开发系统 每次查询时 我都不关闭EntityManager IMO的理解是JPA自动关闭实体管理器执行查询后 getSingleResult or 获取结果列表 如果没有那么垃圾收集会
  • 为什么 ob_start('ob_gzhandler') 会破坏这个网站?

    我有一个网站 如果存在 ob start ob gzhandler 则会在浏览器中抛出内容编码错误 如果我删除该语句 它就可以正常运行 该站点与许多其他站点使用相同的框架 服务器和托管包 无论声明是否在其中 它们都有效 该语句位于框架中 而
  • SendMessage WM_SETTEXT 到 TextBox 不会触发 TextChanged 事件

    我有代码获取文本框控件的句柄并使用 Windows API 来更改文本 更新文本时不会触发 TextChanged 事件 有没有办法使用 Windows API 触发 TextBox TextChanged 事件 Update 我认为该事件
  • Microsoft SQL Server 2008 主键的含义

    主键的概念对于SQL Server数据库引擎有什么意义 我的意思不是在 ID 列上创建的聚集 非聚集索引 我的意思是约束对象 主键 存在与否有什么关系吗 备择方案 更改表添加主键聚集 更改表创建聚集索引 这有什么不同吗 一般来说 KEY 是
  • Python - Pyodbc 连接错误

    我正在尝试使用Python3 4连接到SQL Server数据库 这是适合我的代码 cnxn pyodbc connect DRIVER ODBC Driver 13 for SQL Server SERVER DESKTOP GDM2HQ
  • CSS 媒体查询有多慢?

    当我组织 CSS 时 我喜欢将相关样式保留在一起 页眉样式位于一个部分 页脚样式全部位于同一位置 等等 抱歉 OOCSS 拥护者 我最近一直在尝试针对较小 较大屏幕的媒体查询 为了与我的组织方案保持一致 我必须为代码的每个部分所针对的每个屏
  • 在 Win32 控制台应用程序中使用 ShutdownBlockRequestCreate

    阻止在 Windows 7 上运行的 Win32 控制台应用程序提前终止的正确方法是什么 Vista 推出后 有关方式发生了变化应用程序关闭 http msdn microsoft com en us library ms700677 28