zoukankan      html  css  js  c++  java
  • Windows服务弹出MessageBox对话框

    Windows服务弹出MessageBox对话框

      自从Windows升级到Vista版本后,系统服务就不在允许弹出那些惨绝人寰的MessageBox了(至于为什么不让弹出,原理有点小复杂,我也不是很门清,只是略知一点,这里就不丢人现眼了,自行Google吧),但是无论多么奇葩,总有要从服务弹出MessageBox的需求,所以就参见了国内外相关秘籍,倒是有方法可以帮助我们弹出这个对话,下面是实现代码(内部函数的具体含义MSDN详细了解)。


    #include <windows.h>
    #include <WtsApi32.h>
    #pragma comment( lib, "WtsApi32.lib" )
    BOOL SvcMessageBox( LPSTR lpCap, LPSTR lpMsg, DWORD style, DWORD &result )
    {

    if ( NULL == lpMsg || NULL == lpCap )
      return FALSE;
    result = 0;
    DWORD sessionXId = WTSGetActiveConsoleSessionId();
    return WTSSendMessage( WTS_CURRENT_SERVER_HANDLE, sessionXId,
                  lpCap, strlen(lpCap),
                  lpMsg, strlen(lpMsg),
                  style, 0, &result, FALSE );

    }

     

      在编译该代码的时候,可能vs会提示你找不到WTSGetActiveConsoleSessionId()函数,这是因为该函数是从Windows XP版本开始支持的,所以老的版本系统上没有该函数,而你的工程中却是从老的代码上升级来得,如把_WIN32_WINNT定义为0x0500,解决办法如下:
    #define _WIN32_WINNT 0x0501
    关于这些十六进制代表具体意义,自行MSDN吧。

    注意:
      弹出对话框的是用户当前进程,所以弹出的对话框不能阻塞服务进程,服务器无法通过判断该函数的返回值来做处决定,这一点很别扭,有没有大牛遇到过该问题,请指点一二。
    同时在Windows中还见到了其他的服务,弹出了如下图所示的对话框,感觉很爽,比那MessageBox用户体验要好的多,但是不知道是怎么实现的,跪求实现方法呀。

     这个如何实现呢?

  • 相关阅读:
    网络编程1:网络模型
    window10解决需要管理员删除文件的权限问题
    嵌入式框架iframe
    布局框架frameset
    JDBC连接mysql
    springboot插件
    Win10安装 oracle11g 出现INS-13001环境不满足最低要求解决方法
    卸载虚拟机
    Maven
    mysql-数据备份与还原
  • 原文地址:https://www.cnblogs.com/wanghaiyang1930/p/4434898.html
Copyright © 2011-2022 走看看