C++で別ウィンドウのアプリケーションを動かすというものを作っているのですが、そのウィンドウの子ウィンドウのハンドルを取得するのに困ったことがあるのでアドバイスをいただけると大変ありがたいです。

基本的にSPY++というソフトを使ってウィンドウ名その他を探し、FindWindowExまたはGetDlgItem関数を使って取得という方法をとっているのですが、クラス名、ウィンドウ名が全く同じもので、コントロールIDも0という状態のものがあり、片方を取得したい場合どうしたらよいのかという状態です。

知人にSPY++でみて上から何番目にあるやつと指定して得ることができる方法があるかもしれないと聞いたのですが、よくわかりません。

例としてその画像ものせますので、良い知恵がありましたらお貸しください。

※添付画像が削除されました。

A 回答 (1件)

FindeWindowExの二番目の引数を使えば次のウィンドウをとれます。



HWND hFirstWnd = ::FindWindowEx(hParentWnd, NULL, TEXT(""), TEXT(""));
if (hFirstWnd != NULL) {
HWND hSecondWnd = ::FindWindowEx(hParentWnd, hFirstWnd, TEXT(""), TEXT(""));
}

http://msdn.microsoft.com/ja-jp/library/cc410853 …
のhwndChildAfterのところを参照。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフィルハンドルの意味

Excelの初心者です。
フィルハンドル(Fill Handle)という用語が、どういうものかはわかりますが、言葉の意味が、あの動作にどうつながるのか、そこのところがよくわかりません。
空白のセルを埋めていくのに使う把手ぐらいの意味でしょうか。
教えて下さい。よろしくお願いします。

Aベストアンサー

こんばんは。

>Excelの初心者です。
というのはご謙遜なのだとは思いますが、「フィルハンドル」の用語については、私も、考えたことがあります。

カテゴリが違う回答かもしれませんが、私は、最初、fill ではなくて、角だったので、"fin" だと思い込んでいました。私のつたない英語力では、"fill" という名詞の意味は、その物自体だったり、「十分」という意味しか思いつきませんから、固有名詞と解釈しないと意味が分かりません。"fill" という単語は、動詞は、動的な意味を持ちますが、名詞になると、そういうニューアンスがないような気がします。
ちなみに、その機能自体は、Auto-fill といいますね。

the small black square in the bottom right of the active cell. (More than Excel 2002 ?)

>言葉の意味が、あの動作にどうつながるのか、そこのところがよくわかりません。
同感です。私なら、"fin" とか、"hook" ですね。

英語でも、Office を知らない人には、通じないと思います。それに、英語では、その行為自体を、drag copy とか言うように思います。

たぶん、Microsoft か、誰か個人的な命名ぐらいとしか思えませんでした。例えば、これを考えた人の名前(Phil)にちなんで付けたとか。それにしても、Microsoftには、彼らの英文の説明には、造語が多いような気がします。以前は、日本独自に、業界内で統一していたはずですね。それに、おそらくは、この用語を言っているのは、英米とアジア圏ぐらいだけだと思います。

こんばんは。

>Excelの初心者です。
というのはご謙遜なのだとは思いますが、「フィルハンドル」の用語については、私も、考えたことがあります。

カテゴリが違う回答かもしれませんが、私は、最初、fill ではなくて、角だったので、"fin" だと思い込んでいました。私のつたない英語力では、"fill" という名詞の意味は、その物自体だったり、「十分」という意味しか思いつきませんから、固有名詞と解釈しないと意味が分かりません。"fill" という単語は、動詞は、動的な意味を持ちますが、名詞になると、そ...続きを読む

QC# ウィンドウハンドルの取得

取得したいウィンドウハンドルをAとします。

UI Spyで調べたところ、IdentificationのClassNameがAと同じものが複数ありました。
このような場合はどのようにしてAのウィンドウハンドルを求めればよいのでしょうか。

Aベストアンサー

API の GetWindow を使用すると良いと思います。
http://msdn.microsoft.com/ja-jp/library/cc364757.aspx

ウィンドウの親子関係や兄弟関係を見るなら UI Spy よりも Spy++ の方が見やすいと思います。
http://www.atmarkit.co.jp/fdotnet/dotnettips/605managedspy/managedspy.html

Spy++ は Windows SDK に入っているらしいです。
http://social.msdn.microsoft.com/forums/ja-JP/vcexpressja/thread/bbf83e96-def0-4445-8b08-681f246819da/

Qドロップハンドル&ホリゾンタルフレームのロード系ミニベロの意味

ちょっとした疑問なのですが・・・。

例えばGIOSのFELUCAやビアンキのMinivelo 9D、ブルーノのMinivelo20ロードといったドロップハンドル&ホリゾンタルフレームのロード系ミニベロの意味というか、存在意義というか・・・そういったのって何なんでしょうか?
同じロード系なら絶対的な速度等で本式のロードバイクやシクロクロス車には適わないでしょうし、輪行しようにも元のフレームが大きいのでどんなに頑張っても普通のミニベロのようにはコンパクトに収まらない(それこそ、ロードを輪行するのと変わらない)。
洒落っ気というか、ある意味”パロディ”的な面白さがあるのは分かるのですが、何もミニベロの利点(コンパクトさ、取り回しのしやすさ等)を犠牲にしてまでドロップハンドル&ホリゾンタルフレームにする意味があるんだろうかと、素直に疑問に思ってしまいます。

この種のミニベロの存在意義って何なんでしょうか(趣味的な話は置いておいて)。

Aベストアンサー

自転車好きの老人ですがミニベロの特性について一言…
子供用自転車の特性はご存じでしょうか。子供用自転車は大人用自転車の小型版です。しかし、自転車に乗り始めた子供が乗るための最良の特性を持っています。小径車の特性は次のような物です。
(1)極めて弱い力でこぐことができる。
(2)極めて低速でも転ばない。
(3)小回りがきく。

この特性が必要な人は何も子供だけとは限りません。
子供用自転車と一緒にサイクリングしてみてください。あまりにもスピードが遅く大径車での伴走は極めて難しいものです。私はそんな際に祖母用のミニベロを使用していました。子供が子供用自転車を卒業しましたら、二台目の自転車にはミニベロは最適かと思います。

人は老いると子供以下に運動能力は落ちてきます。現在はアシスト自転車がありますが、運動といったことから考えたらミニベロの方がよいのではと思います。サイクリングロードで小さな坂を必死になって登っているロード乗りの老人を見ますと内心「もうお年なのだから、ミニベロロードになさったらいかがですか。ミニベロなら坂も簡単に登れますよ。」と思ってしまいます。事実70代や80代の老人の間ではミニベロロードは坂も登れるし、風にも対応できると人気があるのですよ。

街乗り用としても最適なものです。自転車の交通に関しましては、各都道府県の細則で定められています。私の県では歩道がある道路では原則自転車は歩道を走ることになっています。しかし、すべての道路に歩道があるわけではありませんから、そのような環境ではミニベロは価値あるものになります。

現在は若者のオシャレなのでしょうね。

自転車好きの老人ですがミニベロの特性について一言…
子供用自転車の特性はご存じでしょうか。子供用自転車は大人用自転車の小型版です。しかし、自転車に乗り始めた子供が乗るための最良の特性を持っています。小径車の特性は次のような物です。
(1)極めて弱い力でこぐことができる。
(2)極めて低速でも転ばない。
(3)小回りがきく。

この特性が必要な人は何も子供だけとは限りません。
子供用自転車と一緒にサイクリングしてみてください。あまりにもスピードが遅く大径車での伴走は極めて難しいもので...続きを読む

Q.net frameworkで作られたフォームのウィンドウハンドルとインスタンスハンドルの取得方法

このたびC++で.net frameworkを使い、アプリケーションを製作しているのですが、フォームのウィンドウハンドルと、アプリケーションのインスタンスハンドルの取得方法が分からなくて困っています。取得する方法はあるのでしょうか?
回答をお待ちしています。どなたかおねがいしますm(_ _)m

Aベストアンサー

ソースのどこかに
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
って箇所あるでしょう?
hInstanceがインスタンスハンドルです。

Form1というフォームからハンドルをとりたいのなら
Form1 *pForm1 = new Form1();
HWND hWnd = (HWND)pForm1->Handle.ToInt32();
※Form1 内部ならpForm1->を省略してください

HWND からHINSTANCEをとることも可能です。
HINSTANCE hInst = (HINSTANCE)::GetWindowLong( hWnd, GWL_HINSTANCE);

Q左ハンドル車に乗る意味は?

以前BMWの左ハンドルを少しだけ(町内一周程度で夜間、雨)運転しましたが何のメリットも感じませんでした。
以前なら輸入車の右ハンドル車はペダルレイアウトが窮屈で嫌う方が居ると聞きましたが、最近の外国車は右ハンドルも考慮してエンジン内部がレイアウトされ改善されてると聞きます。
今乗っているB6アウディは右ですが何の違和感無く国産車から乗り換え出来ました。
金が貯まったらまたアウディかBMW買うつもりですが左か右かで迷うのですが?・・・
左に乗る人は見えで乗ってるのと思うときもあるので宜しくお願いします。

Aベストアンサー

乗っているのは主に左が多いです。

左のメリット
・路側の状況が分るので、歩行者、自転車の発見が早い
・狭い道で左側ギリギリに寄るのが簡単
・特にMINIやワーゲンタイプ1などの場合アクセルペダルの位置が右足を伸ばした位置にあるので疲れない。
・道を尋ねやすい。
・自販機で直ぐに買い物が出来る。
・私の場合毎朝車で北に向かい、帰りは南なので横から日光が入らない(実はこれを一番重視している)

左のデメリット
・追い越しがし辛い
・左ハンドル未対応のゲート
・左ブラインドコーナーが怖い

特に不便を感じません。慣れればなんてことないですが、たまに右ハンドルに乗るといつもドアを間違えそうになったり、ウインカーのつもりでワイパー動かしたりします (^_^;

QVisualC++におけるメインウィンドウの領域に子ウィンドウを配置する際に発生する問題

メインウインドウの領域に子ウインドウを作成し、その子ウインドウの領域にオブジェクトを表示しようとしています。

そこで、子ウインドのプロシージャに描画するソースを書いているのですが、子ウインドウの描画領域には何も表示されず、親ウインドウの描画領域に表示されてしまいます。

どうすれば子ウインドウの領域に描画することができるのでしょうか?

説明の至らない点もあると思いますが、わかる方いらっしゃいましたら宜しくお願い致します。

Aベストアンサー

描画コードでデバイスコンテキストを使っているはずですが、親ウィンドウ用のデバイスコンテキストを使っているのではないでしょうか?
MFCなどのフレームワークを使っていないなら、CreateCompatibleDC()などのAPIで子ウィンドウ用のデバイスコンテキストを作らないといけません。

描画コードをさらせば、もっと的確な回答を得られると思いますよ。

QWindows のハンドル(HANDLE)

 すみません、教えて欲しいのですが、Windows でのハンドル(HANDLE)って何でしょうか?

 マック(Macintosh)だと(たぶん)ポインタのポインタが実態です。
(メモリのガベージコレクトの為に利用されています)。
 メモリーヒープへのポインタだと思います。

 Windows でのプラットフォームで開発されている方は、どう解釈されているのでしょうか?
 Windows の世界では、どう解釈されているか、今ひとつ分かりません。
 よろしくお願いします。

Aベストアンサー

UNIXのファイルディスクリプタと同じで単なる管理番号に過ぎませんよ。UNIXみたく0がstdinとかのルールは無いようですけど。
初期の実装ではカーネルアドレス空間でデバイス管理領域へのポインタになっているとか聞いたこともありますけど、これはセキュリティ上の観点から修正されているはずです。

実際No.1さんの仰るとおり、ハンドルの実体を考えることに意味はありません。仕様として明示されている以外の部分はOSのバージョンが変わるときにどう変わるか分かりませんし、それで動かなくなるようなコードを書いても価値がありませんから。

QC++とC#を使ったアプリケーション作成

アプリケーションと言って良いのかは微妙なのですが、アプリケーションを作ることになりました。
既存のいくつかのプログラムを1つにまとめて、GUIで操作できるようにするのが最終目的です。

もとのプログラムはC++で書かれています。
今回は、GUIの部分を
「Microsoft Expression Blend 2」でデザインしようと考えているのですが、
GUIの部分をC#で作成し、メインの処理をC++で書くことは可能なのでしょうか?
それとも、メインの処理をC#で書き直すことが必要でしょうか?

知恵を貸してください。
よろしくお願いします!!

Aベストアンサー

> メインの処理をC++で書くことは可能なのでしょうか?

C++/CLI使えばC#/VBとすんなり繋がります。

Q異なるプロセス間でのイベントハンドルの共有

異なるプロセス間でのイベントハンドルの共有

WIN32 APIのDuplicateHandleを用いて、異なるプロセス間でのイベントハンドルを共有したいのですが、うまく動作しません。(1)~(3)にプログラムの詳細を示します。

(1) プロセスAで「本物」のプロセスハンドルを取得
  DuplicateHandle(
    GetCurrentProcess(),    
    GetCurrentProcess(),    // 疑似ハンドル
    GetCurrentProcess(),
    &RealProcessHandle,     // 本物のハンドル
    0,
    FALSE,
    DUPLICATE_SAME_ACCESS
  );

(2) プロセスAでイベントを作成
  hEvent = CreateEvent( NULL, FALSE, FALSE, NULL );

(3) プロセスBでイベントハンドルを複製
  DuplicateHandle(
    RealProcessHandle,     // プロセスAが(1)で取得した本物のハンドル
    hEvent,           // プロセスAが(2)で取得したイベントハンドル
    GetCurrentProcess(),
    &hNewEvent,         // プロセスBで利用するためのイベントハンドル
    0,
    FALSE,
    DUPLICATE_SAME_ACCESS
  );

上記のプログラムを実行すると、(1)と(2)は成功するものの、(3)の時点でエラーになり、
GetLastErrorでは6(ハンドルの異常)が表示されます。
プログラムのどこが悪いのでしょうか?

尚、OpenEventによるイベントハンドル共有は、
イベントに名前をつけなくてはならない問題があり、利用しない方針です。

異なるプロセス間でのイベントハンドルの共有

WIN32 APIのDuplicateHandleを用いて、異なるプロセス間でのイベントハンドルを共有したいのですが、うまく動作しません。(1)~(3)にプログラムの詳細を示します。

(1) プロセスAで「本物」のプロセスハンドルを取得
  DuplicateHandle(
    GetCurrentProcess(),    
    GetCurrentProcess(),    // 疑似ハンドル
    GetCurrentProcess(),
    &RealProcessHandle,     // 本物のハンドル
    0,
    FALSE,
    DU...続きを読む

Aベストアンサー

作成元のプロセスおよび、作成したハンドルに対して
適切なアクセス権を与えていますか?
特にPROCESS_DUP_HANDLEは、NT/2000以降では必須です。

また、関数に指定するハンドルが間違っているような気がします。
第1引数は”プロセスのハンドル”であり、第4引数は”複製する対象のハンドル”です。
提示されたソースではどちらが正しいのかわかりませんが、
もう一度、MSDNを確認し関数仕様を確認された方が良いように思います。
>&RealProcessHandle,     // 本物のハンドル
>RealProcessHandle,     // プロセスAが(1)で取得した本物のハンドル


なお、異なるプロセス間では、名前付き以外で共有する場合、
共有メモリや名前付きパイプなどを使用しなければならないパターンもあり
端から名前付きイベントを作成した方が安全な場合もあるので、
本当に名前付きイベントではダメなのか、再考するほうが良いかも知れません。

参考URL:http://msdn.microsoft.com/en-us/library/ms724251(VS.85).aspx

作成元のプロセスおよび、作成したハンドルに対して
適切なアクセス権を与えていますか?
特にPROCESS_DUP_HANDLEは、NT/2000以降では必須です。

また、関数に指定するハンドルが間違っているような気がします。
第1引数は”プロセスのハンドル”であり、第4引数は”複製する対象のハンドル”です。
提示されたソースではどちらが正しいのかわかりませんが、
もう一度、MSDNを確認し関数仕様を確認された方が良いように思います。
>&RealProcessHandle,     // 本物のハンドル
>RealProcessHandle,     // プ...続きを読む

Q現在、Ubuntu上で動くGUIアプリケーションをCもしくはC++で作

現在、Ubuntu上で動くGUIアプリケーションをCもしくはC++で作成したいと考えています。
そこでwindows上ではwindows.hといったようにOS依存のライブラリがあると思うのですが
Ubuntuではどのようなライブラリを用いるのが良いでしょうか。

Aベストアンサー

GUIライブラリならGTK+やQTなど
見た目に関してだけど
GNOMEを使っているならGTK+の方が良いでしょうし
KDEを使っているならQTの方が良いでしょう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング