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

http://www.wesoho.com/soft/down/sndkey32.rar

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值