Win32 GetWindowText()函数获取各种文本示例

2023-05-16

#include <windows.h>
#include "resource.h"
 
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

HINSTANCE hInst;
TCHAR szClassName[] = TEXT("getwintextDemo");

int WINAPI
WinMain (HINSTANCE hThisInstance,
         HINSTANCE hPrevInstance,
         LPSTR lpszArgument,
         int nFunsterStil)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
 
	hInst = hThisInstance;
	
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
 
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = MAKEINTRESOURCE (IDC_GETWINTEXTDEMO);
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
 
    if (!RegisterClassEx (&wincl))
        return 0;
 
    hwnd = CreateWindowEx (
           0,
           szClassName,
           TEXT("getwintextDemo"),
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           550,
           500,
           HWND_DESKTOP,
           NULL,
           hThisInstance,
           NULL
           );
 
    ShowWindow (hwnd, nFunsterStil);
 
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
 
    return messages.wParam;
}
 
LRESULT CALLBACK
WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;
	RECT rt;
	int ret;
	//HWND edit1 = 0, hbtn1=0; 有问题 
	HWND edit1, hbtn1;
	HWND hpad, hcalc;
	char szBuffer[100];
	char getbuf[100];
	int iLength;
				
    switch (message)
    {
			case WM_COMMAND:
    		switch (LOWORD(wParam))
    		{
			case IDM_Gettext:		
				hdc=GetDC(hwnd);		
				iLength=GetWindowTextLength(edit1);
				ret=GetWindowText(edit1,getbuf,iLength+1); //实际获取个数通过ret返回 
				//wsprintf(szBuffer, "%d",ret);
    			//MessageBox(NULL,szBuffer,TEXT("返回个数"),0);
				wsprintf(szBuffer, "文本框1的文本:%s",getbuf);
				TextOut(hdc,250,20,szBuffer,lstrlen(szBuffer));		
				
				iLength=GetWindowTextLength(hbtn1);
				ret=GetWindowText(hbtn1,getbuf,iLength); //实际获取个数通过ret返回
				//wsprintf(szBuffer, "%d",ret);
    			//MessageBox(NULL,szBuffer,TEXT("返回个数"),0);
				wsprintf(szBuffer, "按钮1的文本:%s",getbuf);
				TextOut(hdc,250,50,szBuffer,lstrlen(szBuffer));						
				
				GetWindowText(GetDlgItem(hwnd,8), getbuf, 30);
				wsprintf(szBuffer, "文本框1的文本:%s",getbuf);
				TextOut(hdc,250,80,szBuffer,lstrlen(szBuffer));
				
				GetWindowText(GetDlgItem(hwnd,9), getbuf, 30);
				wsprintf(szBuffer, "按钮1的文本:%s",getbuf);
				TextOut(hdc,250,110,szBuffer,lstrlen(szBuffer));
				
				GetWindowText(hwnd, getbuf, 30);
				wsprintf(szBuffer, "本程序窗口的文本:%s",getbuf);
				TextOut(hdc,250,140,szBuffer,lstrlen(szBuffer));	
				
				hpad=FindWindow("Notepad",NULL);
				//wsprintf(szBuffer, "%x",hpad);
    			//MessageBox(NULL,szBuffer,TEXT("记事本句柄"),0);
    			GetWindowText(hpad, getbuf, 30);
				wsprintf(szBuffer, "记事本窗口的文本:%s",getbuf);
				TextOut(hdc,250,170,szBuffer,lstrlen(szBuffer));
				hcalc=FindWindow(NULL,"计算器");
				//wsprintf(szBuffer, "%x",hcalc);
    			//MessageBox(NULL,szBuffer,TEXT("计算器句柄"),0);
    			GetWindowText(hcalc, getbuf, 30);
				wsprintf(szBuffer, "计算器窗口的文本:%s",getbuf);
				TextOut(hdc,250,200,szBuffer,lstrlen(szBuffer));
				break;
		    case IDM_ABOUT:
				MessageBox (hwnd, TEXT ("getwintextDemo v1.0\nCopyright (C) 2020\n by bo"),
                        TEXT ("getwintextDemo"), MB_OK | MB_ICONINFORMATION);
				break;
			case IDM_EXIT:
				DestroyWindow(hwnd);
				break;
			default:
				return DefWindowProc(hwnd, message, wParam, lParam);	    		
		    }
    		break;
  		case WM_CREATE:
			edit1 = CreateWindow(TEXT("Edit"), TEXT("Edit Control DEMO"), WS_CHILD|WS_VISIBLE|ES_LEFT|WS_BORDER|WS_EX_CLIENTEDGE , 
			20, 20, 130, 20, hwnd, (HMENU)8, hInst, NULL);
			SendMessage(edit1, WM_SETFONT, (WPARAM)GetStockObject(25), 0);
			hbtn1 = CreateWindow("Button", "按钮一 Demo", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,  
    		20, 50, 120, 20, hwnd, (HMENU)9, hwnd, NULL); 

  			break;
    	case WM_PAINT:
			hdc = BeginPaint(hwnd, &ps);					
			GetClientRect(hwnd, &rt);				
			EndPaint(hwnd, &ps);
			break;
        case WM_DESTROY:
            PostQuitMessage (0);
            break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}

 

新建一个窗口工程;首先自己在程序里创建一个文本框和一个按钮;

然后分别获取:文本框1,按钮1,本程序窗口,系统自带记事本窗口,系统自带计算器窗口的文本;

结果如下;

如果这么获取文本框1的文本,并不能获取到;

    GetWindowText(edit1,getbuf,iLength+1);

    按钮类似;输出如第1、2行;

必须要获取到子控件句柄,才能获取到;

    GetWindowText(GetDlgItem(hwnd,8), getbuf, 30);    //hwnd是本程序窗口句柄;

    输出如第3、4行;

然后再获取记事本和计算器的文本(标题);运行程序需要打开一个记事本,一个计算器;

记事本句柄通过窗口类名获取;计算器句柄通过窗口标题获取;

    hpad=FindWindow("Notepad",NULL);

    hcalc=FindWindow(NULL,"计算器");

GetWindowText()函数参数:句柄,返回内容缓冲区,可填入缓冲区的最大个数;实际返回个数通过函数返回值获取;

可以先如此获取一个窗口文本的长度,再加1,用做GetWindowText()第三个参数;

     iLength=GetWindowTextLength(edit1);

注释了的这两句,是用来调试,如果有问题,返回个数为0;字符个数;

    wsprintf(szBuffer, "%d",ret);
    MessageBox(NULL,szBuffer,TEXT("返回个数"),0);

菜单;

工程;

资源和头文件;

#include "resource.h"
#include <windows.h>

/
//
// Menu
//

IDC_GETWINTEXTDEMO MENU 
BEGIN
    POPUP "&File"
    BEGIN
    	MENUITEM "获取窗口文本",            IDM_Gettext
    	MENUITEM "E&xit",                	IDM_EXIT
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&About ...",           	IDM_ABOUT
    END
END
#define 	IDM_EXIT		10001
#define 	IDM_ABOUT		10002

#define 	IDC_GETWINTEXTDEMO		10101
#define 	IDD_ABOUTBOX	10102
#define     IDM_Gettext     40001

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Win32 GetWindowText()函数获取各种文本示例 的相关文章

  • QT表格的实现

    本文章复制于别人的博客 xff0c 是因为我怕原创者把原著删掉 xff0c 所以就复制下来了 xff0c 如有冒犯 xff0c 请多见谅 xff01 一 简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件 xff0c
  • QT 表格

    在公司公示Qt开发一段时间 xff0c 表格用到不少 xff0c 所以 xff0c 今天在这做个总结 xff0c 防止以后忘记 下面为个人模拟Windows资源管理器的一个表单 xff08 写的比較粗糙 xff0c 谅解一下 xff09 一
  • 格力空调红外编码

    格力空调遥控器红外编码透析 xff08 长码 xff09 2016年11月04日 13 13 19 阅读数 xff1a 5516 格力空调遥控器 xff08 YB0F2 xff09 红外码组成如下 xff0c 按解码顺序排列 起始码 xff
  • android相机Camera.Parameters所有的参数值

    最近两天一直在看android相机的参数设置 xff0c Camera Parameters中属性值非常的多 xff0c 我索性就把就调用的flatten 方法 xff0c 将设置的参数值都打印出来了 xff0c 方便以后查看 xff0c
  • 酒店管理项目

    数据库介绍 user表 xff1a 这是一个管理员的表 xff0c 用于存储可对后台进行操作的人员信息表 xff0c 其中重要的字段包括包括主键ID xff0c 与权限等级 xff0c 密码 room表 xff1a 作为存储房间信息的表 x
  • 无人机——电池、电机、螺旋桨搭配

    1 电机 1 xff09 电机KV值 KV值是每1V的电压下电机每分钟空转的转速 例如KV800 在1V的电压下空转转速是800转每分钟 那么10V的电压下是8000转每分钟的空转转速 KV值越小 xff0c 同等电压下转速越低 xff0c
  • 姿态和位置,四旋翼的控制流程

    xfeff xfeff 姿态和位置计算 xff1a EKF 位置控制 xff1a PID 姿态控制 xff1a 姿态环是直接P控制 xff0c 姿态率是PID控制 主要是滤波算法和姿态算法还有PID算法 滤波算法主要是将获取到的陀螺仪和加速
  • Jetson nano 通过 vnc 实现远程桌面控制(已在nano实现)

    目录 一 linux环境 xff1a Ubuntu 18 04 二 nano设置VNC服务 三 设置开机自启动 四 设置静态IP 一 linux环境 xff1a Ubuntu 18 04 jetson nano用的是ubuntu18 04的
  • make px4_sitl_default gazebo出错

    出现错误时候 xff0c 可以在固件文件夹下先更新下 make clean sudo apt get update sudo apt get upgrade 错误1 xff1a 编译make px4 sitl default gazebo
  • PX4 与 MAVROS 实现offboard

    目录 一 虚拟机仿真环境 1 创建工作空间 2 创建ROS节点功能包 3 运行PX4的gazebo仿真 4 启动PX4与Mavros之间的连接 二 真机控制 1 硬件连接 2 软件设置 3 出现问题 Ubuntu xff1a 20 04 x
  • AprilTag_ros的使用

    目录 前言 一 usb摄像头的安装和使用 二 AprilTag ros包的安装 三 单目摄像机的标定 四 AprilTag ros的使用 五 其他 前言 平台 xff1a VM虚拟机 ROS版本 xff1a noetic Ubuntu xf
  • make px4_sitl_default gazebo 建立PX4仿真环境的各种坑

    前言 xff1a 平台 xff1a VM 虚拟机 Ubuntu18 04 gazebo9 一 执行组件更新总是各种中断 git submodule update init recursive 众所周知这是墙墙的故事 xff0c 所以进行了机
  • Jetson nano刷机安装系统

    1 下载系统镜像 可以到官网上下载镜像 xff0c 英伟达官网 在上面选择合适的镜像文件下载 2 格式化内存卡 需要下载格式化tf卡的工具SD Memory Card Formatter xff0c 读者可以也自行下载 格式化时候就像下图
  • 继电器的使用

    继电器使用 继电器基本说明 继电器就相当于一个开关 xff0c 接在任意线上 xff0c 通过控制信号下控制通断 xff1b 一般是断开状态 xff0c 此时线就断开了 xff0c 没导通 xff1b 在控制信号作用下继电器闭合 xff0c
  • 在树莓派上使用火焰,声音,震动,光敏传感器

    作为一个软件工程专业的学生 xff0c 对传感器等硬件的使用一直不太顺手 xff0c 而在树莓派使用Python的RPi GPIO xff0c 进行传感器等硬件的使用却是非常方便 而且使用树莓派这个网络功能强大的控制中心 xff0c 其在物
  • UCOSIII---信号量

    UCOSIII 信号量 概述PV原语函数接口创建信号量等待信号量释放信号量 例程注意 优先级反转概述解决方案注意事项 概述 信号量常用于任务的同步 xff0c 通过该信号 xff0c 就能够控制某个任务的执行 xff0c 这个信号具有计数值
  • 十分钟读懂『卡尔曼滤波算法』

    我是勤劳的搬运工 xff0c 转自 xff1a 1 http blog csdn net karen99 article details 7771743 2 http blog csdn net tudouniurou article de
  • Pixhawk基于Radio地面站发送指令

    xfeff xfeff px4原生固件提供offboard飞行模式 xff0c Offboard模式是使用外部电脑 xff08 软件 xff09 与pixhawk相连 xff0c 并进行控制 在室内室外都可使用该模式 xff0c 标准代码都
  • IDEA中SpringBoot出错问题

    1 新建项目时 xff0c 出现 Error java 无效的标记 parameters 或者 Error java 无效的源发行版 13 等这些问题时 xff0c 需要看下project setting中的各种配置 xff0c 注意以下图
  • 程序 = 数据结构 + 算法

    我们编写程序的目的就是与真实世界交互 xff0c 解决真实世界的问题 xff0c 帮助真实世界提高运行效率与改善运行质量 所以我们就需要对真实世界事物体的重要属性进行提炼 xff0c 并映射到程序世界中 xff0c 这就是所谓的对真实世界的

随机推荐