Delphiで他のアプリを操作するためのプログラムを書いています。
他のアプリのウィンドウハンドルを取得するために次のようなプログラムを作ったのですが、(この場合は)メモ帳を立ち上げたままで、何度もウィンドウハンドルを調べてみると時々変わります。
いくつかの値を順番に替わっているような...
どこか間違っていますか?
//------------
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.Menus;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
ListBox2: TListBox;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
function CallBackTest(hWindow: HWND; LP: LParam): Boolean stdcall;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i :Integer;
begin
EnumWindows(@CallBackTest, 0);
for i:= 0 to form1.ListBox1.Count - 1 do begin
if AnsiPos(Edit1.Text,form1.ListBox1.Items[i]) = 1 then begin
ShowMessage(form1.ListBox1.Items[i] + #10#13 + form1.ListBox2.Items[i]);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.ListBox1.Clear;
end;
function CallBackTest(hWindow: HWND; LP: LParam): Boolean stdcall;
var
PC :PChar;
Len :integer;
Name :string;
begin
Result :=false;
if hWindow <> 0 then begin
GetMem(PC, 100);
Len :=GetWindowtext(hWindow, PC, 100);
setstring(Name, PC, Len);
if Name <> '' then
form1.ListBox1.Items.Add(Name);
form1.ListBox2.Items.Add(IntToStr(hWindow));
Result :=true;
end;
end;
end.
//----------------
//Edit1に「無題」と入力してメモ帳のウィンドウハンドルを調べています。
Delphi XE5 Starter、Win8.1を使っています。
No.3ベストアンサー
- 回答日時:
ちなみに,最初に提示されたコードは,必ずしも,メモ帳のハンドルを取得しているわけではありません.
以下を参考にしてください.
http://mrxray.on.coocan.jp/bbs/DelphiBBS/mrxray_ …
ではお仕事頑張ってください.健闘をお祈りしています.
ありがとうございます。
何とか「メモ帳」のウィンドウハンドルを取得して操作できるようになりました。
とりあえず、これでこのトピを閉めさせていただきます。
No.2
- 回答日時:
No.1
- 回答日時:
>ウィンドウハンドルって途中で変わるものなんですか?
もし,ウィンドウハンドルが途中で変わるものとします.
他のアプリを操作するためのプログラムを書いているということですので,参考書やネット上には,ウィンドウハンドルを使用した多くのサンプルやプログラムがあるのはご存じだと思います.
すると,それらのサンプル,プログラムは正常に動作しないことになってしまうかも知れません.
このことについては,どう思われますか ?
>どこか間違っていますか?
上記のことをどう思われるかによって確認してみてはいかがでしょうか.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
EnumChildWindowsの使い方(VBA)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
ラジオボタンの初期指定
-
VBA .Value=.Value ?
-
MFC ダイアログ→MDI風に変更
-
勝手にウィンドウが開いて止ま...
-
エクセルで保存したものを開く...
-
ExcelのBOOKが消えた!
-
ゲームでは結局どっちが良いの?
-
グラフを別ウィンドウで立ち上...
-
[VBA] UserForm を Excel の W...
-
Console.WriteLine で表示されない
-
Vba LongPtrについて教えてくだ...
-
隠れたウィンドウの画面をキャ...
-
focusメソッドを使ってもカーソ...
-
MFC ダイアログ上のID取得につ...
-
ブック構成の保護
-
UWSCで特定のChromeのタブをア...
-
EnumChildWindowsの使い方(VBA)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
ゲームでは結局どっちが良いの?
-
ExcelのBOOKが消えた!
-
VBA .Value=.Value ?
-
[VBA] UserForm を Excel の W...
-
ラジオボタンの初期指定
-
勝手にウィンドウが開いて止ま...
-
Excelの上下を固定したい
-
【VB2008】 マウス操作の一時的...
-
「&HFFFF」「&H1A」とは?
-
作成したウインドウのサイズを...
-
親ウインドウにあるOKボタンを...
-
他のアプリケーションの終了処理
-
MFC ダイアログ上のID取得につ...
-
ExcelVBAでAPIを使って外部ウイ...
-
EnumChildWindowsの使い方(VBA)
-
Alt+P,Alt+NをPostmessageで送...
-
Vba LongPtrについて教えてくだ...
おすすめ情報
回答ありがとうございます。
>...それらのサンプル,プログラムは正常に動作しないことになってしまうかも知れません.
>このことについては,どう思われますか ?
Notepadとか電卓にキー入力を送るというサンプルを見たのですが、両方とも私のPCには入っていないんです。そのプログラムの動作を確認し、改良していくことができません。
それで、他のサンプルプログラムを改良してウィンドウハンドル?を調べて、動作させようとしたのですが、行き詰ってます。
いま、XPパソコンを起動したら、電卓のソフトは入っているので、これで動作を確認してみます。
丁寧に解説していただきありがとうございます。
実は、あるソフトのplug-inソフトを開発しようとしています。
(今後の生活が懸かっていますので詳細は書けませんが)
このソフトで、つぎのことをしようとしています。
1.ユーザーが登録したソフトの実行
(起動していなければ、起動。起動していれば最大化またはフォアグランドにする)
まだまだ調べている途中ですが、ShellExecuteだと無理みたいで、CreateProcessだとOKかも。
2.本体ソフトの操作
PostMessageとかSendMessageとかでウィンドウハンドルを扱う必要がある。
そのための前段階として、簡単なアプリでどうすれば操作できるか確認する。
(続きます)
(続きです)
Windows APIの本を3冊、Visual Studioの本2冊、C#の本2冊(最終的にC#で動かす必要がありますので)を入手して調べているのですが、なかなか難しいです。
>FBtnHandle := Button2.Handle;
同じソフトだと、こんなに簡単にハンドルが取得できるのですね。
ある程度まで開発出来たら、そのソフトメーカーに相談してみようと思っています。
お時間をとっていただき本当にありがとうございます。
回答ありがとうございます。
とりあえず、やっとコードの間違いに気づきました。
いつもはかならずbegin~endで囲むようにしているんですが、なぜか今回は忘れていました。
(疲れたので、一休み)