目次 - API(機能別) - ディスプレイとウィンドウ - SDL_GetWindowWMInfo

# SDL_GetWindowWMInfo

ウィンドウのドライバ固有の情報を得る

## 構文

`SDL_bool SDL_GetWindowWMInfo(SDL_Window* window, SDL_SysWMinfo* info)`

## 引数

window | 情報を求めるウィンドウ
info | ウィンドウの情報を書き込むSDL_SysWMinfoのポインタ

## 戻り値

この関数が実装されていて, かつinfo構造体のバージョンが正しければSDL_TRUE, 情報が得られなければSDL_FALSEを戻す. SDL_GetError()を呼んで詳細を知ることができる.

## サンプルコード

``

    #include "SDL.h"
    #include "SDL_syswm.h"

    int main(int argc, char *argv[]) {
      SDL_Window* window;
      SDL_SysWMinfo info;

      SDL_Init(0);

      window = SDL_CreateWindow("", 0, 0, 0, 0, SDL_WINDOW_HIDDEN);

      SDL_VERSION(&info.version); /* info構造体をSDLのバージョンで初期化する */

      if(SDL_GetWindowWMInfo(window,&info)) { /* この関数は成功のとき真を戻す */
        /* 成功 */
        const char *subsystem = "不明なシステム!";
        switch(info.subsystem) {
          case SDL_SYSWM_UNKNOWN:   break;
          case SDL_SYSWM_WINDOWS:   subsystem = "Microsoft Windows(TM)";  break;
          case SDL_SYSWM_X11:       subsystem = "X Window System";        break;
    #if SDL_VERSION_ATLEAST(2, 0, 3)
          case SDL_SYSWM_WINRT:     subsystem = "WinRT";                  break;
    #endif
          case SDL_SYSWM_DIRECTFB:  subsystem = "DirectFB";               break;
          case SDL_SYSWM_COCOA:     subsystem = "Apple OS X";             break;
          case SDL_SYSWM_UIKIT:     subsystem = "UIKit";                  break;
    #if SDL_VERSION_ATLEAST(2, 0, 2)
          case SDL_SYSWM_WAYLAND:   subsystem = "Wayland";                break;
          case SDL_SYSWM_MIR:       subsystem = "Mir";                    break;
    #endif
    #if SDL_VERSION_ATLEAST(2, 0, 4)
          case SDL_SYSWM_ANDROID:   subsystem = "Android";                break;
    #endif
    #if SDL_VERSION_ATLEAST(2, 0, 5)
          case SDL_SYSWM_VIVANTE:   subsystem = "Vivante";                break;
    #endif
        }

        SDL_Log("このプログラムは SDL バージョン %d.%d.%d の %s で動作している",
            (int)info.version.major,
            (int)info.version.minor,
            (int)info.version.patch,
            subsystem);
      } else {
        /* 呼び出し失敗 */
        SDL_LogError(SDL_LOG_CATEGORY_ERROR, "ウィンドウの情報を得られなかった: %s", SDL_GetError());
      }

      SDL_DestroyWindow(window);
      SDL_Quit();

      return 0;
    }

## 詳細

SDL_SysWMinfoを定義するためSDL_syswm.hをインクルードする必要がある.

呼び出し側はinfo構造体のバージョンを `SDL_version(&info.version)` を使って初期化している必要がある. するとこの関数は構造体の残りの部分に指定のウィンドウの情報を書き込む.

## バージョン

SDL 2.0.0以降

## SDL Wikiへのリンク

SDL_GetWindowWMInfo - SDL Wiki