現在オフラインです。再接続するためにインターネットの接続を待っています

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

この記事は、以前は次の 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 - 最終更新日: 07/11/2005 19:05:52 - リビジョン: 1.1

Microsoft Platform SDK January 2000 Edition

  • kbcode kbhowto kbntos kbusergrp kbwinos95 kbwinos98 kbwndw KB124103
フィードバック
var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("