C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: 他のプログラムのウィンドウ内の文字取得


(過去ログ 29 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■13762 / inTopicNo.1)  他のプログラムのウィンドウ内の文字取得
  
□投稿者/ ある (1回)-(2008/02/04(Mon) 17:33:54)

分類:[VB6 以前] 

はじめまして、あると申します。

環境は、下記のとおりです。
WindowsXP
VB6

質問ですがVBを使用して市販ソフトを動作させOK、NGの判定をおこなおうと考えています。

ソフトを動作させることはできたのですがOK、NGの判定ができなくて困っています。

ソフトは別ウィンドウで開きます(最前面)。
OKのときは、エラー=0と表示され、NGの場合はエラー=3など0以外が表示されます。

市販されているソフトのウィンドウの中から文字を検索する方法があるのでしょうか?
別ウィンドウの文字を検索する関数はあるのでしょうか?


引用返信 編集キー/
■13764 / inTopicNo.2)  Re[1]: 他のプログラムのウィンドウ内の文字取得
□投稿者/ よもやま (11回)-(2008/02/04(Mon) 18:11:11)
よもやま さんの Web サイト
No13762 (ある さん) に返信
> はじめまして、あると申します。
>
> 環境は、下記のとおりです。
> WindowsXP
> VB6
>
> 質問ですがVBを使用して市販ソフトを動作させOK、NGの判定をおこなおうと考えています。
>
> ソフトを動作させることはできたのですがOK、NGの判定ができなくて困っています。
>
> ソフトは別ウィンドウで開きます(最前面)。
> OKのときは、エラー=0と表示され、NGの場合はエラー=3など0以外が表示されます。
>
> 市販されているソフトのウィンドウの中から文字を検索する方法があるのでしょうか?
> 別ウィンドウの文字を検索する関数はあるのでしょうか?
>
市販ソフトは、GUIアプリなのでしょうか?
それとも、コンソールアプリなのでしょうか?

GUIであれば、EnumWindowsでウィンドウを列挙させ
対象のアプリが表示しているウィンドウハンドルから
各コントロールのウィンドウハンドルおよびGetWindowTextで値が取得できます。
ただし、ビットマップ等画像で結果を表示しているなら、画像まで取り込まないと判断できません。


引用返信 編集キー/
■13765 / inTopicNo.3)  Re[1]: 他のプログラムのウィンドウ内の文字取得
□投稿者/ まどか (438回)-(2008/02/04(Mon) 18:13:43)
> ソフトは別ウィンドウで開きます(最前面)。
> OKのときは、エラー=0と表示され、NGの場合はエラー=3など0以外が表示されます。
>
> 市販されているソフトのウィンドウの中から文字を検索する方法があるのでしょうか?
> 別ウィンドウの文字を検索する関数はあるのでしょうか?

この場合、いわゆるフォームのことを指すウィンドウではなく、
WindowsOSの仕組みのウィンドウ(ハンドル)(メッセージを受け取る単位)がポイントです。
まずは、SPY等でそのエラーが表示されているウィンドウを特定する必要があります。

#ただし、VB6アプリのLabelのようにウィンドウハンドルを持たずSPYに表示されないものがあります。
#少なくともその場合の特定方法は私はわかりません。
#あれば、だれかおしえて。

特定できたら、「どんな状況」でも「これだ!」と特定できる条件を定義する必要があります。
これができない場合はあきらめてください。>実行するごとに見つかったり見つからなかったりすることになるから。
#ちなみにSPYで出てきたウィンドウハンドルは毎回変わりますので使えません。

特定できる条件ができれば、EnumWindows API等でウィンドウを列挙しながら条件に合うものを探すことになります。
条件に合うウィンドウハンドルを取得できれば、GetWindowText APIでVB6で言うところのキャプションを取得できることでしょう。

引用返信 編集キー/
■13810 / inTopicNo.4)  Re[2]: 他のプログラムのウィンドウ内の文字取得
□投稿者/ ある (2回)-(2008/02/05(Tue) 10:23:01)
いろいろな方法を教えていただきありがとうございました。

お話をお聞きしていると別ウィンドウから直接文字を読み込むことは難しそうなので
方法を代えようかと思います。

OKのウィンドウをプリントスクリンで取り込んでおきその画面と
結果の画面を比較しようかと思います。

今までに画像の処理をおこなったことがないためどのようなやり方をおこなえばよいか
わかりません。
どのような方法が妥当か教えていただけませんでしょうか?

現在の状況ですが、OK画面と別ウィンドウのキャプチャをVB上のPICTUERに貼るところまではできています。

引用返信 編集キー/
■13821 / inTopicNo.5)  Re[3]: 他のプログラムのウィンドウ内の文字取得
□投稿者/ まどか (439回)-(2008/02/05(Tue) 13:12:57)
> OKのウィンドウをプリントスクリンで取り込んでおきその画面と
> 結果の画面を比較しようかと思います。

プログラムでやるんですよね?
OCRとかがあるけどどっちにしろ精度というものが出てきます。
いったいその判断条件はどんな風になるのでしょうか?
#比較画像取得時と異なる解像度やデザインでWindowsを実行していたら一発アウトでは?

それより、ログファイルが出来上がるとかのソフトの仕様面での条件をまず調べるべきです。
ソフトそのものの仕様でなくても、あるさんの実行の仕方の場合では必ずあるファイルができるはずだとかでもOKです。

結局ソフトが外部へ結果を知らせるインターフェースが無い限り、
先に書いたような小細工しか方法はありません。

> 別ウィンドウから直接文字を読み込むことは難しそうなので

これしか方法が無いなら、べき論はおいといて、やってみる価値はありますが。
引用返信 編集キー/
■13841 / inTopicNo.6)  Re[4]: 他のプログラムのウィンドウ内の文字取得
□投稿者/ ある (3回)-(2008/02/05(Tue) 16:34:58)
まどか様、よもやま様

いろいろとアドバイスをしていただきありがとうございました。

まどか様のおっしゃるとおりエラー時にファイルを生成する設定がソフトにあったので
エラー時に生成されるファイルをチェックするようにしました。

ほんとうにありがとうございました。
解決済み
引用返信 編集キー/
■13888 / inTopicNo.7)  Re[5]: 他のプログラムのウィンドウ内の文字取得
□投稿者/ 熊谷隆史 (1回)-(2008/02/06(Wed) 11:52:01)
No13765 (まどか さん) に返信
> #ただし、VB6アプリのLabelのようにウィンドウハンドルを持たずSPYに表示されないものがあります。
> #少なくともその場合の特定方法は私はわかりません。
> #あれば、だれかおしえて。

IAccessibleのaccName プロパティや
accValue プロパティで取れる場合もあります。


Active Accessibility 2.0 SDK Tools
http://www.microsoft.com/downloads/details.aspx?FamilyId=3755582A-A707-460A-BF21-1373316E13F0
AccExplorer32.exeで、先ず確認。
引用返信 編集キー/
■13899 / inTopicNo.8)  Re[6]: 他のプログラムのウィンドウ内の文字取得
□投稿者/ まどか (440回)-(2008/02/06(Wed) 13:18:16)
> AccExplorer32.exeで、先ず確認。

やっぱり、VB6のラベルは出てこない。。。
解決済み
引用返信 編集キー/
■13967 / inTopicNo.9)  Re[7]: 他のプログラムのウィンドウ内の文字取得
□投稿者/ 熊谷隆史 (2回)-(2008/02/07(Thu) 10:37:19)
No13899 (まどか さん) に返信
> > AccExplorer32.exeで、先ず確認。
>
> やっぱり、VB6のラベルは出てこない。。。

いやあのー、
そういうウィンドウレス・コントロールに
於いて取れる場合もあると言う
意味合いで書いたのですが。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -