none
Wechseln in Desktop Modus Windows 8 RRS feed

  • Frage

  • Ich habe das Problem, dass ich auf Windows 8 eine Store App geöffnet habe. 

    Ein anderes .NET Programm läuft jedoch auf dem Desktop und verarbeitet Daten. Sollte dieses Programm fertig sein, will ich unabhängig in welcher App ich mich befinde zurück in die Desktopansicht wechseln.

    Meine Versuche bisher:

    User32.dll: 

    1. FindWindow ("Shell_TrayWnd") und auf dieses dann den Fokus setzten (SetForegroundWindow). Blieb leider erfolglos. Funktioniert nur (hin und wieder) wenn parallel dazu das VS offen ist.

    2. PressKeys (SendInput usw.) Windows Taste + D. Leider erfolglos. Sobald ich in einer App bin funktioniert diese Methode wohl nicht mehr.

    3. Ähnlich wie PressKeys nur eben mit "keybd_event" und Windows + D. Leider genauso erfolglos.

    Hat jemand eine gute Idee wie ich das noch anders ausprobieren kann. Im Prinzip will ich nichts komplexes, nur eine triviale Funktion, die EGAL wo ich mich befinde (ob in einer app oder auf dem Desktop selbst) den Desktop anzeigen soll. Getriggert durch eine ganz normale .NET 4.5 Forms Anwendung.

    Vielen Dank schon mal!


    Windows, SharePoint, jQuery, knockout.js, etc. - All known technologies, but please mark posts as answered where appropriate ;)

    Donnerstag, 25. April 2013 13:01

Alle Antworten

  • Hallo, ich habe das eben mal getestet und folgender Code funktioniert:
            private void button1_Click(object sender, EventArgs e)
            {
                Thread.Sleep(2000);
                SetForegroundWindow(this.Handle);
            }
    
            // For Windows Mobile, replace user32.dll with coredll.dll
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            static extern bool SetForegroundWindow(IntPtr hWnd);
    Ich klickte auf den Button und wechselte Schnell in eine App und der Desktop erschien nach den 2 Sekunden. Problematisch wird es bei mehreren Monitoren wenn ich auf dem 1. das Fenster liegen habe und auf dem 2. eine App benutze, dann hohlt sich die Anwendung zwar in den Vordergrund aber die App bleibt sichtbar.

    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    Donnerstag, 25. April 2013 15:10
    Moderator
  • Danke erstmal für die Antwort. Dieser Code funktioniert auch. Mit einer Ausnahme: Ist das Visual Studio geschlossen und die Exe (Forms Application) wird direkt aufgerufen, tut sich gar nichts :(. Fehlen mir hier Referenzen, lädt das VS zusätzliche dlls, muss ich noch irgend etwas beim Bauen beachten?

    Windows, SharePoint, jQuery, knockout.js, etc. - All known technologies, but please mark posts as answered where appropriate ;)

    Freitag, 26. April 2013 06:21
  • Du hast recht, im normalen Modus gehts nicht. Ich habe jetzt noch weiter getestet und nichts gefunden was immer funktionierte. Unter Anderem:

    this.BringToFront();
    this.Activate();
    this.Focus();
    this.Show();
    this.BringToFront();

    Zusätzlich noch das Zuweisen der TopMost-Eigenschaft und der WindowState-Eigenschaft. Außerdem diverse Versuche mit SwitchToThisWindow und ShowWindow außerdem mit dem eventuellen Minimierungsaktionen von Fenstern, wenn die Form nicht die oberste ist. Das Problem dabei, die Apps die "Minimiert" wurden, starten dann bis einem neuen Login nicht mehr. Beim Homescreen ist mir sogar der PC hängen geblieben...

    Was mir gerade noch auffällt, es scheint besonders Probleme zu geben, wenn die App den Fokus speziell auf ein Control setzt. Nutzen tut uns das leider auch nicht viel.

    Vielleicht gibt es noch einen Alternativweg um dem Nutzer zu vermitteln, das das Programm Fertig ist. Beipielsweise einen Ton abspielen o.ä.

    Ansonsten gehen ir auch die Ideen aus.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    Freitag, 26. April 2013 18:52
    Moderator
  • Vielleicht gibt es noch einen Alternativweg um dem Nutzer zu vermitteln, das das Programm Fertig ist. Beipielsweise einen Ton abspielen o.ä.

    Danke erstmal für deine Mühe.

    Ich habe es schon mit einem Toast ausprobiert, leider hilft mir das in diesem speziellen Problem nichts. Da es in meinem Fall so laufen soll:

    User klickt in einer App ein Icon (z.B. Word) die App kommuniziert das zu einer Windows Forms Anwendung, diese startet dann Word, da ich aus einer App heraus ja leider nicht direkt ein anderes Programm öffnen kann.


    Windows, SharePoint, jQuery, knockout.js, etc. - All known technologies, but please mark posts as answered where appropriate ;)

    Montag, 29. April 2013 05:59