他アプリで範囲選択している文字列を取得するには、どのようにしたらいいのでしょうか?
ネット上を調べてみて、いろいろ試してはみましたが、
利用するメッセージを間違えているのか、APIの使い方がまずいのか検討が付かない状態です。
ちなみに、他アプリで選択している文字列は、メモ帳のもので試しました。
また、取得するタイミングは、あるホットキー(CTRL + "1")を押した時に行います。
※ホットキーを使用するにあたり、
"ホットキー登録コンポーネント GlobalHotkey"コンポーネントを使用させていただきました。
http://takamichie.at.infoseek.co.jp/warehouse/components/
どうかよろしくお願いいたしますm(_ _)m
◆試してみたソースです。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, GlobalHotKey, ComCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
GlobalHotkey0: TGlobalHotkey;
procedure FormCreate(Sender: TObject);
procedure GlobalHotkey0Items0Hotkey(Sender: TObject; Modifiers,
virtkey: Word);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
DoHotKey0: TAHotkey;
begin
//ホットキー用の設定
GlobalHotkey0.Enabled := true;
DoHotKey0 := Hotkey(Ord('1'), [modCtrl]); //ホットキー:CTRL + '1'
GlobalHotkey0.Items.Item[0].Hotkey := DoHotKey0;
end;
procedure TForm1.GlobalHotkey0Items0Hotkey(Sender: TObject; Modifiers,
virtkey: Word);
var
lhwnd: HWND;
str: String;
begin
//他アプリのウィンドウハンドルを取得
lhwnd := GetTopWindow(GetForegroundWindow());
//選択範囲の文字列を取得
SendMessage(lhwnd,
EM_GETSEL, //ネット上で見つけた"EM_GETSELTEXT"が無いので、これで試して見ました。
//しかし、どうも違うようですね。
0,
Longint(str)); //このあたりもよく分かっていないみたいです。
//取得した文字列をラベルで表示
Label1.Caption := str;
end;
end.
これは、ないな。
なぜそう考えるかというと、ウィンドウメッセージに該当するものがないからじゃ。皆もそうおもっておるわい。
そうでしたか・・・。
出来ると勘違いしていたんですね。
それでも、それが分かっただけでも良かったです。
ありがとうございました。
普通、Ctrl+Cを送信してテキストコピーして
それをアプリから見るんじゃないでしょうか。
ツイート | ![]() |