• ベストアンサー

ウインドウの取得

かんたんYouTubeプレーヤーというソフトのウインドウハンドルを取得し、プレーヤーウインドウのサイズや位置を変更するプログラムをVB2008で作成しようとしました。このプレーヤーはリストウインドウとプレーヤーウインドウの二つがあるのですが、窓ちぇき!というソフトでタイトルとクラス名を調べたら二つとも同じタイトルとクラス名になっていました。これだとFindWindow関数でウインドウハンドルを取得できません。どうすればよいでしょうか。

noname#255144
noname#255144

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

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

親ウィンドウが同じクラス名で同じキャプションなら、その親ウィンドウの子ウィンドウを FindWindowEX を使って調べどちらのウィンドウを現在捕まえているかを区別すればいいかと 思います。(検索ボタンのある方、無い方 のようにとか) 因みに、最初から FindWindow 関数でなく、FindWindowEX 関数を使って調査すれば 一発で捕まえる事ができます。

noname#255144
質問者

補足

FindWindowEx関数を使って調査すればよいということですが具体的にどうやればいいでしょうか。他のホームページで色々調べてみたのですがよくわかりませんでした。あまり知識がなくて申し訳ないのですが教えていただけないでしょうか。

関連するQ&A

  • ウィンドウハンドルの取得方法

    ダイアログの表示されないEXEを起動させて、FindWindowを使用してそのEXEのウィンドウハンドルを取得したいのですが上手くいきません・・。 FindWindowの第一引数は「ウィンドウのクラス名」を指定するようなのですが、「ウィンドウのクラス名」の意味が良くわかりません。第二引数は「ウィンドウ名」を指定するようなのですが、今回のようなアンダーグラウンドで動くEXEには「ウィンドウ名」は無いと思ってよいのでしょうか? ちなみにダイアログのあるEXEならウィンドウハンドルを取得できます。 お分かりの方がいらっしゃれば、ご教授願います。

  • 子ウインドウを特定する

    VisualBasic2008Expressでプログラミングをしています。 楽天ツールバーの検索窓のハンドルを取得してsendmessageで文字列を送るプログラムを作ろうとしています。 UISpy.exeで調べてところ"edit"というクラス名で深い階層にあるようで、FindWindowExでは取得できないようです。なので下のURL http://homepage2.nifty.com/nonnon/SoftSample/VB.NET/SampleEnumWindows.html のコードを基に検索窓のクラス名"edit"からハンドルを取得できるように作り替えようと思っています。 ですが、このenumChildWindowsやGetClassNameの使い方が全く分からない。FindWindowExの場合は、クラス名とタイトル名を指定すればハンドルが返ってくるのですが、これはコールバック関数やポインタが出てきてどう扱えばいいのかが分からず手が出せない状態です。 列挙された子ウインドウの中からクラス名"edit"を特定してハンドルを取得するには、どのようにコードを作り直せばよいのでしょうか。何も分からない状態でお手数をおかけするでしょうが、どうかよろしくお願いします。

  • FinderSystem等のツールで取得できないハンドルを取得するには?

    他のアプリケーションのボタンで操作したいと思い FinderSystemやNuke++等のツールを使いウィンドウハンドルを調べ SendMessage関数を使ってコマンドボタンのクリックをする所までは できるのですが、ツール等でウィンドウハンドルを取得できないラベル トグルボタンが存在し、画面上では明らかに存在しているのですが そのボタンには反応せず、大きな枠組みでウィンドウハンドルを 取得してしまいます。FindWindow、FindWindowEx、GetWindow EnumChildWindowで子ウィンドウのハンドルまで調べたのですが 値が0になってしまいます。他にもボタンだけではなく タブコントロールも操作したいと思っているのですが 同様に子ウィンドウハンドルの値は0になってしまいます そもそもウィンドウハンドルを全て取得することは不可能なのでしょうか? いろいろな他のアプリケーションのコマンドボタンをFinderSystemで調べて 取得できる場合とできない場合があり、この差は何なのか 疑問に思っています。ご存知のお方がいれば お手数ですが教えていただけないでしょうか? 開発環境は、WindowsXP、VB6.0です。 宜しくお願いいたします。

  • C++ 子ウィンドウのハンドルを取得したいのですが

    C++で別ウィンドウのアプリケーションを動かすというものを作っているのですが、そのウィンドウの子ウィンドウのハンドルを取得するのに困ったことがあるのでアドバイスをいただけると大変ありがたいです。 基本的にSPY++というソフトを使ってウィンドウ名その他を探し、FindWindowExまたはGetDlgItem関数を使って取得という方法をとっているのですが、クラス名、ウィンドウ名が全く同じもので、コントロールIDも0という状態のものがあり、片方を取得したい場合どうしたらよいのかという状態です。 知人にSPY++でみて上から何番目にあるやつと指定して得ることができる方法があるかもしれないと聞いたのですが、よくわかりません。 例としてその画像ものせますので、良い知恵がありましたらお貸しください。

  • ウィンドウを終了させたい・・・

    いつもお世話になっています。 画面遷移時にあるメッセージウィンドウ(別exe)をVBから起動させ、遷移が終わった後にそのexeを終了させるプログラムを作っています。 プログラムの中身としては、 (1) Shell関数でexe(メッセージウィンドウ)を起動 (2) FindWindowで、起動しているexeのハンドルを取得 (3) 取得したハンドルに、SendMessageでexeを閉じるようにする(WM_CLOSEを使用)。 ・・・といったものです。 (1)と(2)はうまくいくのですが、最後のSendMessageがうまくいきません(>_<) 試しに(1)と(2)の後に、Do文の中で [1]SendMessageで起動したexeを終了させるようにする [2]FindWindowをして、ハンドルが0だったら、Exit Doする ・・・ようにプログラムしてみたところ、永久ループになってしまいました・・・。 他にも、SendMessageの代わりにShowWindowを使ってみましたが同じくダメでした・・・(T-T) ネットで調べていますが、他の方法が浮かびません。 どなたか、良い方法をご存じでしょうか?? よろしくお願いします!!

  • ウインドウの位置を知る。

    c++BuilderXE2です。 HWND hwnd=FindWindow(NULL,L"P_orderwb"); で取得したウィンドウのスクリーン上の位置を知るにはどうすればよいですか。 ウインドウハンドルに対応した位置のプロパティがわからないのです。 例えば hwnd->Left,hwnd->Top などでできないかと試しましたが、メンバーではありませんでした。

  • 別ウインドウのハンドル取得の方法

    SDKで親ウィンドウを作ると同時に、OpenCVというコンピュータービジョンのライブラリを用いて、別のウィンドウを作りそこにある画像を表示させました。 このライブラリの関数を用いて作ったウィンドウの画像について、マウスの座標位置を取得したいのですが、この場合ウィンドウハンドルはどのように取得したらよいのでしょうか。

  • ウィンドウタイトルの取得方法

    WIN98 MFC vc++6.0 2重起動を防止し、既に起動している時は、ウィンドウを最上位にもってくる以下のコードにて ウィンドウのタイトルを設定しているIDS_WINDOWTITLEはどこで定義し、どうやってタイトルを設定すれば良いのでしょうか? BOOL CMyApp::InitInstance() { 略  // アプリケーションの二重起動防止  ::CreateMutex(NULL, TRUE, m_pszExeName);  if( GetLastError() == ERROR_ALREADY_EXISTS) {   // 既に起動されている場合は、CWnd::FindWindow関数を使って   // 起動されているアプリケーションのウィンドウを取得し、   // そのウィンドウを最上位へ持ってくる   CString str;   str.LoadString(IDS_WINDOWTITLE);   // IDS_WINDOWTITLEにはウィンドウのタイトルを設定している   CWnd* pWnd = CWnd::FindWindow(NULL, str);   if( pWnd )   pWnd->SetForegroundWindow();   return FALSE;  }

  • javaプログラムから他のjavaプログラムを操作

    javaのプログラムから他のjavaプログラムを操作するにはどのようにすればいいのでしょうか? 他の方が作った既存のjavaプログラムのウィンドウ内のリストビューの項目を自動的に選択したり、エディットビューの表示文字列をクリップボードにコピーしたいと思っています。 Windowsネイティブプログラムから他のWindowsネイティブプログラムを操作する場合は、FindWindowで親ウィンドウのウィンドウハンドルを取得し、そこからFindWindowExで子ウィンドウのハンドルを取得してサブクラス化するそうですが、javaではどうやるのかが知りたいです。 また、子ウィンドウのハンドルを得るために子ウィンドウを特定するための情報(Windowsネイティブプログラムなら、FindWindowExに引数として渡す「GetClassNameで得られるクラス名」)はどのようにすれば調べられるのでしょうか(EnumChildWindows、GetClassNameなどに該当するメンバ関数はあるのでしょうか)?

    • ベストアンサー
    • Java
  • ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法

    ●やりたいこと ExcelVBAで、APIを実行し、外部ソフトのウィンドウに含まれている エディットテキストを取得して、セルに出力したい 使用する関数・宣言、できればコードを教えていただけませんでしょうか。 イメージはこちらをご参考いただけると幸いです。 ​http://situmon-img.blogspot.com/2008/08/1.html​ 変数hwindowに親ウィンドウのハンドルが取得されています。 エディットボックスのハンドル、IDは分かりません。 エディットボックスのハンドルを取得し、 分かっているクラス・ハンドルの文字列を取得 といった流れになるのではと思っております。 変数にさえ文字列が取得できれば、 当然ですが、Range("B2")=変数 で大丈夫です。 変数は、ひとつを使いまわしで構いません。 変数をエディットテキストの数だけ用意しても構いません。

専門家に質問してみよう