SendKeys

Visual Basic 中的一個編程語句,它可將將一個或多個按鍵訊息傳送到活動視窗,就如同用鍵盤進行輸入一樣。

Delphi中的SendKeys函式

用過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也不會在安裝盤中提供這個檔案。更好的利
SendKeys的構想,就要看各位朋友的了!

相關詞條

相關搜尋

熱門詞條

聯絡我們