如何获得另一个应用程序窗口中的文本

编写应用程序,有一个标题为“计算”的窗口,窗口的布局为FlowLayout布局。窗口中添加两个文本区,当我们在一个文本区中输入若干数时,另一个文本区不断地更新求和及平均值。 import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.*; import java.util.Scanner; public class Dzj { public static void main(String[] args) { new DzjWin("计算"); } } class . 阅读详情

如何获得另一个应用程序窗口中的文本
编译/hangwire 
本文示范源代码
问题:
    我想从一个程序获得另一个程序编辑框的文本。用GetWindowText试了一下,它总返回NULL。请问大虾有没有办法来获得另一个程序窗口中的文本?如果能,如何实现? 另外,在VC知识库的论坛中,也有人热烈地讨论过此问题,并且自己找到的解决方案。
解答:
    噢,我喜欢讨论垒球问题;它们使我看起来很睿智。要想获得另一个进程窗口的文本,只需直接发送WM_GETTEXT。
CWnd* pWnd = GetOtherAppWindow();
TCHAR buf[512];
pWnd->SendMessage(WM_GETTEXT,
    sizeof(buf)/sizeof(TCHAR),
    (LPARAM)(void*)buf);
    如果您在用C编程,自然用HWND代替CWnd。有人肯定会问:嘿,等一下——如果这样做可以的话,为什么GetWindowText不起作用呢?WM_GETTEXT不就是GetWindowText发送的吗?错也,GetWindowText只在窗口属于当前进程时才发送WM_GETTEXT,否则它干别的事情。这一点文档中说得很清楚:
如果目标窗口属于另一个进程,并且有窗口标题,则GetWindowText获得窗口标题文本。如果没有窗口标题,则GetWindowText返回空串。这是设计行为,也就是说,在设计时就是这么处理的。
换句话说,你可以获得另一个进程主窗口的标题,但得不到窗口中象编辑框、组合框或者按钮这样的子窗口的文本。
    为什么会这样呢?为什么这是“设计行为”呢?因为文档又解释道:
       “它允许目标窗口所在进程挂起的情况下,应用程序无需挂起而调用GetWindowText,”真是妙哉,不是吗?GetWindowText提供了禁地(never-never land)调用保护。当然老道的程序员可能会想:那有什么好的?GetWindowText得不到文本,如果想要得到文本必须用SendMessage发送WM_GETTEXT,它可能挂起。那何以保护呢?即便不使用SendMessage!你还能用SendMessageTimeout,即使是调用进入一个死锁进程, 它肯定能返回。在多任务世界中,要考虑的繁琐事情真是太多了。
    真正的问题是:为什么微软公司的那帮家伙不让GetWindowText函数做它该做的事情?也就是说,如果窗口在当前进程中,为什么GetWindowText 不做一次SendMessage(WM_GETTEXT),而窗口在另一个进程时,做一次SendMessageTimeout呢?很好的问题。只有Window 向导(Wizard)知道。我怀疑在从伪多任务到真正的多任务过渡的过程中,微软公司的那帮家伙在处理以前遗留下来的应用时有难言之隐......
按照惯例,我写了一个小程序GWTTest作示范。GWTTest显示从GetWindowText 和 SendMessageTimeout(WM_GETTEXT) 获得的顶层窗口及其编辑框控制的文本。如图一所示:
图一GetWindowText 与 WM_GETTEXT的比较
    GWTTest程序本身没有什么用处,它只是用来示范GetWindowText 和 WM_GETTEXT之间的差别。从程序的运行结果可以看出,两种操作都能返回顶层窗口的标题,但只有WM_GETTEXT才能对其它进程中的编辑框控制起作用。GWTTest是一个简单的CListView应用程序;获取文本的函数是CMyView::AddWindowInfo,代码如下:
//AddWindowInfo.cpp源代码
//////////////////
// 添加窗口信息, 顶层或者编辑框控制
void CMyView::AddWindowInfo(int iItem, HWND hwnd)
{
   CListCtrl& lc = GetListCtrl();
   CWnd* pWnd = CWnd::FromHandle(hwnd);
   int iSubitem = 1;

   // 添加类名
   CString s;
   ::GetClassName(hwnd, s.GetBuffer(STRINGLEN), STRINGLEN);
   lc.SetItemText(iItem,iSubitem++,s);

   // 用GetWindowText添加窗口文本
   pWnd->GetWindowText(s);
   lc.SetItemText(iItem,iSubitem++,s);
   // 用WM_GETTEXT添加窗口文本
   DWORD result;
   SendMessageTimeout(hwnd,
      WM_GETTEXT,
      STRINGLEN,
      (LPARAM)s.GetBuffer(STRINGLEN),
      0,
      1000,
      &result);
   lc.SetItemText(iItem,iSubitem++,s);
   s.ReleaseBuffer();
}

利用WM_GETEXT获取控件信息的例子 立即下载

相关推荐

ZEMAX知识点:坐标间断面(coordinate break)

zemax知识点:坐标间断面

weixin_47638568的博客 1万+

combobox用getwindowtext的方法取不到text,得用SendMessage才行

SendMessage(hchild, WM_GETTEXT,256, integer(@strCaption) );

JUST DO IT. 3744

距离多普勒谱(RD谱)绘制方法及理解

RD谱是信号处理领域常用的图形。原始信号往往是一维时域序列,如何将其二维化,并进行变换生成RD谱呢?由于刚刚接触,查阅了网络上、老师手里的资料,发现RD谱的绘制方法并不统一,有些存在一定问题。在此,将心得体会记录下来。

mddh_123的博客 3万+

如何获得另一个应用程序窗口中的文本 BY hangwire

问题:     我想从一个程序获得另一个程序编辑框的文本。用GetWindowText试了一下,它总返回NULL。请问大虾有没有办法来获得另一个程序窗口中的文本?如果能,如何实现? 另外,在VC知识库的论坛中,也有人热烈地讨论过此问题,并且自己找到的解决方案。

beatle.Y 1485

黏菌算法(Slime Mould Algorithm,SMA)

这是一篇关于黏菌算法的总结博客,包含算法思想,算法步骤,求函数最值(Python实现),算法改进等,持续更新ing

weixin_46838605的博客 1万+

【全新官方接口】php检测微信域名拦截,检测微信域名被封

你的域名在微信被拦截的3种常见情况 1、域名因违规或有风险被拦截(红色拦截) 2、类似taobao.com,douyin.com这种的恶意竞争式拦截,淘宝、抖音等微信的竞争对手一般都是白色拦截(白色拦截) 3、有一个中间页的拦截,需要多次点击按钮才可以跳转到你的域名的,多是一些新型域名后缀,例如.top .xyz .link后缀,这种情况,备案后可以解决(备案拦截) 通过php get_headers()函数就可以分析到结果 这个下标为6是一个URL,在微信访问后正是这个讨厌的页面! 如果切换为

TANKING,开源开发者! 2875

C#Win 32 API GetWindowText获取不到最新值,解决办法

但是使用SendMessageA获取到的为1234。GetWindowText获取到的值依旧是111。窗口默认值111,当我用。把窗口改成1234后。

q852474220的博客 720

A-Level经济例题解析及练习Opportunity Cost

例题Question: Opportunity CostYou are selling your 1996 Mustang.  You have already spent $1000 on repairs. At the last minute, the transmission dies.  You can pay $600 to have it repaired, or sell the car “as is.”In each of the fol

Alevel3的博客 744

当GetWindowText获取不到标题时可以用SendMessage

GetWindowText所有父窗口标题基本可以获取到, 但是当获取父窗口下的子窗口控件标题文本时有时候就没那么好用了, 这个时候可以通过SendMessage发送消息来获取,也很简单,C/C++代码贴出来: 1 #include <iostream> 2 #include <Windows.h> 3 4 using namespace std; ...

weixin_33755847的博客 1011

IPSec Over GRE和GRE Over IPSec技术

IPSec Over GRE 和 GRE Over IPSec 一. 技术介绍 IPsec     主要作用是对数据进行加密,因为他能提供所有有时候被单独用作实现加密的一种方法!IPsec建立的是一个逻辑隧道,并不是真正意义上的隧道!并且不能提供路由功能,因为IPsec不支持非ip流量,也不支持广播(组播)! GRE     (通用路由封装)能很好的提供一个真正意义上的点对点的隧道,GRE是一种三层VPN封装技术。GRE可以对某些网络层协议(如IPX、Apple Talk、IP等)的报文进行封装,使封装后

qq_56228347的博客 9867

一文读懂水利无人机AI识别算法,概念、需求、解决方案

复亚智能的水利无人机AI识别算法通过先进的技术手段,为水利管理提供了高效、精准的解决方案。随着技术的不断进步和应用的深入,复亚智能的解决方案将在更多水利场景中发挥重要作用,助力智慧水利管理的全面升级。该系统通过搭载在无人机上的传感器和摄像头,结合先进的AI识别算法,实现对河道淤积、漂浮物、船只和水质污染等问题的自动检测和监控。基于大量实飞采集的数据,复亚智能的算法经过严格的训练,能够准确识别各种水利问题。复亚智能的系统具有高度的开放性和兼容性,能够与第三方平台和算法无缝对接,满足不同客户的多样化需求。

foiadrone的博客 1197

一个应用程序的窗口如何嵌入另一个应用程序窗口中?

一个应用程序的窗口嵌入另一个应用程序的窗口中。

lza_csdn2019的博客 1744

Cadence virtuos安装教程

本文详细介绍了在Ubuntu 18.04系统上安装Cadence Virtuoso IC617及MMSIM的完整流程。主要内容包括:1)系统环境准备(安装JDK及相关依赖包);2)通过创建软链接和修改系统文件实现RedHat环境兼容;3)共享目录文件操作与分卷压缩包合并解压技巧;4)使用InstallScape工具的安装步骤详解,包括权限处理和配置选项。特别提醒需注意系统兼容性处理(如创建redhat-release文件)和分卷压缩包的特殊解压方法(cat合并)。整个安装过程涉及大量Linux命令操作,需特

wangjie36的博客 298

c#在一个窗口中打开另一个窗口

c#在一个窗口中打开另一个窗口 2018年06月28日 18:02:53 卢浮宫丶晓 阅读数:4252 1、今天功能需要,打开新的窗口,这里简单记录下 2、实现机制,在主程序打开第一个窗口,在第一个窗口里面写入触发事件,打开另一个窗口,并隐藏当前窗口 3、实现代码段     创建两个窗口 分别为  setParams 和 main     在主程序中默认打开setParams窗口  ...

cxu123321的博客 3487

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

windows应用程序中,一个应用程序窗口中嵌入另一个应用程序的主窗口的机制原理概述

windows应用程序中,一个应用程序窗口中嵌入另一个应用程序的主窗口的机制原理。

lza_csdn2019的博客 708

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

windows应用程序中,一个应用程序窗口中嵌入另一个应用程序的主窗口核心机制简述

windows应用程序中,一个应用程序窗口中嵌入另一个应用程序的主窗口核心机制。

lza_csdn2019的博客 1402

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【wpf,C#】同一个项目的不同窗口切换:一个窗口转到另一个窗口

背景 就像很多app那样,先是登陆界面(窗口),当符合要求后可以转到主界面(窗口),同时登陆界面消失。 就是:窗口A ——> 窗口B,同时窗口A消失 举例及代码说明 注:这里只说怎么转到另一个窗口,不涉及账号密码的验证等更复杂的问题; 说明: 首先一个wpf项目下,有两个窗口, 命名解释如图所示 我的这一个wpf项目名为:LoginWindow; 窗口A的xaml文件名为: Login; 窗口B的xaml文件名为:Window1; 其中窗口A如图所示(简单讲解,所以图很丑,不要介意): 其中窗口B

S数据菜菜的博客 8681

【PyQt】点击一个窗口的按钮来打开另一个窗口

先在qt designer 中设计好两个窗口(main和second)如图 在vscode 中将 相应的ui 文件 编译成python文件 修改 UI_main.py 为main窗口中的按钮添加点击事件 UI_main.py from PyQt5 import QtCore, QtGui, QtWidgets from Ui_second import Ui_Form class Ui_Ma...

知秋的博客 1万+

python 窗体取值_Python:如何从另一个程序窗口获取文本标签?

我想用Python从另一个程序中读取文本标签.我想我必须使用WM_GETTEXT,但我不知道如何在互联网上找不到任何东西.我的程序获取活动窗口,但不读取文本标签.所以我希望有人可以帮助我.编辑:我已添加缓冲区和SendMessage部分.我可以从编辑器中获取文本,但不是从我尝试从中获取文本标签的程序.我有以下代码,我在stackoverflow(Get text from popup window...

weixin_39595430的博客 2061

[PyQt5]点击主窗口弹出另一个窗口

1.先使用Qt designer设计两个窗口,一个是主窗口,一个是子窗口 其中主窗口是新建-Main Window,子窗口是Dialog窗体。 两个窗口不能是同一类型,否则会崩溃。 并保存为EyeTracking_main.ui和EyeTracking_process.ui(因为我在做眼动追踪,因此窗体命名与此相关,后同),使用UIC工具转成.py文件。 2.写一个驱动函数调用...

大盈若冲,其用无穷。 5万+

MFC获得当前窗口,主窗口,应用程序app指针

添加两个按钮 当前窗口的指针就是当前窗口的地址 void CpointdemoDlg::OnBnClickedButton1() { //获取当前窗口的指针, HWND hWnd = GetSafeHwnd(); CWnd* pWnd = CWnd::FromHandle(hWnd); CString s; s.Format(_T("pWnd=0x%X\nthis = 0x%X\n"),pWnd,this); AfxMessageBox(s); } void CpointdemoDl..

这里是菠萝味菠萝啤的博客 1810

C# 从一个窗口传参到另一个窗口

现在有两个窗口fram1和frame2 目标是从fram1传参到fram2   在frame1窗口下写如下代码,目标是确定参数 frame2   f2 = new frame2(string1);//传参数string1,可以传多个参,用逗号隔开                     this.Hide();//frame1窗口消失                     f2.Sh

天马行空 4274

java中监听器的简单介绍。窗口实现一个文本框随另一个文本框输入而实时自动更新。

java实现自动更新实时更新的触发事件。当我们在一个文本区中输入若干个数时,另一个文本区同时对你输入的数进行求和运算并求出平均值,也就是说随着你输入的变化,另一个文本区不断地更新求和及平均值。

m0_55685698的博客 2851

c#在一个窗口调用另一个窗口

在一个窗口中调用另一个窗口或者对话框。 现在有两个窗口: 主窗口Form1,要通过其菜单项或按钮调用另一个窗口/对话框。 对话框Union1,用来进行空间叠加分析的窗口。 目的就是在Form1中的菜单项中调用Union1对话框进行空间叠加分析。 方法: 在Form1中双击对应菜单项(比如说是Union项)弹出代码编辑窗口,在Union项下,输入以下代码: Union

龙在江湖 8295
上一篇: 轻松实现类VC界面
下一篇: VC++中非法探取密码的原理及其防范
ShenRui
博客等级 码龄20年 63粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值