PowerShell

覚え書き

test.ps1
$Win32 = &{

# ========= C#言語によるWin32Api関数定義(ここから) =========
$cscode = @"

[DllImport("user32.dll")]
public static extern int MessageBox(
    IntPtr hWnd,        // オーナーウィンドウのハンドル
    string lpText,      // メッセージボックス内のテキスト
    string lpCaption,   // メッセージボックスのタイトル
    UInt32 uType        // メッセージボックスのスタイル
);

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(
    string lpClassName,  // クラス名
    string lpWindowName  // ウィンドウ名
);

[DllImport("user32.dll")]
public static extern bool SetWindowPos(
    IntPtr hWnd,            // ウィンドウのハンドル
    IntPtr hWndInsertAfter, // 配置順序のハンドル
    int    X,               // 横方向の位置
    int    Y,               // 縦方向の位置
    int    cx,              // 幅
    int    cy,              // 高さ
    UInt32 uFlags           // ウィンドウ位置のオプション
);

[DllImport("user32.dll")]
public static extern IntPtr GetKeyboardLayout(
    int idThread
);

[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow(
);

[DllImport("user32.dll")]
public static extern IntPtr GetActiveWindow(
);

[DllImport("imm32.dll")]
public static extern int ImmSetOpenStatus(
  int hIMC,
  int fOpen
);

[DllImport("imm32.dll")]
public static extern bool ImmReleaseContext(
    IntPtr hWnd,
    int hIMC
);

[DllImport("imm32.dll")]
public static extern bool ImmGetOpenStatus(
    int hIMC
);

[DllImport("imm32.dll")]
public static extern int ImmGetContext (
  IntPtr hWnd
);

[DllImport("imm32.dll")]
public static extern int ImmConfigureIME(
    IntPtr hKL, 
    IntPtr hWnd, 
    int dwMode, 
    IntPtr lpData
);

"@
# ========= C#言語によるWin32Api関数定義(ここまで) =========

    return (add-type -memberDefinition $cscode -name "Win32ApiFunctions" -passthru)
}

$handle = $win32::ImmGetContext($win32::GetForegroundWindow())
$win32::ImmGetOpenStatus($handle)
$status = $win32::ImmSetOpenStatus($handle, 1)
$win32::ImmGetOpenStatus($handle)

$win32::ImmReleaseContext($win32::GetForegroundWindow(), $handle)