【问题标题】:Using WM_GETTEXT - what to set the Size?使用 WM_GETTEXT - 什么设置大小?
【发布时间】:2011-04-27 18:45:30
【问题描述】:
Var
 PText : array[0..512] of Char;
 Handle, Child : HWND;
begin
 FillChar(PText,512,0);
 Handle := FindWindow('Notepad',nil);
 Child := FindWindowEx(Handle,0,'Edit',nil);

 Caption := IntToStr(Handle)+' - '+IntToStr(Child);

 SendMessage(Child,WM_GETTEXT,512,Integer(@PText[0]));

 ShowMessage(PText);

end;

我只是想知道 - 在使用 WM_GETTEXT 时,我通常应该将大小(当前为 512)设置为什么?我猜它与源代码管理中的文本数量不同?

在处理大量文本时,您建议将其设置为什么?

有没有办法做同样的事情(从句柄获取文本)而不必设置大小等?

【问题讨论】:

    标签: delphi size window-handles arrays


    【解决方案1】:

    您应该使用WM_GETTEXTLENGTH 读取大小并使用缓冲区的值。

    【讨论】:

    • 谢谢!我早该想到的!我应该加1吗?我相信我看到有人这样做
    • WM_GETTEXTLENGTH 的 MSDN 状态:返回值是以字符为单位的文本长度,不包括终止空字符。对于 WM_GETTEXT MSDN 状态:要复制的最大字符数,包括终止空字符。所以是的,你应该加 1。
    • @Jeff:如果这是您的问题的答案,您可以接受答案;-)
    • @Jeff 您通常使用SetLength()SetString() 来执行此操作,而这些例程不需要+1。我会看一下 TWinControl.GetText 并模仿该代码。
    • @Jeff:请试着想想你收到的答案。一个 30 秒的快速测试可以回答您关于加 1 或不加 1 的问题,而且您会比在这里等待答案快得多。
    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多