新規作成日 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が表示されません。
また、ウィンドウハンドルは、起動するたびに異なる値になります。