Ich versuche, einen Button-Befehl zu implementieren, der eine neue WPF-Anwendung startet, wenn der Benutzer zum ersten Mal auf die Schaltfläche klickt und dann (wenn der Benutzer die Schaltfläche erneut klickt) an den Vordergrund sendet. wenn es bereits läuft. Das Ganze läuft auf .Net v4.0
So implementieren Sie einen WPF-Launcher mit SetForegroundWindow
Was ich versucht habe, in Ordnung zu tun, funktioniert, wie erwartet, wenn der gestartete Prozess eine normale WPF-Anwendung ist, aber es ist nicht schön zu spielen, wenn die WPF-Anwendung gestartet hat ein Begrüßungsbildschirm. Das Problem ist, dass SetForegroundWindow
fehlschlägt, da ich das richtige Fensterhandle in diesem bestimmten Fall nicht abrufen kann. Können Sie eine Reparatur oder einen Work-Around vorschlagen? Angenommen, Sie können die Quelle sowohl des Startprogramms als auch des gestarteten WPF ändern.
Der entsprechende Code aus dem View-Modell des Launchers
private void ClaimRptLogic()
{
if (ClaimRptHandle != IntPtr.Zero)
{
ShowWindow(ClaimRptHandle, SW_RESTORE);
LaunchState = SetForegroundWindow(ClaimRptHandle)? "" : "can't set to foreground";
return;
}
Process rpt = new Process();
rpt.StartInfo = new ProcessStartInfo()
{
WorkingDirectory = ConfigurationManager.AppSettings["ClaimRptPath"],
FileName = ConfigurationManager.AppSettings["ClaimRptexe"]
};
rpt.Start();
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += new DoWorkEventHandler((o, e) => {
rpt.WaitForExit();
});
bg.RunWorkerCompleted += new RunWorkerCompletedEventHandler((o, e) => {
ClaimRptHandle = IntPtr.Zero;
LaunchState = "ClaimRpt closed";
});
bg.RunWorkerAsync();
Thread.Sleep(3000);
ClaimRptHandle = rpt.MainWindowHandle;
}
Ich habe Ihren Code nicht versucht, aber es gibt etwas schon da draußen zu suchen nach https: // m sdn.microsoft.com/en-us/library/cc656886(v=vs.110).aspx – AnjumSKhan
@AnjumSKhan "* Ich habe deinen Code nicht versucht *" Du hast wirklich gezeigt, dass du nicht gelesen hast und du nicht verstehe meine Frage. Der ** gestartete ** wpf hat bereits einen Begrüßungsbildschirm. –
Ich habe diesen Link gepostet, da er Ihnen etwas mitteilen könnte, was Ihnen vielleicht fehlt. – AnjumSKhan