#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(使用前将#替换为@)