Delphi 的字符及字符串[5] - 字符串与 Windows API

本文介绍了如何在Delphi中使用Windows API进行字符串操作,包括赋值和取值的方法,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 中.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值