如何將字串傳入到Windows目前作用視窗Cursor所在位置 |
尚未結案
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Memo1: TMemo;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
private
procedure ON_WM_HOTKEY(var m:TMessage);message WM_HOTKEY;
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ON_WM_HOTKEY(var m: TMessage);
begin if(m.WParam=123)then //如果id是123
if ActiveControl is Tedit then
(ActiveControl as tedit).SelText:=','; end; procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle,123,MOD_CONTROL,integer('A'));
//123是自己定义的id ,热键是 ctrl+A
end; end. 这样就可以了!
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
真的非常感謝 sos_admin 的解答. 但我最不會的是如何取得 Window 目前 Cursor 所在的作用視窗, 該作用視窗可能是 NotePad, Word, ... 只要能輸入字元的視窗皆是, 甚至連我現在所打的地方都算是. 例如下列程式碼, 可將所要貼上的字串加在 NotePad 上, 但我想要的是目前
Cursor 所在的作用視窗, 不一定是 NotePad, 任何程式都有可能, 因 Window
的 Caret 同一時間只會存在一個等待輸入的作用視窗. 希望您不吝再次賜教, 謝謝!! procedure TForm1.Button1Click(Sender: TObject);
var s:string;
h, npad:HWND;
begin
// h:=childwindowfrompoint(findwindow('notepad',nil),point(50,50));
Npad := FindWindow(nil, '未命名 - 記事本');
if npad <> 0 then begin
h:=ChildWindowFromPoint(npad,Point(10,10));
if h <> 0 then begin
BringWindowToTop(Npad); //使其成為focus之window
s:='測試Test';
SendMessage(h, WM_SETTEXT,0,longint(PCHAR(S)));
end;
end;
end;
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
謝謝 sos_admin,hagar, 問題已解決了!! 較為好且正確的做法應為下列的程式碼,我是在國外網站找到的,
特別張貼出來, 希望對需要的人能有所幫助 function GetSysFocus : integer;
Var
hOtherWin,OtherThreadID,hFocusWin : integer; Begin
hOtherWin := GetForegroundWindow;
OtherThreadID := GetWindowThreadProcessID( hOtherWin, nil);
If AttachThreadInput( GetCurrentThreadID, OtherThreadID, true ) Then
Begin
hFocusWin := GetFocus;
result := GetFocus;
AttachThreadInput( GetCurrentThreadID, OtherThreadID, False );
End
else
result := getFocus;
End;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |