SendMessage 和 PostMessage 的区别 z

跨域解决方案之postMessage postMessage是 HTML5 引入的 API,用于实现窗口(window)之间的跨域通信。它允许一个窗口向另一个窗口发送文本数据,无论这两个窗口是否同源。接收方窗口可以通过监听message事件来获取发送的数据,并进行相应处理。这一机制的出现,为 Web 应用在不同源之间进行安全、可控的数据交互提供了可能。 阅读详情

1、首先是返回值意义的区别,我们先看一下 MSDN 里的声明:

LRESULT SendMessage(
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam
);
BOOL PostMessage(
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam
);

  其中 4 个参数的意义是一样的,返回值类型不同(其实从数据上看他们一样是一个 32 位的数,只是意义不一样),LRESULT 表示的是消息被处理后的返回值,BOOL 表示的是消息是不是 Post 成功。

2、PostMessage 是异步的,SendMessage 是同步的。
  PostMessage 只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage 等待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。

3、如果在同一个线程内,SendMessage 发送消息时,由 USER32.DLL 模块调用目标窗口的消息处理程序,并将结果返回。 SendMessage 在同一线程中发送消息并不入线程消息队列。PostMessage 发送消息时,消息要先放入线程的消息队列,然后通过消息循环 分派到目标窗口(DispatchMessage)。

  如果在不同线程内,SendMessage 发送消息到目标窗口所属线程的消息队列,然后发送消息的线程在 USER32.DLL 模块内监视 和等待消息处理,直到目标窗口处理完返回。SendMessage 在返回前还做了很多工作,比如,响应别的线程向它 SendMessage。 Post 到别的线程时,最好用 PostThreadMessage 代替 PostMessage,PostMessage 的 hWnd 参数可以是 NULL,等效于 PostThreadMessage + GetCurrentThreadId。Post WM_QUIT 时,应使用 PostQuitMessage 代替。

4、系统只整编(marshal)系统消息(0 到 WM_USER 之间的消息),发送用户消息(WM_USER 以上)到别的进程时,需要自己做整编。

  用 PostMessage、SendNotifyMessage、SendMessageCallback 等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处理指针就已经被释放了。

5、在 Windows 2000/XP 里,每个消息队列最多只能存放 10,000 个 Post 的消息,超过的还没被处理的将不会被处理, 直接丢掉。这个值可以改得更大:[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT /CurrentVersion/Windows] USERPostMessageLimit,最小可以是 4000。


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
Python后台键鼠操作:游戏自动化与Windows消息机制实战 在软件自动化领域,模拟用户输入是核心技术之一。其原理是通过程序控制键盘和鼠标,替代人工操作。从技术价值看,自动化能显著提升重复性任务的效率,广泛应用于软件测试、办公自动化和游戏辅助等场景。传统的`pyautogui`等库依赖前台模拟,一旦窗口被遮挡或最小化便会失效。而基于Windows消息机制的后台操作,通过`PostMessage`等API直接向目标窗口的消息队列发送`WM_KEYDOWN`、`WM_LBUTTONDOWN`等系统消息,实现了真正的后台控制。这解决了脚本在服务器部署或无干扰运行时的核心痛点 阅读详情

相关推荐

python使用win32*模块模拟人工操作——城通网盘下载器(一)

上篇讲了,如何使用“城通网盘批量下载器 v2.0”来下载城通网盘的文件。其主要操作集中在主界面中,所以我们首先使用python来模拟在主界面的操作。 打开城通网盘批量下载器,进入主界面,如图所示: 然后打开spy++,查看该程序的窗口信息。 可以看到,这个程序主窗口的句柄为 00090816(十六进制数),值得注意的是,这个句柄是每次打开程序时,windows随机生成

shawpan的专栏 5195

浅析 postMessage 方法介绍、如何接收数据(监听message事件及其属性介绍)、使用postMessage的安全注意事项、具体使用方式(父子页面如何互发消息、接收消息)

postMessage 是 html5 引入的API,postMessage()方法允许来自不同源的脚本采用异步方式进行有效的通信,可以实现跨文本文档、多窗口、跨域消息传递,多用于窗口间数据通信,这也使它成为跨域通信的一种有效的解决方案。 一、Window postMessage() 方法介绍 postMessage() 方法用于安全地实现跨源通信。(只有同源脚本才能相互通信,window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。) 1、语法:o

cmhahaha的博客 2万+

浏览器扩展接入AI助手必踩的四个坑:CSP、密钥、Service Worker与页面冲突

浏览器扩展与AI服务的集成,远比普通网页调用模型接口复杂。开发者常因忽略扩展运行时的边界限制,导致本地调试正常、发布后却频繁报错。理解跨域请求与CSP策略的约束,是打通扩展访问AI服务的第一步;密钥管理与OAuth认证流程,则决定了敏感信息在扩展中是否安全。Manifest V3的Service Worker生命周期会直接影响流式输出与会话状态,而内容脚本与页面DOM的冲突,又可能让AI助手入口悄然消失。这些工程边界问题叠加在一起,构成了扩展型AI产品上线前的核心挑战。本文从这些基础概念出发,逐步剖析其技术

weixin_30587927的博客 357

postMessage - 跨域消息传递

window.postMessage() 方法可以安全地实现跨域通信和页面间数据通信。 postMessage 可用于解决以下方面的问题: 页面和其打开的新窗口的数据传递 页面与嵌套的 iframe 消息传递 多窗口之间消息传递 想要使用 postMessage 实现跨域和页面间数据通信,只要记住 window 提供的 postMessage 方法和 message 事件就ok了。 语法...

huangpb的博客 7万+

MFC模态对话框从入门到精通:原理、实现与避坑指南

在Windows桌面应用开发中,对话框是实现用户交互的核心组件,其设计直接关系到软件的操作逻辑与数据流。模态对话框通过阻塞调用线程并启动独立消息循环,强制用户完成当前任务,确保了数据的一致性和操作的唯一性,这是其与非模态对话框的本质区别。理解其背后的消息泵机制、资源绑定与数据交换原理,对于构建健壮的GUI应用至关重要。在MFC框架下,通过CDialog派生类、资源模板与消息映射三大支柱的协同,开发者可以高效实现如用户信息录入、配置确认等典型应用场景。本文聚焦于MFC模态对话框的实战开发,深入解析DoModa

weixin_30333885的博客 405

PIVlab软件入门:从GUI操作到2D2C粒子测速实战

本文详细介绍了PIVlab软件在2D2C粒子测速中的入门与实战应用。从GUI操作到环境搭建,再到图像预处理和核心参数设置,帮助用户快速掌握这一基于MATLAB的开源工具。通过实际案例和技巧分享,展示了PIVlab在流体力学实验中的高效性和实用性。

weixin_42547431的博客 227

学习postMessage

本文主要介绍postMessgae的基本使用,它主要用来解决跨域的页面通讯,当然你可以用来作为跨页面的常规方案。

dzqxwzoe的博客 1314

【SAP-MDG】工作流任务配置实战:从基础配置到代理分配详解

本文详细解析了SAP MDG工作流任务配置的全流程,从基础配置到代理分配的关键操作。通过实战案例和最佳实践,帮助用户掌握Configure Workflow Tasks的核心技巧,包括环境检查、代理分配、SWDD事务码使用及常见问题排查,提升主数据管理效率。

weixin_33738555的博客 250

PostMessage的原理和实际应用

PostMessage和实际应用 PostMessage是html5新引进的一个可跨源通信api,你可以通过这个api,让主页面和任意frame类页面或window.open打开的页面进行双向通信。大概流程如下图: 简而言之,通过PostMessage,你可以无视不同域名导致的跨域报错等问题。 关于它的用法,需要注意的几点: 首先,信息传递安全问题。为了你的信息传递能准确传达,无论是作为主页面还是子页面,传递重要信息时都应该填写origin而不是“*”,避免被截获。 其次,iframe或者window.

陈荣亮的博客 1万+

告别龟速计算!用Python的fengwo模块5分钟搞定通达信COST/WINNER函数(附完整代码)

本文介绍如何使用Python的fengwo模块高效复现通达信的COST和WINNER函数,解决量化交易中的计算精度和性能问题。通过C++核心算法和多线程优化,计算速度提升显著,误差低于0.5%,并支持与通达信DLL无缝集成,适用于实盘交易策略开发。

weixin_42533751的博客 600

DSP配置I2C通讯(非IO口软件模拟时序)

dsp即数字信号处理器,是一种广泛应用的嵌入式处理器,主要应用是实时快速地实现各种数字信号处理算法,目前,国际主要的dsp供应商是ti公司,其tms32系列产品占据了dsp市场近一半的份额,本文以TMS320F28377D为例,使用ti公司dsp开发工具ccs10.1配置i2c模块。 写这篇文章的缘由,因为市面上很多DSP其实内部是具有硬件I2C接口的,但由于网络上大部分资料和例程都是利用IO口模拟I2C时序进而实现I2C通讯的。给很多想学习硬件I2C通讯的小伙伴带来了困难。 下面先介绍一下配置步骤 1.E

weixin_44387442的博客 5546

keybd_event跟SendMessage,PostMessage模拟键盘消息的区别 z

首先你会发现keybd_event函数中是没有窗口句柄作为参数的,好奇的你一定会觉得很奇怪,那是因为,keybd_event是全局模拟按键的,只对前台窗口(即当前的活动窗口)才可以,但是如果模拟的按键正好也是某个窗口的全局热键消息,那该窗口也能接收到的 而SendMessage 、PostMessage是对指定句柄窗口都其作用的,对于做一些一外挂是非常有用的。例如可以做成这样的效果...

afeyfre41671的博客 779

YOLOv11官方代码库与预训练模型下载:介绍Ultralytics官方GitHub及模型权重(yolov11n.pt, yolov11s.pt等)

本文介绍了Ultralytics官方GitHub仓库和YOLOv11预训练模型。Ultralytics仓库是YOLO系列算法的官方实现,包含YOLOv11最新代码、预训练模型、文档和工具。仓库采用清晰的代码结构和活跃的更新策略,支持全流程开发。YOLOv11提供了5种不同规模的模型变体(YOLOv11n/s/m/l/x),在精度、速度和模型大小间权衡,适用于从移动设备到高精度检测等不同场景。各模型在COCO数据集上预训练,可直接使用或微调,满足多样化应用需求。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 5833

另类讨论SendMessage和PostMessage区别

文章目录前言函数信息目的出现问题使用方式测试更换消息函数出错原因解决办法 前言 今天在使用MFC消息传递函数时遇到一个问题,困了了半天,最终终于还是找到了原因。 函数信息 先看看两个函数原型: LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ...

学无止尽,谨言慎行! 855

手把手教你学基带SOC芯片(4.4.9)--基带芯片的电源管理实例:高通 Snapdragon 系列实例(十)

Snapdragon 888 通过支持多种深度睡眠模式,如 AOAC 模式、低功耗模式和深度睡眠模式,以及智能电源管理技术,实现了对功耗的精细管理。这些模式不仅延长了设备的电池寿命,还确保了用户在各种使用场景下的良好体验。无论是保持网络连接、限制后台活动,还是完全关闭不必要的功能,Snapdragon 888 都能够灵活应对,提供高效的功耗管理方案。

MHD0815的博客 740

Go语言Gin框架项目:从零到一搭建一个用户管理系统

本文介绍了一个基于Go语言Gin框架开发的用户管理系统。系统采用MySQL数据库存储数据,使用Bootstrap 5构建现代化UI界面,实现了完整的CRUD功能。主要特点包括:RESTful API设计、前后端双重表单验证、实时搜索功能、SQL防注入措施以及响应式布局。项目结构清晰,包含数据库配置、用户模型、处理器和前端模板等模块。系统提供用户列表展示、新增/编辑表单、删除确认等功能,通过参数化查询确保安全性,并支持按姓名或邮箱搜索用户。

数据知道的博客 3995

模拟键盘事件PostMessage和keybd_event

PostMessage(::GetFocus(), WM_KEYDOWN, VK_RETURN, -1); 使用PostMessage可以向操作系统投递消息,第一个参数为接收窗口的句柄   keybd_event(VK_RETURN,0,0,0); 模拟键盘事件

小小程序员 5618

MyBatis-Plus 实战:敏感字段自动加解密支持模糊查询

本文基于MyBatis-Plus框架提出了一种全链路敏感字段加密方案。通过自定义TypeHandler实现数据入库自动加密和查询自动解密,结合重写LambdaQueryWrapper处理查询条件加密,并适配多种查询方式。方案核心包括:1)AESUtil工具类提供加解密基础能力;2)EncryptTypeHandler实现字段类型转换;3)实体类通过注解配置加密字段。该方案在保证数据安全的同时,对业务代码侵入性小,支持姓名、手机号等敏感信息的全流程加密处理,满足系统开发的安全需求。

蔡定努 596

[学习笔记] Windows编程——窗口和消息 ——(四)消息和消息队列

与基于 MS-DOS 的应用程序不同,基于 Windows 的应用程序是事件驱动的。它们不会进行显式函数调用获取输入,而是等待系统向其传递输入。系统将应用程序的所有输入传递到应用程序的各个窗口。每当有窗口的输入时,系统都会调用出窗口函数来处理输入并最终将控制权再返回到系统。如果顶级窗口停止响应消息超过几秒钟,系统会认为该窗口没有响应。在这种情况下,系统会隐藏窗口,并将其替换为具有相同 Z-Order、位置、大小和视觉属性的虚影窗口。用户可以移动它、调整大小,甚至关闭应用程序,但程序实际上是没有响应。

cxsydzn的博客 1423

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

windows 消息队列

点击链接加入群【ゞ***闖兲ゞ】: 许多朋友都不会使用MSDN LIBRARY(虽然MSDN 跟 MSDN LIBRARY 不是一回事,但是下文中还是简写为MSDN),其实它是非常重要的东西。 其实所有的说明都可以在MSDN中查到。 环境:VS2008 + SP1补丁 MSDN LIBRARY 200...

weixin_34302561的博客 180

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

量子计算中的MPS态制备与RG协议优化

量子态制备是量子计算的核心技术之一,特别是在处理多体纠缠态时面临巨大挑战。矩阵乘积态(MPS)作为一种高效的量子态表示方法,能够以多项式复杂度描述具有有限纠缠的量子系统,显著降低了传统方法的指数级资源需求。其原理基于张量网络的低秩近似,通过控制键维度D在保持精度的同时压缩表示空间。这一技术在NISQ时代尤为重要,可用于模拟一维量子系统的基态特性,如SPT相变等。实际应用中,MPS与重整化群(RG)协议的结合,通过分块操作和层次化分解,将电路深度从O(n)优化至O(log(n/ϵ)),大幅提升了在超导量子处理

weixin_30709061的博客 410

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

优化第一步:问题形式化——从模糊需求到可解数学模型

在计算优化实践中,‘问题形式化’是连接现实业务与数学求解的基石概念。它并非简单的公式翻译,而是对变量语义、目标导向性与约束刚性的系统性建模过程。其核心原理在于将模糊的工程需求锚定为可测量、可验证、可计算的数学结构,确保后续算法能在正确可行域中搜索。这一环节直接决定优化结果的可解释性、可部署性与鲁棒性,技术价值远超参数调优或求解器选型。典型应用场景涵盖电力调度、光伏倾角寻优、物流路径规划及芯片功耗建模等工业级任务。尤其在‘Towards AI’落地过程中,形式化质量成为区分‘调包工程师’与‘问题解决者’的关键

weixin_30300225的博客 440
上一篇: [Perl]gVim+Perl::Tidy快速格式化代码 z
下一篇: 如何使用命令trap来捕捉信号? z
KataDoc360
博客等级 码龄18年 65粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值