win7下万能跨进程PostMessage/SendMessage

typedef BOOL (WINAPI *_ChangeWindowMessageFilter)( UINT , DWORD); 

BOOL AllowMeesageForWin7(UINT uMessageID, BOOL bAllow)//注册Win7全局消息
{
    BOOL bResult = FALSE;
    HMODULE hUserMod = NULL;
    hUserMod = LoadLibrary( _T("user32.dll") );
    if( NULL == hUserMod )
    {
        return FALSE;
    }
    do
    {
        _ChangeWindowMessageFilter pChangeWindowMessageFilter = (_ChangeWindowMessageFilter)GetProcAddress( hUserMod, "ChangeWindowMessageFilter" );
        if( NULL == pChangeWindowMessageFilter )
        {
            AfxMessageBox(_T("create windowmessage filter failed"));
            break;
        }
        bResult = pChangeWindowMessageFilter( uMessageID, bAllow ? 1 : 2 );//MSGFLT_ADD: 1, MSGFLT_REMOVE: 2
    }while (0);
    if( NULL != hUserMod )
    {
        FreeLibrary( hUserMod );
    }
    return bResult;
}

BOOL IsVistaOrLater()
{
    OSVERSIONINFO osvi;
    ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx(&osvi);
    if( osvi.dwMajorVersion >= 6 )
        return TRUE;
    return FALSE;
}

简单使用:

    if (IsVistaOrLater())
    {
        if ( !AllowMeesageForWin7(0xAAA,TRUE) || !AllowMeesageForWin7(0xBBB,TRUE) )
        {
            MessageBox("注册消息失败.","发生错误!",0);
            return FALSE;
        }
    }

win7下万能跨进程PostMessage/SendMessage

时间: 2024-10-08 00:30:04

win7下万能跨进程PostMessage/SendMessage的相关文章

Win7下判断当前进程是否以管理员身份运行

判断当前程序是否以管理员身份运行,代码如下: #include <iostream> #include <windows.h> using namespace std; // 判断当前程序是否以管理员身份运行. bool IsProcessRunAsAdmin() { SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; PSID AdministratorsGroup; BOOL ret= AllocateAn

Robotium通过广播与服务+shell命令实现跨进程自动化测试之广播与服务

还记得当初刚学robotium的时候,有人提起过这个方法,当时觉得很牛逼,暂时不想接触(其实就是对比较深入,难以快速理解的知识的畏惧).现在到了不得不去了解的时候,也只能硬着头皮上了... 先来讲一下我现在对这个方法的理解:整个Android程序,我们可以看成是一个个的实验室(进程)组成的,我们使用robotium就转属于其中一个实验室,实验室的规定非常的严格,不允许人员进入其他的实验室.但是人总是要有些消息或者有些活动需要别的实验室配合(跨进程)..这个时候我们只有一种办法,就是通过中转人员(

用SendNotifyMessage代替PostMessage避免消息丢失(WIN7下消息队列的默认长度是10000,队列满后消息将被丢弃)

大家都知道PostMessage会丢消息,但是消息队列的大小是多少呢,下面做了一个测试. 代码: 1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 Dialogs, StdCtrls; 8 9 const 10 UM_ADD = WM_USER + 100; 11 12 type 13 TForm1 = class(

delphi R3下 跨进程获取DLL信息 NtQueryInformationProcess

unit APIUnit; { GetProcessModuleHandle API Unit Ring3调用NtQueryInformationProcess实现跨进程获取DLL句柄 } interface USES Winapi.Windows,System.SysUtils; type USHORT = Word; UNICODE_STRING = packed Record Length : USHORT; MaximumLength: USHORT; Buffer : PWideStr

.net环境下跨进程、高频率读写数据

原文:.net环境下跨进程.高频率读写数据 一.需求背景 1.最近项目要求高频次地读写数据,数据量也不是很大,多表总共加起来在百万条上下. 单表最大的也在25万左右,历史数据表因为不涉及所以不用考虑, 难点在于这个规模的热点数据,变化非常频繁. 数据来源于一些检测设备的采集数据,一些大表,有可能在极短时间内(如几秒钟)可能大部分都会变化, 而且主程序也有一些后台服务需要不断轮询.读写某种类型的设备,所以要求信息交互时间尽可能短. 2.之前的解决方案是把所有热点数据,统一加载到共享内存里边,到也能

Windows跨进程设置文本和发送消息

进程内设置文本,可以调用SetWindowText,跨进程这个会无效,应当如下:::SendMessage(hWnd, WM_SETTEXT, NULL, (LPARAM)文本内容); 注意这里不能使用PostMessage 向另一进程某窗口发送回车键消息方法为:::PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0); 这里不能使用SendMessage 如果是进程内还可使用:SendInput和keybd_event,如:keybd_event(VK_RET

Win7下超级管理员创建普通权限任务

已转至新的博客 http://www.raysoftware点击打开链接.cn/?p=49 项目中用到一个功能,Win7下超级管理员创建普通权限任务. 试了几种办法,例如获取资源管理器的Token,然后以这个Token用CreateProcessWithTokenW创建任务.这样做是可以的. 但是如果当前没有资源管理器或者其他普通权限的任务怎么办?CreateToken自己构造一个Token也可以,但是那些参数看了就头大. 试了一下以超级用户方式启动任务管理器用菜单中的运行,居然是默认创建普通权

android 远程Service以及AIDL的跨进程通信

在Android中,Service是运行在主线程中的,如果在Service中处理一些耗时的操作,就会导致程序出现ANR. 但如果将本地的Service转换成一个远程的Service,就不会出现这样的问题了. 转换成远程Service非常简单,只需要在注册Service的时候将他的android:process的属性制定成 :remote就可以了. 重新运行项目,你会发现,不会出现ANR了. 为什么将MyService转换成远程Service后就不会导致程序ANR了呢?这是由于,使用了远程Serv

vc++教程之win7下基址定位处理

作者:无名  邮箱:coolmoonf($#)163.com  博客:http://blog.csdn.net/nnsword 处理目标程序如下: 里面有二个方法,一个加血,一个是减血.由于系统是win7,寻到的Call基址,会改变,所以不能通过固定基址来远程调用这二个方法.所以我们只能变通了. 首先我们知道,编译后程序相对于模块基址的偏移量是不变的,所以我们可以按这个思路来处理. 首先分析寻找二个方法的基址(怎么分析,在这不多说明),如下: 加方法基址:012F35B0 减方法基址:012F3