常用 win32函數 GetWindowText&HWMD GetDlgItem

来源:互联网 发布:数据挖掘聚类常用方法 编辑:程序博客网 时间:2024/06/05 15:24

一,GetWindowText函數


功能 

该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控件,则拷贝控件的文本。但是,GetWindowText不能接收其他应用程序中控件的文本。
函数原型:Int GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount);

 參數

hWnd带文本的窗口或控件的句柄。
IpString指向接收文本的缓冲区的指针。
nMaxCount指定要保存在缓冲区内的字符的最大个数,其中包含NULL字符。如果文本超过界限,它就被截断。

getwindowtext的DELPHI例子:
var
p:pchar;
begin
getmem(p,255);
getwindowtext(application.Handle,p,255);
showmessage(strpas(p));
freemem(p);
end;

返回值
如果函数成功,返回值是拷贝的字符串的字符个数,不包括中断的空字符;
如果窗口无标题栏或文本,或标题栏为空,或窗口或控制的句柄无效,则返回值为零。
若想获得更多错误信息,请调用GetLastError函數。
函数不能返回在其他应用程序中的编辑控件的文本。

GetLastError函數:http://baike.baidu.com/link?url=UHZzaKOr0J-f_FBS-zW6OMGQonyEuYlHOqiJ66ml9_eLE27pgseFc1jvdKZ4wnAZHEGqHJUV7tqXuQEleMHfUa




PS:
函数定义
如果目标窗口属于当前进程,GetWindowText函数给指定的窗口或控件发送WM_GETTEXT消息。如果目标窗口属于其他进程,并且有一个窗口标题,则GetWindowTeXt返回窗口的标题文本,如果窗口无标题,则函数返回空字符串。
速查
Windows NT:3.1以上版本;Windows:95以上版本:Windows CE:1.0以上版本;头文件:Winuser.h;库文件:user32.lib:Unicode:在Windows NT上实现为Unicode和ANSI两种版本。
int GetWindowText(
LPTSTR lpszStringBuf,
int nMaxCount
) const;
void GetWindowText(
CString& rString
) const;

Parameters参数
lpszStringBuf
[out] Pointer to the buffer that will receive the text. If the string is as long or longer than the buffer, the string is truncated and terminated with a NULL character.
nMaxCount
[in] Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated.
rString
A CString object that is to receive the copied string of the window's title.  

Return Value返回值

Specifies the length, in characters, of the copied string, not including the terminating null character. It is 0 if CWnd has no caption or if the caption is empty
 
Remarks
If the CWnd object is a control, the GetWindowText member function copies the text within the control instead of copying the caption.
This member function causes the WM_GETTEXT message to be sent to the CWnd object.
简单使用:
定义CString str ;
GetDlgItem(控件ID)->GetWindowText(str);
这样str中就保存了 获取到的字符


深入函數

在GetWindowText函数中有一个要求函数需要迅速地得到窗口文本并且不会被挂起

FindWindow函数需要通过窗口文本来查找窗口。

而任务切换(Taskswitching)程序也需要获得窗口文本,以便在切换器(switcher)窗口中显示窗口的标题。

某个挂起的程序阻塞其他应用程序的情况是不应该发生的。这就是任务切换程序所要面对的实际情况。
这就要求不应该发送WM_GETTEXT消息,因为WM_GETTEXT的目标窗口可能被挂起。

此时,GetWindowText应该从“特殊的位置”上获取文本,因为这种做法不会受到挂起程序的影响。
而另一方面,GetWindowText也用于从对话框的控件中提取文本,而这些控件通常使用的是自定义的文本管理机制。

因此,这又要求应该发送WM_GETTEXT消息,因为这是获得自定义管理文本的唯一方法
于是,在GetWindowText函数中采取了一种折中的方法:
如果是从另外一个进程的窗口中得到窗口文本,那么GetWindowText将会在“特殊的位置”上获取字符串,而不是发送消息。
根据第一条原则,如果你想要获得自己进程中的窗口文本,而这个窗口被挂起了,那么GetWindowText函数也会被挂起。

不过,因为这个窗口是属于你自己的进程,所以函数被挂起是你自己犯的错误,并且你应该为此负责。

发送WM_GETTEXT消息将确保我们能够正确地得到那些使用自定义文本管理方式的窗口(通常是自定义控件)中的文本。
根据第二条规则,如果想要获得另一个进程中的窗口文本,那么GetWindowText将不会发送消息,而只是在“特殊的位置”上获取字符串。

通常,使用最多的方式是获取另一个进程中的框架窗口文本,而在框架窗口中一般不会使用自定义的窗口文本管理方式。

因此往往能够获得正确的字符串。
而在GetWindowText的帮助文档中将上述讨论内容简化为“GetWindowText无法从另一个应用程序的窗口中得到文本”。


二,HWMD GetDlgItem函數


返回窗口中指定参数ID的子元素的句柄,可以通过返回的句柄对窗口内的子元素进行操作。

hwnd:包含该窗口标志位的对话框的句柄

 GetWindowLong (hwnd, GWL_ID)函数返回的是一个所需要的32位控件标识符。


http://baike.baidu.com/link?url=JUFOH6WBMUrjBNfdRxluFaS7bXIQkS1fDDG_xP_eHcVKDFP68I9wMa5qrPsPp-PO6GeApMrq96FJu11_auiaUq

0 0
原创粉丝点击