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

SendTextMessage如何打开记事本并显示指定内容的更多相关文章

  1. gridView RowDataBound事件 鼠标经过行颜色变化及根据字段值显示指定内容

    protected void gvBarInfo_RowDataBound(object sender, GridViewRowEventArgs e)        {            if ...

  2. winform里面网页显示指定内容

    今天有个同事问了一下我,怎么在winform里面打开网页啊?我们都是基于C/S的开发,很少接触winform,所以我当时就懵了,实在不知道怎么回答,所以索性说不知道.但是我又想了想,这个应该是个很简单 ...

  3. javascript 随机显示指定内容

    今天碰到一个需求,一个页面显示赞助厂商的信息,但是厂商要求排序要随机排,因为是个静态页面不是读取数据库的,所以打算用js来控制 var arr = new Array('张三', '李四', '王五' ...

  4. SnagIt截图后无法在编辑器打开,不显示截图内容的解决办法(转)

    方法1: 用SnagIt截图后,弹出的编辑器里不显示刚才截图的内容,解决办法如下: 完全退出Snagit和编辑器,删除以下文件夹: Win7用户 C:\Users\Administrator\AppD ...

  5. 只访问tomcat,不访问项目时,显示指定内容。

      1.情景展示 我们知道,将javaWeb项目部署到tomcat后,访问该项目的url路径构成是: 网路协议+"://"+ip地址+":"+tomcat设定的 ...

  6. error_page 改变状态码为新的状态码,并显示指定内容

    server { listen 80; server_name www.espressos.com; location / { root /data0/www/bbs; index index.htm ...

  7. JAVA中让Swagger产出更加符合我们诉求的描述文档,按需决定显示或者隐藏指定内容

    大家好,又见面啦. 在前一篇文档<JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率>中,我们探讨了如何通过自定义注解的方式扩展swagger的能力让Swag ...

  8. 以流方式读写文件:文件菜单打开一个文件,文件内容显示在RichTexBox中,执行复制、剪切、粘贴后,通过文件菜单可以保存修改后的文件。

    MainWindow.xaml文件 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&q ...

  9. C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容

    内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用 ...

随机推荐

  1. 在package.json中配置Script执行npm run tslint报错问题

    今天在学习tslint的时候,按照git clone下angular2-webpack-starter的代码执行npm run lint时,虽然代码进行了检测,但检测完成后npm始终报错, //pac ...

  2. ABAP文本编辑框操作

    * 1.创建文本框 DATA: g_container TYPE REF TO cl_gui_custom_container, g_editor TYPE REF TO cl_gui_textedi ...

  3. comparing-html5-mobile-ui-frameworks

    http://html5hub.com/comparing-html5-mobile-ui-frameworks/

  4. asp.net 间传值的方法

    1.页面间使用post请求时,可以使用Request.Form["xxx"] 2.QueryString 3.Context上下文传值,使用在Server.Transfer中,这个 ...

  5. .net 常用正则表达式

    Net中正则表达式的简单使用方法及常见验证判断 判断字符串是只是数字我们可以这样写:return new System.Text.RegularExpressions.Regex(@"^([ ...

  6. OS X 使用技巧——访问所有的键盘功能

    苹果笔记本电脑和苹果的无线键盘只有一个Delete键,可以删除光标前面的字. 按住Fn键再按Delete键就能删除光标后面的字符. 按住Fn键会把上下方向键的效果变成Page Up / Page Do ...

  7. 关于django批量上传图片

    本来想一张一张上传的,但是明显会对客户造成不必要的麻烦,所以如果前台一次性上传五张十张的话,那就简单的多. 但是后台我数据库对于图片存储的字段只有一个,不可能有多少张照片就要多少个字段来存储.也就是说 ...

  8. IDA*

    模拟退火 基本思路(Main Thoughts): IDA*是一种优秀的搜索法,在一般的实际问题中,它比普通的搜索更快. 通过迭代加深和估价函数剪枝来搜索. 通常处理没有层数上界或上界很多大的搜索. ...

  9. lle算法

    http://www.pami.sjtu.edu.cn/people/xzj/introducelle.htm

  10. Brush Mode --- Nyoj 236 分类: Brush Mode 2014-04-02 06:56 116人阅读 评论(0) 收藏

    心急的C小加 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间 ...