情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

C#でクリップボードが別のアプリケーションによって開かれている場合にメッセージを表示する

GetOpenClipboardWindowGetWindowThreadProcessIdを使ってクリップボードを開いているアプリケーションのファイル名を取得します。

[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr GetOpenClipboardWindow();

[DllImport("user32.dll", SetLastError = true)]
private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

private void bCpyIntoClipboard_Click(object sender, RoutedEventArgs e)
{
    try
    {
        Clipboard.SetText(tFirstNodeInfo.Text);
    }
    catch (ExternalException)
    {
        IntPtr hWnd = GetOpenClipboardWindow();
        if (IntPtr.Zero != hWnd)
        {
            uint pid = 0;
            uint tid = GetWindowThreadProcessId(hWnd, out pid);
            MessageBox.Show("クリップボードを開けませんでした。以下のプログラムが使用中です:" + Environment.NewLine + Process.GetProcessById((int)pid).Modules[0].FileName);
        }
    }
}
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-C#