SDK32:コンソール ウィンドウのハンドル取得

文書翻訳 文書翻訳
文書番号: 124103 - 対象製品
この記事は、以前は次の ID で公開されていました: JP124103
すべて展開する | すべて折りたたむ

目次

概要

コンソール アプリケーションに関連付けされたウィンドウの操作は、役立つでしょう。
Win32 API では、コンソール アプリケーションに関連付けされたウィンドウハンドルを取得するための API は供給していません。しかし、FindWindow() をコールすることにより、ウィンドウハンドルは取得可能です。この関数は、クラス名とウィンドウ名に基づいてウィンドウハンドルを検索し、取得します。

現在のコンソール ウィンドウのタイトルを確定するには、GetConsoleTitle() をコールします。次に、FindWindow() にそのタイトルを与えます。

詳細

複数のウィンドウが同じタイトルを持つ可能性があるため、現在のコンソール ウィンドウのタイトルを、ユニークなタイトルへ変更する必要があります。これは、誤ったウィンドウハンドルが戻り値として返されることを防ぎます。現在のコンソール ウィンドウのタイトルを変更するには、SetConsoleTitle() を使用します。以下はその過程です。
  1. 現在のコンソール ウィンドウのタイトルを保存するために GetConsoleTitle() をコールします。
  2. コンソールのタイトルをユニークなタイトルに変更するために SetConsoleTitle() をコールします。
  3. ウィンドウのタイトル変更を確実にするために Sleep(40) をコールします。
  4. HWND 型の値を取得するために、FindWindow(NULL, <ユニークなタイトル>) をコールします。
    関数が成功すれば HWND 型の値が返り、失敗すると NULL が返ります。
  5. 元のウィンドウタイトルへ戻すために、ステップ 1 で保存しておいた値で SetConsoleTitle() をコールします。
取得した HWND の値は、テストしておくべきでしょう。たとえばこの HWND の値を使って、現在のプロセスに対し GetWindowText() をコールしたものと、GetConsoleTitle() をコールした結果とが一致するかどうかを見るなどして、テストすることが可能です。

取得した HWND の値は、すべてのウィンドウハンドルを使用する処理において、適切なものであるとは保証されていません。

サンプル

以下の関数は、現在のコンソール アプリケーションのウィンドウハンドル(HWND)を変更・回復します。関数が成功すると、戻り値としてコンソール ウィンドウのハンドルが返ります。関数が失敗すると NULL が返ります。簡略化のために、エラーチェックなどは省略されています。
   HWND GetConsoleHwnd(void)
   {
    #define MY_BUFSIZE 1024 // コンソール ウィンドウのタイトル用のバッファサイズ
    HWND hwndFound;         // 呼び出し側へ返される値
    char pszNewWindowTitle[MY_BUFSIZE];
                           // 作成されるウィンドウのタイトルが入ります
    char pszOldWindowTitle[MY_BUFSIZE]; // 元のウィンドウタイトルが入ります

    // 現在のウィンドウタイトルを取得します

    GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);

    // 独自に、ウィンドウの新規タイトルをフォーマットします

    wsprintf(pszNewWindowTitle,"%d/%d",
             GetTickCount(),
             GetCurrentProcessId());

    // 現在のウィンドウタイトルを変更します

    SetConsoleTitle(pszNewWindowTitle);

    // ウィンドウタイトルのアップデートを確実なものにさせます

    Sleep(40);

    // ウィンドウの新規タイトルを探しにいきます

    hwndFound=FindWindow(NULL, pszNewWindowTitle);

    // 元のウィンドウタイトルへ戻します

    SetConsoleTitle(pszOldWindowTitle);

    return(hwndFound);
   }

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 124103 (最終更新日 1999-02-09) をもとに作成したものです。

プロパティ

文書番号: 124103 - 最終更新日: 2005年7月11日 - リビジョン: 1.1
この資料は以下の製品について記述したものです。
  • Microsoft Platform SDK January 2000 Edition
キーワード:?
kbcode kbhowto kbntos kbusergrp kbwinos95 kbwinos98 kbwndw KB124103
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com