随笔 - 2146  文章 - 19 评论 - 11846 阅读 - 1267万

Windows API 中的字符串对应这 Delphi 的 PChar(PAnsiChar); 在 API 中使用 Delphi 的字符串还是比较灵活的.

先说赋值:
//赋值方法1: 给直接量
begin
  SetWindowText(Handle, '新标题');
end;

//赋值方法2: 定义它要的类型 var   p: PChar; begin   p := '新标题';   SetWindowText(Handle, p); end;
//赋值方法3: 转换成它要的类型 var   str: string; begin   str := '新标题';   SetWindowText(Handle, PChar(str)); end; //赋值方法4: 用字符数组 var   arr: array[0..255] of Char; begin   arr := '新标题';   SetWindowText(Handle, arr); end;
再说取值:
//取值方法1: 用字符数组(经常被称作"缓冲区")
var
  arr: array[0..254] of Char;
begin
  GetWindowText(Handle, arr, 255);
  ShowMessage(arr); {Form1}
end;

//取值方法2: 使用 GetMem 给 PChar 分配内存 var   p: PChar; begin   GetMem(p, 255); {分配内存}   GetWindowText(Handle, p, 255);   ShowMessage(p); {Form1}   FreeMem(p);    {释放内存} end;
//取值方法3: 用 GlobalAlloc 分配全局内存(比 GetMem 慢) var   p: HGLOBAL; begin   p := GlobalAlloc(0, 255); {参数一给 0 或 GMEM_FIXED 表示分配的是固定内存}   GetWindowText(Handle, PChar(p), 255);   ShowMessage(PChar(p)); {Form1}   GlobalFree(p);        {释放内存} end;
//取值方法4: 直接使用 string; 需要先 SetLength, 然后再去除空白: var   str: string; begin   SetLength(str, 255); {先设定 str 的长度}   GetWindowText(Handle, PChar(str), 255);   {但此时 str 的长度是 255 啊!}   str := PChar(str); {这样可以得到实际长度的字符串}   ShowMessage(str);  {Form1} end;
定长字符串不是 #0 结束的, 和 API 不好兼容, 一般不用于 API 中.

posted on   万一  阅读(8338)  评论(13编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧


点击右上角即可分享
微信分享提示