Home > C# > 目的別資料 > 他のアプリケーションを操作する プロセス名で指定したアプリケーションのウィンドウハンドルとメインウィンドウタイトルを表示する

プロセス名で指定したアプリケーションのウィンドウハンドルとメインウィンドウタイトルを表示する(C# WPF)

新規作成日 2023-09-14
最終更新日

プロセス名で指定したアプリケーションのウィンドウハンドルとメインウィンドウタイトルを表示するアプリケーションを、C# WPFで作成します。

起動するアプリケーションは、電卓アプリです。

  • プロセス名は: calc1
  • プログラムの場所: C:\\Program Files\\OldClassicCalc\\calc1.exe

プログラムで起動したアプリケーション

プロセス名については、次のリンクを参考にしてください

xaml

<Window x:Class="SerchAppHndle.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="アプリケーションを探してウィンドウハンドルを取得する" Height="200" Width="300">

    <DockPanel>
        <TextBox DockPanel.Dock="Top" Name="tb" Height="30">TextBox</TextBox>
        <ListBox DockPanel.Dock="Bottom" Name="lb" SelectionMode="Single">
            <ListBoxItem />
        </ListBox>
    </DockPanel>
</Window>

xaml.cs

using System.Diagnostics;
using System.Windows;

namespace SerchAppHndle
{
	/// <summary>
	/// MainWindow.xaml の相互作用ロジック
	/// </summary>
	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			InitializeComponent();
			GetTopWindowHandle();
		}

		public void GetTopWindowHandle()
		{
			//ローカルコンピュータ上で実行されているプロセスを名前で取得
			Process[] ps = Process.GetProcessesByName("calc1");

			if (ps != null && ps.Length > 0)
			{
				tb.Text = "起動されている";
			}
			else
			{
				Process.Start("C:\\Program Files\\OldClassicCalc\\calc1.exe");
				tb.Text = "起動した";
				ps = Process.GetProcessesByName("calc1");
			}

			//配列から1つずつ取り出し、ListBoxItemに追加する
			foreach (System.Diagnostics.Process p in ps)
			{
				//IDとメインウィンドウのキャプションをListBoxItemに追加する
				lb.Items.Add(p.Id + "/" + p.MainWindowTitle);
			}
		}
	}
}
電卓アプリケーションを起動されていない状態で、アプリケーションを実行したときの状態

電卓アプリケーションを起動されていない状態で、アプリケーションを実行すると次の画像の状態になります。

電卓アプリケーションが実行されている状態で、アプリケーションを実行したときの状態

電卓アプリケーションが実行されている状態で、アプリケーションを実行すると次の画像の状態になります。

理由はわかりませんが、電卓アプリケーションが実行されていない状態で実行し、プログラム内から電卓アプリケーションを起動すると、ウィンドウハンドルは取得できますが、MainWindowTitleが表示されません。

また、ウィンドウハンドルは、起動するたびに異なる値になります。

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」