喫茶XRAYトップページ


[8936] レスしてしまいました返信 削除
2015/6/16 (火) 19:26:34 Mr.XRAY
こういった,なんと言いますか,知恵袋みたいのに初めてレスしてしまいました.

[ウィンドウハンドルって途中で変わるものなんですか?]
https://oshiete.goo.ne.jp/qa/9001419.html

もちろん,goo の ID を新規登録しました.
こういうのって,本当は,具体的な回答というか,解決策を示さないと
いけないのかな ?
ちょっと,igy さん風になってしまいました.

多分,質問された方のコードは,以下のようにすべきなんでしょうけど.
ウィンドウハンドルが変わるかも知れないと思っていると気づかないかと.
ウィンドウハンドルは変わることはないと思えば,
自分のコーディングに間違いあることは間違いありませんから.きっと
見つかるでしょう.

  if Name <> '' then
    form1.ListBox1.Items.Add(Name);
  form1.ListBox2.Items.Add(IntToStr(hWindow));
  Result :=true;
  //このResult の処理位置というか... 何か狙いがあるのか...
  //それとも単に Result := False; と Result := True の違いを知らないだけなのか
  //それとも,コールバック関数についての知識が不足しているのか

     ↓
  (リストの片方だけ追加しても... ねぇ)

  if Name <> '' then begin
    form1.ListBox1.Items.Add(Name);
    form1.ListBox2.Items.Add(IntToStr(hWindow));
  end;

# 「無題」で検出することにも少しばかり疑問が残りますが...



[8939] 想定外?返信 削除
2015/6/17 (水) 10:00:11 Mr.XRAY
> [ウィンドウハンドルって途中で変わるものなんですか?]
> https://oshiete.goo.ne.jp/qa/9001419.html


質問された方から反応がありました.
う〜む.そうきましたか.予想していた反応とは違いました.
(一部は予想通りですが)

>   if Name <> '' then begin
>     form1.ListBox1.Items.Add(Name);
>     form1.ListBox2.Items.Add(IntToStr(hWindow));
>   end;


はレスしなくてよかったと思っています
この方は,もう少しやり取りが必要なようですが,教えて! goo では無理か ?
ちょっと考えよう...


>そのプログラムの動作を確認し、改良していくことができません。

って,そういう問題を提起したわけではないんですけどね (^^;


[8942] Re:想定外?返信 削除
2015/6/17 (水) 23:26:45 Mr.XRAY
> この方は,もう少しやり取りが必要なようですが,教えて! goo では無理か ?
> ちょっと考えよう...


やっぱ,知恵袋みたいのは,対話的要素が必要な質問には向いていないですね.
コードがかけて,画像が任意の位置に挿入できる Delphi Forum みたいのが...
今回が最初で最後かな ?


[8943] Re2:想定外?返信 削除
2015/6/18 (木) 08:38:27 おかぽん
▼ Mr.XRAYさん
> 1.ユーザーが登録したソフトの実行
> 2.本体ソフトの操作

やったことありますけど、めんどくさいですねぇ。

WinSight32とかspy++(?)とかで、クラス名を探し出してメモ。
起動している場合もあるので、EnumWindowsでウインドウ検索。
前回は、クラス名とキャプションの一部で判断しました。

みつけたらEnumChildWindowsでコントロールのキャプションで
コントロール判別という泥臭い方法で、コントロールを拾い上げ、

PostMessageにBM_CLICKでボタンクリックしたり
WM_SETTEXTでEditの文字を変えたり。
メッセージの処理を知らないと、なかなか難しいと思います。
サンプルならいろいろ転がっているでしょうが、検索するキーワードが
正しいかどうかが問題か。

とある一括処理は、そのプログラムを使ってくださいというお達しがありましたが
(個人的に)なかなか、お世辞にも使いやすいとはいえない代物。
処理した結果を取り込みする必要があったので、回避することができず、
いっそのこと自動操作してしまえと作りました。
最終的には、その一括処理の機能も作成することになり、あまり役に立ちませんでした。

[8944] 他のアプリの操作返信 削除
2015/6/18 (木) 12:17:01 Mr.XRAY
▼ おかぽんさん

他のアプリの操作というのは難しいですよね.
できれば避けたいです.

> サンプルならいろいろ転がっているでしょうが、検索するキーワードが
> 正しいかどうかが問題か。


そうなんです.検索で目的のサンプルを探しだすのは大変です.
キーワードによってヒットするウェブページが違いますし,
ヒットとした記事を読み返すとヒントがあったり...


[8945] Re:レスしてしまいました返信 削除
2015/6/18 (木) 20:48:24 SO
▼ Mr.XRAYさん
> こういった,なんと言いますか,知恵袋みたいのに初めてレスしてしまいました.
>
> [ウィンドウハンドルって途中で変わるものなんですか?]
> https://oshiete.goo.ne.jp/qa/9001419.html


自分はこの逆みたいなことをやってて困っています。
静脈認証のアプリがあるんですが、
ID・パスワードの画面で静脈認証が成功するとID・パスワードを自動入力してくれるんですが、
初回は上手くいくんですが、受け側のアプリを再起動すると、
自動入力してくれないのです。


静脈認証のアプリは、ターゲットのウィンドウとIDやパスワードを入力するテキストボックスの
ID?(Hex値)を事前登録しています。
登録方法は、spy++みたいにテキストボックスやボタンをマウスで指定するんですが、
受け側のアプリを再起動すると、テキストボックスのID?(Hex値)が変わっているんです。
受け側をdotNetで作っているからかなぁ?

[8946] Re2:レスしてしまいました返信 削除
2015/6/18 (木) 22:01:07 Mr.XRAY
▼ SOさん

> 受け側のアプリを再起動すると、テキストボックスのID?(Hex値)が変わっているんです。
> 受け側をdotNetで作っているからかなぁ?


う〜ん.どうなっているんでしょうね ?
もしかしたら,固定した値にしていないか,なっていないのかも... ?

[660_他のアプリへ文字列送信 (Delphi 同士)]
http://mrxray.on.coocan.jp/Delphi/plSamples/660_SendTextID.htm#list2

ウィンドウハンドルも,以下のサンプルでは,RecreateWnd を実行しているので,
EXE 実行中に変化しますです m(_ _)m

[168_上下方向のアライメント機能付きの TEdit]
http://mrxray.on.coocan.jp/Delphi/plSamples/168_TEdit_VerticalAligment.htm

頑張ってくださいませ (こればっか.ハハハッ)


[8947] Re3:レスしてしまいました返信 削除
2015/6/18 (木) 23:36:58 SO
▼ Mr.XRAYさん

> [660_他のアプリへ文字列送信 (Delphi 同士)]
> http://mrxray.on.coocan.jp/Delphi/plSamples/660_SendTextID.htm#list2


なるほどーって感じですが、SetWindowLongでID固定するとき、
使われてないものを取得しないと、かぶりますね。
そういう、取得するWinAPIあったような。。。
チャレンジしてみます。
ありがとう、ございます。

[8948] Re4:レスしてしまいました返信 削除
2015/6/18 (木) 23:58:41 Mr.XRAY
▼ SOさん

> そういう、取得するWinAPIあったような。。。

あったと思います.Get.... かな ?
サンプルプログラム集にも何かサンプルがあったような...
外部アプリの ID の設定はできたかな ?
もしかしたら,Windows XP ならできたかも知れません.

# 人柱 SO さんに期待 !?


[9012] Re5:レスしてしまいました返信 削除
2015/7/14 (火) 17:18:29 SO
▼ Mr.XRAYさん

最近、別なことやってて報告遅れました。

結果、良好です(^-^)

SetWindowLongでID固定出来ました。
テストにて、GetDlgItemで得られたハンドルに対してSendMessageを送ると、
見事テキストボックスに文字が入力されました。
ありがとうございました。

[9017] Re6:レスしてしまいました返信 削除
2015/7/14 (火) 22:28:10 Mr.XRAY
> SetWindowLongでID固定出来ました。
> テストにて、GetDlgItemで得られたハンドルに対してSendMessageを送ると、
> 見事テキストボックスに文字が入力されました。
> ありがとうございました。


おおっ,人柱やってしまいましたか.
お疲れ様でした.
手抜きレスしてしまいまして,スンマセン.
別のスレッドで書いているように,プログラムに対するモチベーションが
いまいちなので,メールのレスも,最近はいい加減でございます.


[9018] Re7:レスしてしまいました返信 削除
2015/7/15 (水) 07:36:04 SO
▼ Mr.XRAYさん

> 手抜きレスしてしまいまして,スンマセン.
> 別のスレッドで書いているように,プログラムに対するモチベーションが
> いまいちなので,メールのレスも,最近はいい加減でございます.


いえいえ、[660_他のアプリへ文字列送信 (Delphi 同士)]が大変参考になりました。
ありがとうございます。

モチベは、回答への返信が無かったりしますと、結構落ちますよね。

自分も、以前プログラムの質問に回答したりしていたことも有りましたが、
回答への返事が無かったり、回答しても何も考えず、調べず、質問攻めにあって、
辟易したことがありました(^^;a

[8949] spy++など返信 削除
2015/6/19 (金) 07:14:07 Mr.XRAY
> 登録方法は、spy++みたいにテキストボックスやボタンをマウスで指定するんですが、

最近プログラムを始めた方は,
もしかしたら,spy++ という名前になじみがないかも知れません.
そこで,参考までにダウンロード先を紹介しておきます.
spy++ そのものについては,検索エンジンで調べてください (^^;

[14_ツール類の一括ダウンロード  ( SPY++ を含む )]
http://mrxray.on.coocan.jp/Delphi/plSamples/679_UIAutomation_Test.htm#14

 Winspector というのもあります.
 Winspector は高機能です.イベントなどのメッセージも検出できます.
使用方法は,ちょっと面倒です.
日本語のウィンドウタイトルは文字化けします.
私は Windows XP の時代に使用しましたが,Vista 以降では使用していません.

[13_ツール類  -  Winspector]
http://mrxray.on.coocan.jp/Delphi/plSamples/679_UIAutomation_Test.htm#13


[8951] Re:レスしてしまいました返信 削除
2015/6/20 (土) 12:43:22 Mr.XRAY
> 多分,質問された方のコードは,以下のようにすべきなんでしょうけど.

コードの間違いに気が付かれたようで安心しました.
かなり意地悪なやつだと思われたか知れませんが,
他の情報も入手できたと思いますので,勘弁してもらいましょう m(_ _ )m

ほら,小学生の時,気になる女の子には意地悪や悪さしたでしょう?
まっ,あんなものです.
えっ!? そんなことしたことない ? ホントですか ?


# Notepad とか電卓がないと書いてあったけど,起動できたかな ?
# [Windows に付属のメモ帳や電卓の起動]
# http://mrxray.on.coocan.jp/Delphi/Others/011.htm#02


[8987] ウィンドウハンドル返信 削除
2015/6/30 (火) 19:10:40 Mr.XRAY
> [ウィンドウハンドルって途中で変わるものなんですか?]
> https://oshiete.goo.ne.jp/qa/9001419.html


ちょっと気になって「ウィンドウハンドル」ググってみました.
5 番目にこんなのがありました.

[ハンドルを理解する]
https://msdn.microsoft.com/ja-jp/library/cc344590.aspx

≪Windows では、作成されたウィンドウにハンドルを割り当て、ウィンドウが
削除されると、割り当てているハンドルを解放します。ウィンドウが存在する
限りそのハンドルは保持されますが、ウィンドウを一度削除して再作成したとき
に同じハンドルが割り当てられるとは限りません。ハンドルを変数に保持する
場合は、ウィンドウが削除されるとそのハンドルは無効になることに注意して
ください。≫
(改行変更しています)

とあります.
調べればあるということですね.


INCM/CMT
Cyclamen v3.82