在WIN7/win8,如果发送消息的程序用户权限低于和接收消息的程序,则消
息无法传递。发送程序必须等于或者等于接收程序的权限。如发送与接收

是同一个用户,或者发送是管理员帐户,接收是是普通用户,这样就可以

成功。

以下内容摘自: http://blog.csdn.net/tian_jinping/article/details/12950077

正如我们前文所说,等级的划分,是为了防止以下犯上。所以,有了用户
界面特权隔离,一个运行在较低特权等级的应用程序的行为就受到了诸多

限制,它不可以:
  验证由较高特权等级进程创建的窗口句柄
  通过调用SendMessage和PostMessage向由较高特权等级进程创建的窗

口发送Windows消息
  使用线程钩子处理较高特权等级进程
  使用普通钩子(SetWindowsHookEx)监视较高特权等级进程
  向一个较高特权等级进程执行DLL注入
  但是,一些特殊Windows消息是容许的。因为这些消息对进程的安全性

没有太大影响。这些Windows消息包括:
  0x000 - WM_NULL
  0x003 - WM_MOVE
  0x005 - WM_SIZE
  0x00D - WM_GETTEXT
  0x00E - WM_GETTEXTLENGTH
  0x033 - WM_GETHOTKEY
  0x07F - WM_GETICON
  0x305 - WM_RENDERFORMAT
  0x308 - WM_DRAWCLIPBOARD
  0x30D - WM_CHANGECBCHAIN
  0x31A - WM_THEMECHANGED
  0x313, 0x31B (WM_???)
  修复UIPI问题
  基于Windows Vista之前的操作系统行为所设计的应用程序,可能希望

Windows消息能够在进程之间自由的传递,以完成一些特殊的工作。当这些

应用程序在Windows 7上运行时,因为UIPI机制,这种消息传递被阻断了,

应用程序就会遇到兼容性问题。为了解决这个问题,Windows Vista引入了

一个新的API函数ChangeWindowMessageFilter。利用这个函数,我们可以

添加或者删除能够通过特权等级隔离的Windows消息。这就像拥有较高特权

等级的进程,设置了一个过滤器,允许通过的Windows消息都被添加到这个

过滤器的白名单,只有在这个白名单上的消息才允许传递进来。
  如果我们想容许一个消息可以发送给较高特权等级的进程,我们可以

在较高特权等级的进程中调用ChangeWindowMessageFilter函数,以

MSGFLT_ADD作为参数将消息添加进消息过滤器的白名单。同样的,我们也

可以以MSGFLT_REMOVE作为参数将这个消息从白名单中删除。例如:
在dtssm的主窗口中添加如下调用即可。
[DllImport("user32")]
public static extern bool ChangeWindowMessageFilter(uint msg, int

flags);

private void MainForm_Load(object sender, EventArgs e)
{
ChangeWindowMessageFilter(WM_COPYDATA, 1);
...
}

WIN7/8系统下程序接收不到WM_COPYDATA 消息的原因和解决的更多相关文章

  1. Tomcat 在win7/win8 系统下tomcat-users.xml.new(拒绝访问)解决方法

    tomcat启动报错No UserDatabase component found under key UserDatabase 也可以这样处理 Tomcat 在win7/win8 系统下tomcat ...

  2. 如何查看Linux系统下程序运行时使用的库?

    Linux系统下程序运行会实时的用到相关动态库,某些场景下,比如需要裁剪不必要的动态库时,就需要查看哪些动态库被用到了. 以运行VLC为例. VLC开始运行后,首先查看vlc的PID,比如这次查到的V ...

  3. Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法

    我的Oracle 10g版本是10.2.0.1.0,(10.1同理)选择高级安装,提示“程序异常终止,发生未知错误”. 1.修改Oracle 10G\database\stage\prereq\db\ ...

  4. 解决Linux系统下程序找不到动态库的方法

    思路:一般来说,通过make命令已经将程序依赖的动态库编译出来了,通过make install命令已经将动态库安装到系统的某个路径下.找没找到动态库就看这个路径是否包含在系统默认搜索动态库的路径中,如 ...

  5. win7(X64)系统下cuda7.5和VS2013的配置

    &1 安装 cuda7.5文件:链接:http://pan.baidu.com/s/1bU2zIQ 密码:nvyw &2 环境变量 注意:CUDA_PATH是安装好cuda7.5之后会 ...

  6. 解决安装包在win7,win8系统下安装后运行没有管理员权限

    今天打包一个程序在客户机上安装运行:一直报没有管理员权限:客户机是win8系统:直接右键管理员身份运行则都可以:为了避免不让用户每次都这么麻烦:只有问哈群友和百度,终于找到解决方法: 第一步:项目属性 ...

  7. WIN7 64位系统下,右下角的声音和电源图标不见的解决办法

    近日,电脑突然出现任务栏右下角的声音和电源图标消失不见的问题,重启仍旧没有修复,后来找到了解决办法 解决办法: 1.Ctrl+Shift+Esc键调出windows资源管理器. 2.找到进程中的exp ...

  8. OpenEXR-2.2.0在Win7 x64系统下的安装方法

    最近在研究openexr这种文件格式,免不得安装一下OpenEXR软件,这个软件是开源的,需要编译安装,我的安装方法是这样的,分享一下. 一:去官网http://www.openexr.com/dow ...

  9. Ubuntu 14.04 64bit 系统下打开PHPadmin时出现缺少mysqli|mysql 扩展的解决方法(php5)

    网上找了很多方法,都是翻来覆去的抄袭. 都在说把 /etc/php5/apache2/php.ini 下面的  ;extension=php_mysqli.dll  前面的 ; 注释符号去掉 再重启 ...

随机推荐

  1. Asp.Net实现Http长连接推送

    话说最新帮一个朋友搞智能家居方面的东西,做一个云平台.主要作用手机在局域网外环境时对手机客户端和智能网关中命令的互相转发. 目前已经有了一个稳定的Socket版本,但是考虑到以后的扩展和性能指标要改成 ...

  2. 8QQ消息框

    1 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> < ...

  3. Unity之GUI控件

    在这里就贴一个连接吧:GUI

  4. Qt3D教程

    美其名曰教程 其实就是自己的学习之旅 惯例第一章是qt3d的安装 首先说下环境 Windows_Xp_sp3 下载链接 Qt library 4.8.5 下载链接 (在安装Qt library之前,需 ...

  5. MFC对话框中解决回车键、ESC键退出的方法

    BOOL CYourDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_KEYDOWN&&pMsg->wP ...

  6. mysql 更新 语句中 的 safe_mode

    在mysql5中,可以设置safe mode,比如在一个更新语句中UPDATE table_name SET bDeleted=0;执行时会错误,报:You are using safe update ...

  7. Android 不通过USB数据线调试的方法

    在开发Android应用时,通常情况下是通过USB数据线连接设备和计算机,但对于一些需要使用USB设备的应用,这种方法就碰到了麻烦,手机的USB接口已经和外接的USB设备连接,无法再连数据线,此时可以 ...

  8. js获取时间和日期,字符串和时间戳之间的转换

    //获取当前时间: var myDate = new Date();//当前时间 var year = myDate.getFullYear();//当前年份 var month = myDate.g ...

  9. jquery与ajax的应用

    1.编写第一个Ajax的例子,先来看一下传统的JavaScript实现的ajax例子. 首先在前台页面中书写HTML代码. <input type="button" valu ...

  10. Constructor Prototype Pattern 原型模式(PHP示例)

    当一个类大部分都是相同的只有部分是不同的时候,如果需要大量这个类的对象,每次都重复实例化那些相同的部分是开销很大的,而如果clone之前建立对象的那些相同的部分,就可以节约开销. 针对php的一种实现 ...