SendTextMessage如何打开记事本并显示指定内容
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如何打开记事本并显示指定内容的更多相关文章
- gridView RowDataBound事件 鼠标经过行颜色变化及根据字段值显示指定内容
protected void gvBarInfo_RowDataBound(object sender, GridViewRowEventArgs e) { if ...
- winform里面网页显示指定内容
今天有个同事问了一下我,怎么在winform里面打开网页啊?我们都是基于C/S的开发,很少接触winform,所以我当时就懵了,实在不知道怎么回答,所以索性说不知道.但是我又想了想,这个应该是个很简单 ...
- javascript 随机显示指定内容
今天碰到一个需求,一个页面显示赞助厂商的信息,但是厂商要求排序要随机排,因为是个静态页面不是读取数据库的,所以打算用js来控制 var arr = new Array('张三', '李四', '王五' ...
- SnagIt截图后无法在编辑器打开,不显示截图内容的解决办法(转)
方法1: 用SnagIt截图后,弹出的编辑器里不显示刚才截图的内容,解决办法如下: 完全退出Snagit和编辑器,删除以下文件夹: Win7用户 C:\Users\Administrator\AppD ...
- 只访问tomcat,不访问项目时,显示指定内容。
1.情景展示 我们知道,将javaWeb项目部署到tomcat后,访问该项目的url路径构成是: 网路协议+"://"+ip地址+":"+tomcat设定的 ...
- error_page 改变状态码为新的状态码,并显示指定内容
server { listen 80; server_name www.espressos.com; location / { root /data0/www/bbs; index index.htm ...
- JAVA中让Swagger产出更加符合我们诉求的描述文档,按需决定显示或者隐藏指定内容
大家好,又见面啦. 在前一篇文档<JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率>中,我们探讨了如何通过自定义注解的方式扩展swagger的能力让Swag ...
- 以流方式读写文件:文件菜单打开一个文件,文件内容显示在RichTexBox中,执行复制、剪切、粘贴后,通过文件菜单可以保存修改后的文件。
MainWindow.xaml文件 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&q ...
- C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容
内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用 ...
随机推荐
- PB打开ole控件IE浏览器版本问题_指定Webbrowser控件所用IE内核版本(转)
如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容.解决方法是在注册表中为你的进程指定引用IE的版本号. 比如我的程序叫做a.exe 对于32位 ...
- linux - 自动删除n天前日志
1.删除文件命令: find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 实例命令: find /opt/soft/log/ -m ...
- 团队开发NABC特点
一.软件特点 我们所设计的躲避小球游戏,能够防止用户沉迷,且不会使用户有挫败感,失去玩游戏的兴趣. 二.进行NABC分析 N:我们适应于用户对娱乐.打发时间需求 A:我们用图形界面实现 B:此游戏适用 ...
- text-overflow 与 word-wrap:设置使用一个省略标记...标示对象内文本的溢出。
text-overflow 与 word-wrap text-overflow用来设置是否使用一个省略标记(...)标示对象内文本的溢出. 语法: 但是text-overflow只是用来说明文字溢出时 ...
- pxe+preseed安装配置
Ubuntu Server 部署手册 pxe+tftp+vsftp+apache2 ========================================================== ...
- Linux嵌入式系统与硬件平台的关系
一. Linux嵌入式系统 操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口.它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合 ...
- Sencha Touch2 时间轴ListPanel
直接贴代码 timeline.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...
- ASP.NET为图片加上水印
为我们发布的图片加上一个水印,也是我们经常要做的事情,那怎么样来做呢,下面就一步步开始吧 首先是一个制作水印的类:ImageHandler,代码如下: using System; using Syst ...
- xxx.properties获取方法
1.手动获取加载 Locale locale = Locale.getDefault(); ResourceBundle localResource = ResourceBundle.getBundl ...
- java输出流实现文件下载
//导出Excel try { HSSFWorkbook wb = carService.export(list); //调用service方法~! response.setContentType(& ...