zoukankan      html  css  js  c++  java
  • Windows获取其他进程中Edit控件的内容

      最近做的MFC项目中,有个获取其他进程中Edit控件内容的需求,本来以为是个很简单的问题,但是来来回回折腾了不少时间,发博记录一下。

      刚开始拿到这个问题,很自然的就想到GetDlgItemText():

    UINT GetDlgItemText(
      HWND hDlg,       // handle to dialog box
      int nIDDlgItem,  // control identifier
      LPTSTR lpString, // pointer to buffer for text
      int nMaxCount    // maximum size of string
    );

    The GetDlgItemText function retrieves the title or text associated with a control in a dialog box. 

      看API的描述和要实现的需求一样,自然就用起来了,可发现不管怎样这个API始终调用失败,获取不到内容。一直以为是代码哪里出问题了,调试好久。后来Google之后在CSDN论坛上找到个老帖,得知这个API只有在Windows 2K之前的系统才能跨进程使用,无奈放弃。

      于是查了下,还有一个GetWindowText()

    int GetWindowText(
      HWND hWnd,        // handle to window or control
      LPTSTR lpString,  // text buffer
      int nMaxCount     // maximum number of characters to copy
    );

    The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application.


      描述里面很清楚写着不能对其他程序使用,又一次失败。

      PS:吐槽一下,为什么GetDlgItemText()里面不写这句话,浪费俺的时间。╮(╯▽╰)╭

     

    解决方法:使用SendMessage()向进程发WM_GETTEXT消息获取。

      SendMessage(handle,message,Wparam,lparam);

        Handle为窗口句柄,

        message为消息类型,

        wparam和lparam为消息参数;

      WM_GETTEXT
        An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller.

    其实使用这个消息等于用GetwindowText()。。。。

  • 相关阅读:
    C++ 把输出结果写入文件/从文件中读取数据
    转载:C++之高精度算法
    借助bool判断使冒泡排序效率提高
    启程
    2017总结,2018的路
    mysql 分组排序
    2021年VS2019最新有效的调试ASP.NET Core源码
    神级Java程序员 开车教你基础开发,最简单 微型Java Web框架
    手把手教你 基础 整合最优雅SSM框架:SpringMVC + Spring
    学习Java绝对要懂的,Java编程中最常用的几种排序算法!
  • 原文地址:https://www.cnblogs.com/MuyouSome/p/3333390.html
Copyright © 2011-2022 走看看