GetStdHandle

指定した標準デバイス(標準入力、標準出力、または標準エラー)のハンドルを取得する。

GetStdHandle nStdHandle

nStdHandle : [int] 標準デバイス。このパラメータは以下のいずれかの値である。 | 値 | 意味 | |-|-| | **STD_INPUT_HANDLE** `((DWORD)-10)` | 標準入力デバイス。最初は、コンソールの入力バッファ `CONIN$` である。 | | **STD_OUTPUT_HANDLE** `((DWORD)-11)` | 標準出力デバイス。最初は、アクティブなコンソール画面バッファ `CONOUT$` である。 | | **STD_ERROR_HANDLE** `((DWORD)-12)` | 標準エラーデバイス。最初は、アクティブなコンソール画面バッファ `CONOUT$` である。 | > [!NOTE] > これらの定数の値は符号なしの数字だが、ヘッダファイルでは符号付き数字からのキャストとして定義され、C コンパイラがそれらを 32 ビット最大値直下にロールオーバーすることを利用している。これらのハンドルとヘッダを解析しない言語でやり取りし、定数を再定義する場合は、この制約に注意する。例として、`((DWORD)-10)` は実際には符号なしの数字 `4294967286` である。

(プラグイン / モジュール : kernel32.dll)

解説

指定した標準デバイス(標準入力、標準出力、または標準エラー)のハンドルを取得する。

[戻り値]
関数が成功した場合、戻り値は指定したデバイスへのハンドル、または以前の
[**SetStdHandle**](setstdhandle.md)
の呼び出しによって設定されたリダイレクト済みハンドル。アプリケーションが **SetStdHandle**
を使用してより少ないアクセス権で標準ハンドルを設定していない限り、ハンドルは **GENERIC\_READ** および
**GENERIC\_WRITE** アクセス権を持つ。> [!TIP] > 完了時にこのハンドルを
[**CloseHandle**](/windows/win32/api/handleapi/nf-handleapi-closehandle)
で破棄する必要はない。詳細は [**Remarks**](#handle-disposal) を参照。関数が失敗した場合、戻り値は
**INVALID\_HANDLE\_VALUE**。拡張エラー情報を取得するには
[**GetLastError**](/windows/win32/api/errhandlingapi/nf-errhandlingapi-getlasterror)
を呼ぶ。アプリケーションに、対話型デスクトップ上で実行されているサービスのように標準ハンドルが関連付けられておらず、それらをリダイレクトしていない場合、戻り値は
**NULL** となる。

[備考]
**GetStdHandle**
が返すハンドルは、コンソールから読み取りまたは書き込みを行う必要があるアプリケーションで使用できる。コンソールが作成されると、標準入力ハンドルはコンソールの入力バッファへのハンドルとなり、標準出力と標準エラーハンドルはコンソールのアクティブな画面バッファへのハンドルとなる。これらのハンドルは
[**ReadFile**](/windows/win32/api/fileapi/nf-fileapi-readfile) と
[**WriteFile**](/windows/win32/api/fileapi/nf-fileapi-writefile)
関数、またはコンソールの入力バッファや画面バッファにアクセスする任意のコンソール関数(たとえば
[**ReadConsoleInput**](readconsoleinput.md)、[**WriteConsole**](writeconsole.md)、[**GetConsoleScreenBufferInfo**](getconsolescreenbufferinfo.md)
関数)で使用できる。プロセスの標準ハンドルは [**SetStdHandle**](setstdhandle.md)
を呼び出してリダイレクトされる場合があり、その場合 **GetStdHandle**
はリダイレクトされたハンドルを返す。標準ハンドルがリダイレクトされている場合、[**CreateFile**](/windows/win32/api/fileapi/nf-fileapi-createfilea)
関数の呼び出しで `CONIN$` 値を指定してコンソールの入力バッファへのハンドルを取得できる。同様に、`CONOUT$`
値を指定してコンソールのアクティブな画面バッファへのハンドルを取得できる。main
メソッドのエントリ時のプロセスの標準ハンドルは、アプリケーションがビルドされたときにリンカに渡された
[**/SUBSYSTEM**](/cpp/build/reference/subsystem-specify-subsystem)
フラグの構成によって決定される。**/SUBSYSTEM:CONSOLE**
を指定すると、親が継承により標準ハンドルテーブルを既に埋めていない場合、起動時にオペレーティングシステムにコンソールセッションでハンドルを埋めるよう要求する。逆に、**/SUBSYSTEM:WINDOWS**
はアプリケーションがコンソールを必要とせず、おそらく標準ハンドルを使用しないことを意味する。ハンドルの継承の詳細については、[**STARTF\_USESTDHANDLES**](/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa)
のドキュメントを参照。一部のアプリケーションは宣言されたサブシステムの境界外で動作する。たとえば、**/SUBSYSTEM:WINDOWS**
アプリケーションがログまたはデバッグ目的で標準ハンドルをチェック/使用しつつ、グラフィカルユーザーインターフェイスで通常通り動作する場合がある。これらのアプリケーションは起動時に標準ハンドルの状態を慎重に調査し、必要に応じて
[**AttachConsole**](attachconsole.md)、[**AllocConsole**](allocconsole.md)、[**FreeConsole**](freeconsole.md)
を使用してコンソールを追加/削除する必要がある。一部のアプリケーションは、継承されたハンドルの種類によって動作を変える場合もある。コンソール、パイプ、ファイル、その他の種類を曖昧さを排除して判別するには
[**GetFileType**](/windows/win32/api/fileapi/nf-fileapi-getfiletype)
を使用する。

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs