WindowsのForm表示をVBで制御する方法

このQ&Aのポイント
  • 自作ソフトMeからアプリAの機能を制御する方法について解説します。
  • アプリAのメニュー画面を表示し、自作ソフトMeを最前面に保つ方法について悩んでいます。
  • アプリAのボタンを押し、メニュー操作を自動化する方法についても解決策を求めています。
回答を見る
  • ベストアンサー

★WindowsのForm表示をVBで制御したい

お世話になります。 さて「アプリA」という無料ソフトがあって、 それは「OEM」ボタンなるものを提供しており、 自作ソフトMeから通信で制御できるのです。 つまりアプリAの機能を自由に使えるわけです。 そこで、アプリAのボタンをMeから押して、 アプリAのメニュー画面が出して見ると、 自作ソフトMeが最前面のままとなるのです。 これではAかAメニューのどこかをクリックして、 Aを最前面にするか、Meを最小化しないと、 メニュー操作ができません。 ましてやMe画面を最大化しているときは、 AとAメニューは裏に隠れて見えすらしません。 タスクバーをクリック操作すればよいでしょうが、 そうした操作なしに自動化したいのです。 (添付の画像を参照してください) そこで現状は自作ソフトMeから、 1)アプリAを最小化するメッセージを送る SendMessage(p.MainWindowHandle,&H112,&HF020,0) 上記関数の引数の意味はよく分かりませんが。 2)アプリAの目的のボタンを通信で押す。 AppliObj.DoButton( TARGET_BUTTOM ) ここからが困っています。 。 3a)アプリAを元のサイズにするメッセージを送る SendMessage(p.MainWindowHandle,&H112,&HF120,0) ところが!、2)をした後では反応しません。 Aメニューがモーダルフォームだからのようです。 順序を逆にしたら、このやっていること自体が無意味。 3b)アプリAの最小化アイコンを手動クリックする これは成功! Aメニューだけがポップ表示されました。 しかも自作ソフトMeの前面に! しかし手動クリックをすることは目的から外れます。 3c)アプリAの最小化アイコンを自動クリックする ところがそのアイコンのX座標が状況で変わるため 自動クリックの位置が定まりません。 なにか解決策を教えてもらえないでしょうか! よろしくお願い申し上げます m(__)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> 1)アプリAを最小化するメッセージを送る これは成功しているんでしょうか? > 2)アプリAの目的のボタンを通信で押す。 これは成功しているんでしょうか? > 3a)アプリAを元のサイズにするメッセージを送る なぜ元のサイズに戻すんでしょうか? Aメニューが表示されない? 順番としては、 (1)アプリAを最小化 SendMessage (2)アプリAの目的のボタンを押す AppliObj.DoButton( TARGET_BUTTOM ) (3)Aメニューを最前面に表示する SendMessage(最小化されていれば元のサイズに。いらないかも) SetForegroundWindow(最前面に)

ark_kyoto
質問者

お礼

その後、3)を以下のようにやってみたら、 Aメニューだけがアクティブに前面表示され大成功!v(^^)/ 'AppA のプロセスを探す Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcessesByName("AppA") If 0 < ps.Length Then '見つかった時は、アクティブにする Microsoft.VisualBasic.Interaction.AppActivate(ps(0).Id) End If ありがとうございました!

ark_kyoto
質問者

補足

ありがとうございます。 最大の目的は、図に示したことの実現なので、図をよく見て下さいねv(^^) これが実現するのであれば、方法はどんなものでも構いません。 とりあえず私は、1)2)3a~c)をやってみただけです。 1)2)はその部分では成功しています。 そして3b)も成功しましたが、手動クリックでは目的に合いません。 そこで3c)ですが、目的のアプリAのタスクバーでの座標がわかれば成功することも分かっています。そこで、 ★目的アプリAのタスクバーでのアイコン座標が分かる方法があれば、その方法でも目的は達しますので、教えて下さい。 3a)で、なぜ元のサイズに戻すかというと、Aメニューが表示されないだけでなく、アプリAも表示されません。2)でモーダルフォームのAメニューを出してしまったからです。モーダルフォームとは、そのフォーム内、つまりそのWindow内で、例えば「OK」ボタンを押さないとアプリAの処理が進まない状態のことですから、最大化も元に戻すもできない(つまり反応しない)のです。 ちなみにSetForegroundWindow(最前面に)ですが、最前面に出したいのは「アプリAから開いたWindowだけ」です。 ★どんな引数を入れたらよいか教えて下されば有り難いです。 繰り返しになりますが、 ★1)2)3)の方法でなくても、図に示した目的が達成できればどんな方法でもよいのです。ただ、この関数がいいとだけ教えていただいても、その「引数」とか、それ以前にこんな「宣言」をしておかないといけないとか、ピンポイントで具体的にお願いできれば有り難いです。 よろしくお願い申し上げます。

関連するQ&A

  • 他のアプリの表示、非表示について

    他のアプリケーション(アプリA)をコントロールするプログラムを作っています。アプリAと自作アプリは起動したままです。自作アプリでボタンを押すとアプリAを表示させてアクティブにして仕事をさせ、終わったら非表示にします。 アプリAのハンドルをhandle = FindWindow()で取得して ShowWindow(handle,SW_SHOWNORMAL)で表示して、 ShowWindow(handle,SW_HIDE);で隠しています。 ボタンを押したときに、アプリAが表示されていると、非表示にしたあとタスクバーのアプリを手動で表示できません。 MINIMIZEやCloseWindos()も試しましたが、それだと画面の左下にアプリAが残ってしまいます。 SendMessage(handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);も試しましたがうまくいきません。使い方が悪いのかもしれません。 アプリAを隠す事と元のサイズで表示する。という二つの動作をプログラムで交互に行う場合に、途中で手動でアプリAの最小化、あるいはタスクバーから出すという動作をさせることができるのが希望です。どうすればよいでしょうか。 OSはXPです。

  • スティッキーズのウインドウが表示されない

    iMac 1.25GHz 17inch で Mac OS X 10.3.2 を使用しています。 スティッキーズを起動し、新規メモを作成すると最小化(細いバーのみ)で表示され、ウインドウを広げようとダブルクリックするか右のボタンをクリックしてみると、そのウインドウが消えてしまいます。 その後何かスティッキーズを前面に表示させるような操作をすると、画面の左下のあたりに今まで作成したウインドウが最小化のまま表示されます。 新しいメモを作成しても見ることができず、とても不便に感じています。 どなたか解決法をご存知の方、おしえてください。 よろしくお願いします。

    • 締切済み
    • Mac
  • 特定のウィンドウに対するマウスやキーボード操作を制限する方法

    Windows上で動くGUI自動操作ツールを作ろうと考えているのですが、 一箇所懸念点がございます。 AというGUIアプリをプログラムから自動操作しようとした際に、 以下のようになる認識です。 1.自動操作ツールよりプログラムAを起動する 2.Aのウィンドウがオープンしたら、Aのウィンドウ上のコマンドボタンや テキストボックスに対して、Win32APIの擬似マウス移動命令や、 擬似クリック命令を送信して自動操作する。 3.自動操作ツールよりプログラムAを終了させる ここで、上記手順の2にてAのウィンドウを自動操作しているときに、 ウイルスチェックアプリなどの別のアプリがウィンドウを最前面 で開いてしまったとき、擬似マウス・キーボード命令がすべて その新たなウィンドウに行ってしまいます。 このような状況を回避するにはどのような手法があるのでしょうか?

  • LISTBOXで「他アプリ」を操作する

    例えば、こういった「他アプリ」があったとします。 Listboxをマウスクリックして選択項目を選択すると ダイアログが表示されて変更されたことを表示するアプリです。 上記の内容を自作アプリで操作したのです。 そこで、 まず、「SendMessage ******, LB_SETCURSEL, 2, 0)」で Listboxのindex「2」に選択をさせるメッセージを送信しました。 インテックス選択(変更)は行われましたが、マウスクリックした ようなイベントはおこりませんでした。 そこで、質問なんですが、上記「他アプリ」を自作ソフトで操作するには どのようにしたら良いのでしょうか? わかる方がいらっしゃいましたらご教授願えませんでしょうか? よろしくお願いします。

  • VB.NETとEXE

    VB.NETで作成したフォーム(仮にメインフォームとします)にコマンドボタンを複数貼り付けています。 各コマンドボタンをクリックすると、それぞれの別のEXEが起動します。 (例 コマンドAをクリックすると、EXE-Aが起動、コマンドBをクリックするとEXE-Bが起動。両方一度に起動も可) この時、必ずメインフォームの上にEXEのフォームが重なるように表示されています。 そこで質問があります。 1、複数EXEが起動されている時、一番前面に表示されているEXEを識別する方法はありますか? 「現在アクティブなEXE」とは異なります。なぜなら、メインフォームをクリックすると、前面に表示されているEXEはアクティブな状態とはならないためです。 2、メインのフォームの右上にある「最大化」や「最小化」のボタンをクリックしたら、それに連動してEXEも最大化や最小化をするようにすることは可能でしょうか? すこしわかりにくいと思いますが、補足もしますので、アドバイスよろしくお願いします。

  • ウィンドウ内の表示が数字

    WIN Meを使ってます。 ウインドウ右上の最大化ボタンや閉じるボタン、チェックボックスを始めとした、ちいさなアイコン(?)が何故か数字や記号で表示されます。 例えば、最小化ボタンが0、最大化ボタンが2とかです。 これってなんでしょうか? 最近、フォトショップ内のフォントがどこかへいってしまって、使えなくなったり、同じくフォトショップで保存先に存在しないフォルダが指定されるなど、よく分かんない状況が続いてます。これとなにか関係ありますでしょうか?

  • (VB2008)ShowDialogしたFormを閉じた時の、画面の挙

    (VB2008)ShowDialogしたFormを閉じた時の、画面の挙動について (VB2008EE、OSはVista) Form1からForm2を(ボタンのクリックイベントで) Dim f As New Form2 f.Show(Me) と記述して表示させたあと、 Form2の(ボタンのクリックイベントで) Me.Hide() として、Form2を閉じる記述を書きました。 で、Form2をShowDialogしてから、Hideを実行すると、 Form2が消えるのはいいのですが、残るForm1が、 ・デバッグ実行時は、VB2008EEのWindowの後ろに隠れてしまい、そのままとなる。 ・リリースビルドでは、さすがにそのままとはなりませんが、一旦Form1が  ちらつきます。 この回避策がありましたら教えてください。 。。。 ここからは、いろいろ実験した結果です。 ・試しに、Me.Hide()の後ろに、Threading.Thread.Sleep(5000)を 記述して実行すると5秒間Form1が後ろのアプリ画面に隠れた後、 Form1が前に表示される。 ・この場合の「後ろの別アプリのWindow」について、その別アプリが VB2008やエクスプローラだとForm2がそのアプリに隠れるのですが、 ExcelやIEだと、Form1が後ろに隠れることがないようです。。。 ・Hideではなく、Closeだと、後ろには隠れません。 (ただし、Closeの場合、Threading.Thread.Sleep(5000)の間はForm2は その前にClose()があっても、表示されたままSleepしその後閉じます) ・さらにShowDialog()でなく、Show()の場合、Owner指定して実行した場合は、 (つまりSHow(Me))全く問題なく、Form1が前面に表示されたまま 他のアプリが前に来ることはないのですが、 Ownerを指定せずにShowしたところ、ShowDialogと同様のことが起きるようです。 もし、これらの現象全体についてしっかりと説明できる方がいらっしゃれば、 説明もしていただけるとうれしいです。

  • スタートメニューの表示

    WINのMEです。左下のスタートボタンをクリックしてスタートメニューをいつも通り出したら、表示が変なのです。文字が大きくてアイコンのイラストと文字は3文字位しか表示されず、操作は出来るのですが不気味で・・・。再起動をしたら何事もなかったかのように直りました。何だったのかお分かりになる方いらっしゃいませんか。怪しいメールは来てないし、その時見ていたサイトもいつも見ているサイトなのでウイルスではないと思うのですが・・・。よろしくお願いします。

  • ▲や▼などが表示されなくなった。

    Windows Meを使っておりますが、昼頃から、突然画面の右上の「最小化ボタン、最大化ボタン、閉じるボタン」の 「-」、「□」、「×」のマークが、-→0、□→1、×→小さい0、にそれぞれ表示が変わっており、一部のスクロールバーや、ツールバーなどの▼や▲が数字の5や6など、コードNoと、思われる数字変わってしまいました。特別にどこをさわった・・・と、いう覚えもありません。 操作そのものは、差し支えないようです。(そこをクリックすれば、異常なく動作する。) 原因と、元に戻し方をお分かりの方、ぜひ教えてください。

  • ポインタの動作がおかしくなりました

    WinMEからWinXPにアップグレードしてしばらく使っていますが、マウスの動作がおかしくなって困っています。 具体的には、複数のソフトを起動してタスクバーにそれぞれのソフトのアイコン(と言っていいのか)が並んでいる場合、今まではそれらの一つをクリックすると、該当するソフトが前面に出てアクティブになりました。 それが最近、単にへこむだけで最前面に出て来もせず、アクティブにもなりません。複数のソフトを起動しているときには、右クリックしても最大化/最小化のようなメニューも出なくなりました。 またOEなどで、文章の中の一箇所をシングルクリックしただけで全文選択になってしまいます。 知らないうちにどこか変なところを触ってしまったのかと思いますが、もとのまともな動作に戻すにはどうしたらよいのでしょうか。