procedure TForm1.Button1Click(Sender: TObject);
var
hEdit: HWND;
str: string;
begin
str := '准备要添加到记事本的字符串';
WinExec('Notepad.exe', SW_SHOWNORMAL);
hEdit := GetWindow(GetForegroundWindow, GW_CHILD);
SendTextMessage(hEdit, WM_SETTEXT, 0, str);
end;

其中,SendTextMessage是Delphi 2009开始才有的函数,简单好用,说白了就是把消息的LPARAM参数当作字符串指针,传递到另一处,使用起来比较方便,其原型如下:

{$IFNDEF UNICODE}
function SendTextMessage(Handle: HWND; Msg: UINT; WParam: WPARAM; LParam: AnsiString): LRESULT;
begin
Result := SendMessage(Handle, Msg, WParam, Windows.LPARAM(PAnsiChar(LParam)));
end;
{$ENDIF} function SendTextMessage(Handle: HWND; Msg: UINT; WParam: WPARAM; LParam: UnicodeString): LRESULT;
begin
Result := SendMessage(Handle, Msg, WParam, Windows.LPARAM(PWideChar(LParam)));
end; function SendStructMessage(Handle: HWND; Msg: UINT; WParam: WPARAM; const LParam): LRESULT;
begin
Result := SendMessage(Handle, Msg, WParam, Windows.LPARAM(@LParam));
end; function SendGetStructMessage(Handle: HWND; Msg: UINT; WParam: WPARAM;
var LParam; Unused: Boolean = False): LRESULT;
begin
Result := SendMessage(Handle, Msg, WParam, Windows.LPARAM(@LParam));
end; function SendGetIntMessage(Handle: HWND; Msg: UINT; var WParam: Integer;
var LParam: Integer): LRESULT;
begin
Result := SendMessage(Handle, Msg, Windows.WPARAM(@WParam), Windows.LPARAM(@LParam));
end;

需要注意的是,这种用法不仅仅是指发送WM_SETTEXT消息,而是可以是任何消息。一般由程序员手动写代码发送,而不是由Windows产生的消息,因为这里LPARAM的含义已经提前被占用了。

参考:http://www.cnblogs.com/del/archive/2009/11/12/1601703.html

-----------------------------------------------------------------------------------

{用 API 实现的获取文本容器中选择的文本的函数}
function GetEditSeleteText(h: HWND): string;
var
len,sx,ex: Integer; {文本总长度, 选择的开始位置, 选择的结束位置}
buf: PChar; {所有文本}
begin
{获取文本总长度}
len := SendMessage(h, WM_GETTEXTLENGTH, 0, 0) + 1;
{为接受所有文本的缓冲区分配内存}
buf := GlobalAllocPtr(0, len); {这里没有使用 GetMem, 因为需要全局的, 不然无法面对其他程序}
{获取所有文本}
SendMessage(h, WM_GETTEXT, len, Longint(buf));
{获取选择的开始位置和结束位置}
SendMessage(h, EM_GETSEL, Longint(@sx), Longint(@ex));
{截取选择的文本}
Result := Copy(buf, sx+1, ex-sx);
{释放内存}
GlobalFreePtr(buf);
end; {测试 TEdit, 同时与 VCL 的获取方法对比}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetEditSeleteText(Edit1.Handle) + ' - ' + Edit1.SelText);
end; {测试 TMemo, 同时与 VCL 的获取方法对比}
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(GetEditSeleteText(Memo1.Handle) + ' - ' + Memo1.SelText);
end; {测试 TRichEdit, 同时与 VCL 的获取方法对比}
procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage(GetEditSeleteText(RichEdit1.Handle) + ' - ' + RichEdit1.SelText);
end;

参考:http://www.cnblogs.com/del/archive/2008/06/19/1225080.html

最新文章

  1. 当web.config文件放置在共享目录下(UNC),启动IIS会提示有错误信息500.19,伴随有错误代码0x80070003和错误代码0x80070005的解决办法
  2. 【干货分享】流程DEMO-出差申请单
  3. scp 从远程服务器上一下载文件
  4. 遇到IIS7配置PHP出现403和404错误的解决办法
  5. window7安装git详解
  6. POJ3635 Full Tank?(DP + Dijkstra)
  7. Android UI 绘制过程浅析(一)LayoutInflater简介
  8. cmd.ExecuteReader(CommandBehavior.CloseConnection)
  9. Android -- 桌面悬浮,仿360
  10. Linux 面试题总结
  11. 网络编程之ping
  12. WinForm TreeView 三种状态
  13. 对于Maven管理的项目制定虚拟目录
  14. 小记,取GB2312汉字的首字母【转】
  15. linux free命令解读
  16. asp.net core 五 SignalR 负载均衡
  17. 什么是web框架
  18. _future_用法总结
  19. if语句的嵌套以及条件运算符和条件表达式(初学者)
  20. mysql笔记--group by,limit用法

热门文章

  1. 给Eclipse提速的7个技巧(转)
  2. Net Core 的公共组件之 Http 请求客户端
  3. FushionCharts Free 的运用[2D/3D图表处理]
  4. 【Largest Rectangle in Histogram】cpp
  5. Restful API 最佳实践 (理论篇)
  6. 03.Hibernate一对多关联
  7. 01.Hibernate入门
  8. UIFontFamily
  9. Python3中的新特性(3)——代码迁移与2to3
  10. [HTML/CSS]display:none和visibility:hidden的区别