C# で ウィンドウハンドル を 取得する 方法

0 件のコメント

現在実行中プロセス の ウィンドウハンドル を 取得する 方法 の サンプルコード。

VSTO (Visual Studio Tools for Office) で リボン を作成して、子ウィンドウを Form で作成したはいいが…親ウィンドウの後ろに隠れてしまう問題が発生。 Form で Show するときに、親ウィンドウのハンドルを子ウィンドウに渡せば後ろへ行かなくなるようだったので、 ここではそのサンプルコードを記載します。

namespace AddIn
{
    using AddIn.Dialog;
    using Microsoft.Office.Tools.Ribbon;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    public partial class Ribbon
    {
        private void Ribbon_Load(object sender, RibbonUIEventArgs e)
        {

        }

        private void SearchSplitButton_Click(object sender, RibbonControlEventArgs e)
        {
            this.OpenSearchReplaceWindow();
        }

        private void OpenSearchReplaceWindow()
        {
            // Windowsフォームのインスタンスを作成
            var dialog = new SearchReplaceWindow();

            // Excelのウィンドウハンドルを取得
            var handle = Process.GetCurrentProcess().MainWindowHandle;
            var owner = Control.FromHandle(handle);

            // オーナーを指定してダイアログの表示
            dialog.Show(owner);
        }
    }
}

ウィンドウハンドルの取得自体は以下のコードでできます。

var handle = Process.GetCurrentProcess().MainWindowHandle;

このままでは Form.Show の引数に渡せないので、以下のコードで変換します。

var owner = Control.FromHandle(handle);

たった 2行 のコードですが…これの方法を見つけるのに少し時間を使ってしまいました。。 この記事がだれかの役に立てばと思います!