あおいるかの倉庫

admin : new / comments / design / analysis

[.NET] Process.MainWindowHandle は ShowInTaskbar が無効だとゼロを返す

自作プログラムの二重起動の防止の際、既に起動しているプロセスのウィンドウをアクティブにさせようとしましたが、Process.MainWindowHandle がどういうわけかゼロ(IntPtr.Zero)を返してしまいます。

調べたところ、Process.MainWindowHandle は、対象のウィンドウの ShowInTaskbar が無効だとゼロを返してしまうようです。結局 FindWindow で同名のウィンドウを探すことにしました。

using System.Runtime.InteropServices;
  :
  :
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool SetForegroundWindow(System.IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

public static bool ActivateExistingProcess() {
  IntPtr hWnd = FindWindow(null, "CommandTwig");
  if (hWnd != IntPtr.Zero) {
    SetForegroundWindow(hWnd);
    return true;
  }
  else
    return false;
}

同名のウィンドウなんて他には無いでしょうけど、クラス名の指定なり、プロセス ID の比較なりしたほうがいいのかもしれません。

Comments

Comment Form

name :       pass :
body :
※ URL は ttp:// で始めてください(スパム対策)      secret     

おすすめタグ


すべてのタグ


最近の記事

RSSRSS

アーカイブ


全ての一覧

検索

プロフィール

プロフィール画像

syego

Gmail twitter ニコニコ動画 pixiv

My Profile by iddy

ついったー

[favorited] [more]

PR

FC2Ad

FC2ブログ

スポンサーニュース
  1. 無料アクセス解析