mbshareat
پنج شنبه 02 شهریور 1391, 13:41 عصر
من یه برنامه دیکشنری اختصاصی خودم رو دارم که میخوام تنها واژه هایی که به دردم میخوره با معنای مختصر و گزینش شده توش داشته باشم.
یه برنامه دیکشنری هست به نام Z Dictionary که می خوام کلمه و قسمت انتخاب شده از معناش رو از توی اون به برنامم بیارم.
در گرفتن خود کلمه انگلیسی مشکلی ندارم اما برای بدست اوردن قسمت Select شده از معنا مشکل دارم.
من یه Hot Key تعریف کردم که با فشار مثلا Ctrl+Q فشار Ctrl+C رو که برای کپی به کار میره شبیه سازی کنم اما چیزی به کلیپ برد فرستاده نمیشه که من بتونم از کلیپ برد بردارم.
این هم کدی که نوشتم.
اگه راه سر راست تر از شبیه سازی فشار Ctrl+C هم هست لطفا بفرمایید.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ClipBrd;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
Procedure WMHotkey( Var msg: TWMHotkey ) ;message WM_HOTKEY;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotkey
(Handle, 1, MOD_Control , Ord('Q'));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotkey( Handle, 1 ) ;
end;
Procedure TForm1.WMHotkey( Var msg: TWMHotkey ) ;
Var
FormHand,WordEditHand,TranslateEditHand:THandle;
Txt: array[0..255] of char;
begin
FormHand:= FindWindow(nil, 'ZDic ÝÑåä áÛÊ ÇäáíÓì');
If FormHand=0 Then
Exit;
WordEditHand := FindWindowEx(FormHand, 0, 'Edit', nil);
TranslateEditHand := FindWindowEx(FormHand, WordEditHand, 'Edit', nil);
SendMessage(WordEditHand,WM_GETTEXT,256,Integer(@T xt));
Edit1.Text:=Txt;
SetActiveWindow(TranslateEditHand);
keybd_event(VK_Control, 0, 0, 0);
Application.ProcessMessages;
PostMessage(FormHand,WM_KeyDown,Ord('C'),0);
Application.ProcessMessages;
PostMessage(FormHand,WM_KeyUp,Ord('C'),0);
Application.ProcessMessages;
keybd_event(VK_Control, 0,KEYEVENTF_KEYUP, 0);
Application.ProcessMessages;
Edit2.Text:=ClipBoard.AsText;
end;
end.
یه برنامه دیکشنری هست به نام Z Dictionary که می خوام کلمه و قسمت انتخاب شده از معناش رو از توی اون به برنامم بیارم.
در گرفتن خود کلمه انگلیسی مشکلی ندارم اما برای بدست اوردن قسمت Select شده از معنا مشکل دارم.
من یه Hot Key تعریف کردم که با فشار مثلا Ctrl+Q فشار Ctrl+C رو که برای کپی به کار میره شبیه سازی کنم اما چیزی به کلیپ برد فرستاده نمیشه که من بتونم از کلیپ برد بردارم.
این هم کدی که نوشتم.
اگه راه سر راست تر از شبیه سازی فشار Ctrl+C هم هست لطفا بفرمایید.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ClipBrd;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
Procedure WMHotkey( Var msg: TWMHotkey ) ;message WM_HOTKEY;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotkey
(Handle, 1, MOD_Control , Ord('Q'));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotkey( Handle, 1 ) ;
end;
Procedure TForm1.WMHotkey( Var msg: TWMHotkey ) ;
Var
FormHand,WordEditHand,TranslateEditHand:THandle;
Txt: array[0..255] of char;
begin
FormHand:= FindWindow(nil, 'ZDic ÝÑåä áÛÊ ÇäáíÓì');
If FormHand=0 Then
Exit;
WordEditHand := FindWindowEx(FormHand, 0, 'Edit', nil);
TranslateEditHand := FindWindowEx(FormHand, WordEditHand, 'Edit', nil);
SendMessage(WordEditHand,WM_GETTEXT,256,Integer(@T xt));
Edit1.Text:=Txt;
SetActiveWindow(TranslateEditHand);
keybd_event(VK_Control, 0, 0, 0);
Application.ProcessMessages;
PostMessage(FormHand,WM_KeyDown,Ord('C'),0);
Application.ProcessMessages;
PostMessage(FormHand,WM_KeyUp,Ord('C'),0);
Application.ProcessMessages;
keybd_event(VK_Control, 0,KEYEVENTF_KEYUP, 0);
Application.ProcessMessages;
Edit2.Text:=ClipBoard.AsText;
end;
end.