• 締切済み

他のアプリケーションを操作

他人の作ったアプリケーションを何とか操作したのですが、何か方法はありませんか? ちなみに、「Spy++」ツールを使って対象アプリのウィンドウハンドルを確認して見たのですが、そのアプリ画面にある各種コントロールが子ウィンドウとして確認できません。 操作したいアプリが「LabView」で作られているっぽいです。 (NIのMeasurementStadioのコントロールがたくさんあります。勝手な推測ですが、、、) WINAPIを駆使すれば、実現できそうな感じはあるのですが、私の力ではこれ以上前に進めなくなってしまいました。 回答を宜しくお願いします。

  • 0333
  • お礼率73% (76/104)

みんなの回答

noname#118114
noname#118114
回答No.2

色々試した結果、こちらでは現象を確認できませんでした。 そのアプリはどうもかなり特殊な方法で作られたアプリのようです。 ハンドルが取れない以上操作は無理なので諦めるしかないと思われます。 但し、他の言語なら可能性はあるかもしれません。

0333
質問者

お礼

回答ありがとうございます。 色々と試していただいたのですね。 ありがとうございました。

0333
質問者

補足

ちなみにですが、色々試して頂いた方法を教えていただけませんか? 今後の参考にしておきたいので。。。 宜しくお願いします。

noname#118114
noname#118114
回答No.1

操作したいウィンドウのトップハンドルが分かるのなら 次は"EnumChildWindows"で各種コントロールのハンドルを取得できるはずです。

0333
質問者

お礼

回答ありがとうございました。 すいません、補足に書く内容かもしれませんが、続けて記述します。 トップウィンドウは、FindWindow関数でハンドル取得ができます。 が、質問で書いたように子ウィンドウが存在しませんので、EnumChildWindows関数ではコントロールのハンドルは獲得できませんでした。 (Spy++のウィンドウビュー上で対象キャプション下に階層がありません。)

関連するQ&A

  • 他のアプリケーションの操作について

    こんにちは。 現在、WindowsXP、Visual Studio2005(以下VS)にて既存のアプリケーションの操作を行うツールを作成しようとしています。 Findwindow関数で親のハンドルをとり、EnumChildWindow関数でコントロールのハンドルを取得しましたが、操作したいボタンの情報が取れません。 参考にさせていただいたコードは以下です。 http://blog.goo.ne.jp/masaki_goo_2006/e/cea1b601e33fb7a344ecba2ee972efe4 VS付属spy++の調査も同様の結果で、そのボタンの情報が出てきませんでした。 コントロールの情報がとれないという事はあるのでしょうか? ちなみにボタンはtoolbarの上にありtoolbarの情報は取れています。 情報が取れない場合、操作は出来ないということでしょうか?

  • 別アプリの操作

    こんにちは。 以前、このサイトで同じような質問があったのですが、 VB.NETで作成したPGから別アプリのボタンを押すには、ボタンのオブジェクトハンドルを 取得し、SendMessageで実現できるとありました。 その方法でボタンのハンドルまでは取得できたのですが、コントロールIDの取得で0が 返ってきました。 Spy++で見たところ、コントロールIDが0でした。 コントロールIDを使用せずにオブジェクトハンドルだけ?で別アプリのボタンを押すことは できるのでしょうか? ちなみに別アプリとはAcrobat9です。 よろしくお願いします。

  • アプリケーションのロックについて

    現在開発中のアプリケーションで、一定時間操作しないとロックが掛かるようにしたいのですが、タイマーコントロールだけで実現できるのでしょうか。 いろいろ試してみたのですが、うまくいかないので悩んでいます。 「ユーザーがアプリケーションにまったく触っていない」というのを取得できるようなものはあるのでしょうか。

  • ウィンドウを持たないアプリケーションにデータを送信したい

     あるサービスコントロールマネージャに登録されているアプリケーションにメッセージIDと、データを送りたいのですが、ウィンドウを持っていない為、データの送り方が分かりません。 これが仮にウィンドウを持つアプリケーションだったならば、 PreCreateWindow()内で if (cs.lpszName) { WNDCLASS wc; ::GetClassInfo(AfxGetInstanceHandle(), cs.lpszClass, &wc); wc.lpszClassName = _T("サービス名"); // 好きな名前を設定 AfxRegisterClass(&wc); cs.lpszClass = wc.lpszClassName; } とでもしておいたならば、 hWnd=FindWindow(_T("サービス名"),ウィンドウタイトル); とすればよく、 PostMessage()を使う事が出来ると思うのですが、このPreCreateWindow()を通らない為に、この処理が使えないのです。  現状、サービスコントロールマネージャから起動するからか、ウィンドウがSpy++では見られない(生成していない?)状態です。exeを直に起動する分にはウィンドウが生成され、Spy++でも、所定の通り、「'サービス名'サービス名」として確認できます。FindWindow()でハンドルが取得でき、データも送れました。  が、これでは当然ながら見える形でウィンドウが生成されているわけで、それでは都合が悪く、結局、こちらの方法は採用不可となります。  どなたか、SCMで起動した場合のデータ送付方法をご存じではないでしょうか? よろしくお願いします。

  • アプリケーションが動かない!

    PCにインストールしているアプリケーションを実行しようとすると、 「指定されたファイルに対してこの操作を行うプログラムが関連付けされていません。[フォルダオプション]コントロールパネルでプログラムを関連付けてください。」 と、表示され全てのアプリが使えなくなってしまいました。 解決方法を教えて下さい。

  • 別アプリケーションを操作するプログラミング

    別アプリケーションを操作するプログラミング あるデータベースソフトを使っていまして、データを特定の様式でプリントアウトできる機能を持っています。 ただこのソフト、数十枚分のデータを一括でプリントアウトする機能がなく、一枚一枚プレビュー画面を出して「印刷ボタン」をクリックして・・・とやる必要があります。 これを自動化できるツールを作りたいなと思っているのですが可能なのでしょうか? イメージとしては、別アプリケーションを操作するアプリケーションです。 画面上のボタンをクリックしたりするためには、そのボタン自身や置かれているウィンドウなどの部品名(?)が分からないと指定できませんよね? それを自動で調べて、名前等取得してくれるようなことが必要になると思いますが可能ですか? 調べていくうちに、そういうのは操作対象のアプリ側の製作者が、そういうことを想定してアンカーのようなものを用意してくれてないと無理というような話を聞いたのですが、やはりそうなのでしょうか? この言語なら可能とかいうのがありましたら、ぜひ教えていただけないでしょうか。

  • 他のアプリケーションの動作を監視するには?

    C++初心者です。 現在VC++.NETで以下の機能を実装しようと考えています。 ・他アプリケーション(ブラウザなど)への操作(ウィンドウの移動など)を検知 この機能を実現するためグローバルフックやシステムフックと呼ばれる機能を使おうと考えていますが、非常に上級者向けの技術と言うことで少し躊躇しています。 そこで、経験者の方にお聞きしたいのですが、この機能を実装するためにフックを使う事は妥当でしょうか? もちろん必要であるならば一生懸命勉強しますが、いま現在「もしかしたら他にもいい方法があるんじゃないか?」という考えが頭をよぎりなかなか集中できません。 よろしくお願いします。

  • リストコントロールのスクロールバーを操作無効にするには

    お世話になります、fujicafeと申します。 現在、VC++でMFCのダイアログベースのアプリケーションを作成し、そこでリストコントロールを配置させています。 リストコントロールは自動的に垂直方向のスクロールバーを表示させるようにしています。 そこで質問なのですが、現在、リストコントロールの垂直方向のスクロールをスクロールバーの操作ではなく、キー操作によって行おうと思っているのですがどのようにすればスクロールバーの操作を無効にできますでしょうか? ポイントとしては ・リストコントロールの自動的に表示させる垂直スクロールバーはそのまま表示させたい(スクロールバーは全体行での現在の行の位置を示すだけ) ・リストコントロールの垂直方向の移動はキー操作でしたい。 これを実現するには、やはりリストコントロールのスクロールバー表示を無しにし、別でスクロールバーを設置させるしか方法はないでしょうか? 現状で、キー操作でのリストコントロールのスクロールバーの操作は実現できていますので、出来ればリストコントロールのスクロールバーの操作の無効のみが出来ればいいなと思っております。 ご意見がありましたら、よろしくお願いいたします。 尚、開発環境は Windows CE 6.0 Visual Studio 2005 です。

  • WinAPIでのファイル操作について教えて下さい。

    現在参考書やwebサイトと参考にWindowsプログラミングを学んでいます。 下記のサイトにあるファイル作成のソースをコンパイルして実行したのですが http://wisdom.sakura.ne.jp/system/winapi/win32/win111.html #include <windows.h> int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow) { HANDLE hFile; hFile = CreateFile( lpCmdLine , GENERIC_READ , 0 , NULL , CREATE_NEW , FILE_ATTRIBUTE_NORMAL , NULL ); if (hFile == INVALID_HANDLE_VALUE) { MessageBox( NULL , TEXT("ファイルを作成できません") , TEXT("エラー") , MB_OK ); return 1; } CloseHandle(hFile); return 0; } コンパイルは成功するのですが実行すると必ずエラーになります。 他のソースも同様にファイル操作に失敗した場合の表示が行われます。 自分が持っている参考書にはファイル操作についてあまり詳しく書かれていないので他のソースも試せません。 どなたか教えて下さいよろしくお願いします。

  • コントロールパネルにも表示されるアプリケーションのアンインストールの仕方

    Windows2000 掲題の件ですが、 アプリケーションがアンインストールファイルのエラーによって、 通常のアプリケーションの追加と削除が使えず、 また、アプリのスタートアップメニューの中にあるアンインストールメニューも 使えない状態です。 そこで下記のURL先の強制アンインストールのアプリを使いました。 http://www.vector.co.jp/soft/win95/util/se259857.html アプリケーションの追加と削除上からは消えましたが、 消したいアプリケーションがインストールすると、 コントロールパネルにも表示されるため、コントロールパネル上には残り 完全にはアンインストールできていない状態です。 完全にWindows上から削除したいのですが、 どのようにすれば完全にアンインストールできるでしょか? 宜しくお願いいたします。

専門家に質問してみよう