Delphi中的SendKeys函数

sndKey32.pas sndKey32.pas 回车键 Delphi中的SendKeys函数 - sndKey32.Pas 下载 立即下载

用过Visual Basic等编程语言的朋友们一定对其SendKeys函数非常熟悉。利用该函数可以把一个字符串发送到目标窗口(比如记事本)或控件(比如一个Edit控件)中,就好像是在目标窗口或控件中输入这个字符串一样。但是,在Delphi中却没有为我们提供这样的函数。其实,Borland的工程师们早就提供了一个方便的方法:在Delphi5.0企业版的安装盘的infoExtrasSendKeys文件夹中,有一个sndKey32.Pas文件,
只需把该文件复制到Delphi的安装目录下Lib文件夹中,在工程中引用该文件后即可使用SendKeys函数.
其中两个主要的函数为:
SendKeys(KeyString:Pchar;Wait:Boolean):Boolean;
AppActivate(WindowName:Pchar):Boolean;
用法为:
SendKeys函数向当前拥有焦点的窗口或控件发送字符串,KeySering为字符串的内容。
Wait指示是否等待接收字符串的窗口或控件处理完毕后返回。一般设为False即可。
例如:SendKeys('abcdefg',false);
值得一提的是,SendKeys函数支持发送特殊字符和组合字符,例如方向键、Alt、Ctrl组合键。
使用时,只需用规定的前缀指明即可。+为Shift,^为Ctrl,%为Alt。
例如:
'+monday ' 意为发送Shift+m和onday
'+(monday)'意为发送Shift+monday
对于不可见字符(比如方向键、F1~F11、回车等),可用{}将其括起来。
例如:
'%{F4}'即发送Alt+F4的组合送给应用程序。
更详尽的说明请参照SndKey32.pas文件中的注释。
AppActivate函数的作用是将某个窗口设置为当前窗口。只需将该窗口的标题传过去即可。
若成功将某个窗口激活,则返回值为True.

例子:点击发送后,上面的Edit控件的内容会被发送到下面的Edit控件里面去。
程序很简单,只要两个Edit控件和一个Button控件。
源程序如下:
unit sendkey1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,sndkey32, StdCtrls; //注意该行要添加sndker32!!
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;

implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.SetFocus; //将焦点置于Edit2
SendKeys(Pchar(Edit1.Text),False); //将Edit1中的字符串发送给Edit2
//事先需进行转换
end;

end.

很简单,是不是?其实不仅Edit控件,像Memo、RichEdit等空件均可接收发送的字符。


上面的例子只是在本应用程序内传递字符串,
下面的例子是将字符串发送给Microsoft Word。其所用控件与上例相差不大。
源程序为:
unit unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs
,sndkey32, StdCtrls; //不要忘了sndKey32!
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation

{$R *.DFM}
{ 该函数将焦点置于Word,若失败,返回False}
function SetFocusToWord:boolean;
var
f:boolean;
begin
f:=true;
if not AppActivate('文档 1 - Microsoft Word') then
{
字符串内容为:文档空格1空格-空格Microsoft空格Word
}
begin
f:=False;
MessageDlg('没找到Word!',mtError,[mbOk],0); //显示错误
exit;
end;
result:=f;
end;
procedure SetFormActive; //该子程序将焦点置回
begin
Appactivate('SendToWord');
form1.SetFocus;
form1.Edit1.SetFocus;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not SetFocusToWord then exit; //没找到Word,退出
sendkeys(Pchar(form1.edit1.text),false); //找到了,发送字符串
SetFormActive;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if not SetFocusToWord then exit; //没找到Word,退出
sendkeys('%{F4}',false); //发送Alt+F4,关闭Word
SetFormActive;
end;
end.
该例子只是简单演示一下,实际上大家可以改动激活word的部分(本文查找'文档 1 - Microsoft Word'来实现,显得有些太简单了。)
Delphi本身也带有与Office协作的一系列控件,但只进行简单的协作,这样不是更简单么?SendKeys函数的功能很强大,不然Borland也不会在安装盘中提供这个文件。更好的利用SendKeys的设想,就要看各位朋友的了!

delphi模拟键盘输入操作的单元类(sndkey32.pas),使用起来比 keybd-event 简单,效果好 419行做了简单调整,适配delphi10.4,低版本去掉 WideChar强制类型转换即可。 立即下载

相关推荐

delphi控件集合(sndkey32,videocap,canonocx)

delphi 常用控件集合 键盘控制:sndkey32 摄像头控制:videocap 佳能控件:canonocx

Delphi SendKeys.Pas

unit sndkey32;interfaceUses SysUtils, Windows, Messages;Function SendKeys(SendKeysString : PChar; Wait : Boolean) : Boolean;function AppActivate(WindowName : PChar) : boolean;{Bu

随矜而去 BLOG 3203

WtsApi32.pas

Windows Terminal Server SDK APIs

Delphi中的SendKeys函数 - sndKey32.Pas 下载

<br />http://www.wesoho.com/soft/down/sndkey32.rar<br />用过Visual Basic等编程语言的朋友们一定对其SendKeys函数非常熟悉。利用该函数可以把一个字符串发送到目标窗口(比如记事本)或控件(比如一个Edit控件)中,就好像是在目标窗口或控件中输入这个字符串一样。但是,在Delphi中却没有为我们提供这样的函数。其实,Borland的工程师们早就提供了一个方便的方法:在Delphi5.0企业版的安装盘的/info/Extras/SendKey

期待下集是个可爱梦儿 1473

SendKeys函数 设置焦点是关键

procedureTForm1.ButtonClick(Sender:TObject);varH:HWND;i:Integer;beginH:=FindWindowEx(WebBrowser.Handle,0,'ShellDocObjectView',nil);H:=FindWindowEx(H,0,'InternetExplorer_Server',nil);IHTMLWindow2(IHTMLDocument2(WebBrowser.Document).ParentWindow).focus;//Web

期待下集是个可爱梦儿 1517

Sendkey.pas

unit sndkey32; interface uses SysUtils, Windows, Messages; function SendKeys(SendKeysString: PChar; Wait: Boolean): Boolean; function AppActivate(WindowName: PChar): boolean; {Buffer for working w

easyboot的专栏 1169

SendKeys模拟键盘输入实例源代码

SendKeys模拟键盘输入实例源代码

Delphi发送中文字符给激活窗口文本框

Delphi发送中文字符给激活窗口文本框

向指定HWND发送字符串

procedureSendKeys(focushld:hwnd;sSend:string); var i:integer; ch:byte; begin iffocushld=0thenExit; i:=1; whilei<=Length(sSend)do begin ch:...

a572893208的博客 146

delphi WebBrowser1 delphi 开发浏览器

delphi WebBrowser1 delphi 开发浏览器字号:T|T Delphi3开始有了TWebBrowser构件,不过那时是以ActiveX控件的形式出现twebbrows activex delphi的,而且需要自己引入,在其后的4.0和5.0中,它就在需要引入自己封装好shdocvw.dll之后作为Internet构件组之一出现在构件面板上了。internet shdocvw 之一常常听到有人骂Delphi的帮助做得极差,这次的TWebBrowser又是Microsoft的东tweb

yahoha1的专栏 3963

向指定窗口发送键击消息Delphi

unit SendKeys; interface uses     Windows, SysUtils; const     SK_BKSP = #8;     SK_TAB = #9;     SK_ENTER = #13;     SK_ESC = #27;     SK_ADD = #107;     SK_SUB = #109;     SK_F1 = #

u011354184的专栏 3074

Delphi TWebBrowser编程简述(转帖)

Delphi 3开始有了TWebBrowser构件,不过那时是以ActiveX控件的形式出现的,而且需要自己引入,在其后的4.0和5.0中,它就在封装好shdocvw.dll之后作为Internet构件组之一出现在构件面板上了。常常听到有人骂Delphi的帮助做得极差,这次的TWebBrowser又是Microsoft的东东,自然  这里有平时我自己用TWebBrowser做程序的一些心得和上网收...

weixin_30858241的博客 92

传递焦点的五种方法

传递焦点的五种方法 --------------------------------------------------------------------------------   在编程过程当中,有时我们需要人为地传递焦点到下一个Control,目的方便我们或者是用户更好的使用 ,在大量的数据单元输入或有大量的使用TEDIT(TDBEDIT)控件时更是如此。笔者就日常使用的一些...

weixin_30411239的博客 213

c语言按钮控件保存文件,通过c#按下Internet Explorer的“文件下载对话框”的保存按钮...

我正在研究Internet Explorer自动化,其中一部分涉及从asp 2.0上托管的站点下载文件并使用基于表单的身份验证,因此为了创建端到端自动化,我使用了浏览器自动化.我能够到达我可以点击一个带有浏览器“文件下载”对话框的URL的步骤,然后我试图利用SendKeys点击保存按钮,但无济于事不工作这是我使用FindWindow方法获取文件下载对话框的hWnd指针的代码,然后使用setActi...

weixin_35952534的博客 418
上一篇: java的常见题目
下一篇: MD5算法研究
mlm588
博客等级 码龄23年 0粉丝 8原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值