(让我先说使用剪贴板进行进程间通信是一个坏主意。剪贴板属于用户,您的应用程序只能在用户选择这样做的情况下使用它。)
如果您在记事本中选择了文本,这会将内容放入 Delphi 表单上的 TMemo(仅使用 TMemo 和 TButton;将 ClipBrd 添加到您的使用子句中):
procedure TForm1.Button1Click(Sender: TObject);
var
NpWnd, NpEdit: HWnd;
begin
Memo1.Clear;
NpWnd := FindWindow('Notepad', nil);
if NpWnd <> 0 then
begin
NpEdit := FindWindowEx(NpWnd, 0, 'Edit', nil);
if NpEdit <> 0 then
begin
SendMessage(NpEdit, WM_COPY, 0, 0);
Memo1.Lines.Text := Clipboard.AsText;
end;
end;
end;
结果示例:
如果没有先选择文本,请先发送WM_SETSEL 消息。传递 0 和 '-1' 的值会选择所有文本。
procedure TForm1.Button1Click(Sender: TObject);
var
NpWnd, NpEdit: HWnd;
begin
Memo1.Clear;
NpWnd := FindWindow('Notepad', nil);
if NpWnd <> 0 then
begin
NpEdit := FindWindowEx(NpWnd, 0, 'Edit', nil);
if NpEdit <> 0 then
begin
SendMessage(NpEdit, EM_SETSEL, 0, -1);
SendMessage(NpEdit, WM_COPY, 0, 0);
Memo1.Lines.Text := Clipboard.AsText;
end;
end;
end;