Привязка прцесса с проводником к Exited событию
Делаю программу "Операционная система", возник с проблеммой при открытии проводника через программу - проводник открывается, но он во-первых не привязывается к окну программы (как это работало с .exe файлами - они существовали только в окне программы,закрыть их можно было только в программе, стиль программы менялся, становился подобным 7-й винде. Проводник такого не делал), а во-вторых при открытии сразу срабатывает событие Exited. Файлы с разширением .exe нормально открываются и подвязываются к окну. Вот сам код:
private void MainWindow_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
CurrentDir = @"C:\Users\" + Environment.UserName + @"\Desktop\";
try
{
Topmost = false;
var proc = System.Diagnostics.Process.Start("explorer",System.IO.Path.Combine(CurrentDir, (sender as Button).ToolTip.ToString()));
if (proc.WaitForInputIdle(Convert.ToInt32(TimeSpan.FromSeconds(30).TotalMilliseconds)))
{
//Здесь тоже может понадобиться ожидание
proc.EnableRaisingEvents = true;
proc.Exited += Proc_Exited;
IntPtr handle = new WindowInteropHelper(this).Handle;
SetParent(proc.Handle, handle);
Topmost = false;
Button button = new Button();
button.Height = 66;
button.Width = 99;
int i = Wrap1.Children.Count;
Wrap1.Children.Add(button);
(Wrap1.Children[i] as Button).Style = this.FindResource("GlassButton") as Style;
(Wrap1.Children[i] as Button).ToolTip = (sender as Button).ToolTip;
BitmapImage bit = new BitmapImage();
bit.BeginInit();
Uri u = new Uri(@"workspace\" + System.IO.Path.GetFileNameWithoutExtension((sender as Button).ToolTip.ToString()) + ".jpg", UriKind.RelativeOrAbsolute);
bit.UriSource = u;
bit.EndInit();
ImageBrush image = new ImageBrush();
image.ImageSource = bit;
(Wrap1.Children[i] as Button).Background = image;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void Proc_Exited(object sender, EventArgs e)
{
try
{
MessageBox.Show("!");
Application.Current.Dispatcher.Invoke(() =>
{
Wrap1.Children.RemoveAt(1);
});
}
catch(Exception ex) { }
}