Autor Beitrag
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Do 27.06.13 10:53 
Moin,

ich habe hier ein Spiel namens Anno1602, das ich ganz gerne spiele, allerdings kommt das nicht mit dem neuen Windows-Explorer klar, was einen ziemlich hässlichen Grafik-Bug hervor ruft.

Es gibt eine denkbar einfache Lösung: Explorer beenden und dann das Spiel starten.

Da ich aber zu faul bin, das immer manuell zu machen und Batch nicht ohne geöffnete Konsole geht, wollte ich eine kleine c#-Anwendung schreiben, die den Explorer kill, das Spiel startet, wartet, bis es beendet wurde und dann den Explorer wieder startet.

So kille ich den Explorer:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
ProcessStartInfo pinfo = new ProcessStartInfo();
pinfo.WindowStyle = ProcessWindowStyle.Hidden;
pinfo.FileName = "cmd.exe";
pinfo.Arguments = "/c taskkill /f /im explorer.exe";
Process.Start(pinfo);


Aber wie kriege ich den wieder gestartet?
In der Konsole reicht der command "start explorer.exe", wenn ich das aber wie beim Killen mache und "start explorer.exe" als parameter angebe, öffnet sich nur ein Ordner, die Taskleiste bleibt aber weiterhin verborgen.

Ich hab es auch versucht, eine Batch-Datei zu schreiben und von einem Prozess ausführen zu lassen, doch das hat den gleichen Effekt.

Was mich also wundert ist folgendes:

Ich habe eine Batch-Datei mit folgendem Inhalt:
ausblenden Quelltext
1:
start explorer.exe					

Starte ich sie normal mit Doppelklick, dann wird der Explorer wie gewollt gestartet (Ordner lassen sich ja öffnen, daher habe ich Zugriff), starte ich die batch-Datei aber via Process.Start(name), dann wird nur ein einzelner Ordner angezeigt und die Taskleiste bleibt geschlossen.


Hat jemand ne Idee, wie ich das Problem umgehen kann?
Eine Andere Möglichkeit, als den Explorer zu schließen, gibt es leider nicht und ich würde das ganz gerne automatisch machen lassen.


Gruß
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Do 27.06.13 11:42 
Moin! Quick and Dirty ist das eine Möglichkeit;
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
using System;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        public const int WM_QUIT = 0x12;

        // We need some APIs
        [DllImport("user32.dll")]
        public static extern int FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);

        static void Main(string[] args)
        {
            // Get the window handle and kill explorer.exe
            Console.WriteLine("Killing explorer.exe");
            int hwnd;
            hwnd = FindWindow("Progman"null);
            PostMessage(hwnd, WM_QUIT, 00);

            // Start another program
            Console.WriteLine("Starting another Program");
            /* Start your program here */
            System.Threading.Thread.Sleep(500);

            // Create a new process explorer.exe using ShellExecute
            Console.WriteLine("Restarting explorer.exe");
            string explorer = string.Format("{0}\\{1}", Environment.GetEnvironmentVariable("WINDIR"), "explorer.exe");
            Process process = new Process();
            process.StartInfo.FileName = explorer;
            process.StartInfo.UseShellExecute = true;
            process.Start();

            Console.ReadLine();
        }
    }
}

Schöne Grüße
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Do 27.06.13 11:55 
Diese Zeile hats gepackt:

ausblenden C#-Quelltext
1:
string.Format("{0}\\{1}", Environment.GetEnvironmentVariable("WINDIR"), "explorer.exe")					


Hätte nicht gedacht, dass der volle Pfad so viel aus macht, da er die explorer.exe ja trotzdem gefunden hat ...


Aber der Rest von deinem Code ist auch besser, da muss ich nicht die dämliche Konsole verwenden, danke dafür ^^


Und jetzt funktioniert auch alles bestens, zumindest alles, was ich korrigieren kann.
Das Spiel macht noch Zicken auf Win7, aber das krieg ich hin, gibt ja genug Hilfe im Internet und min. 10k Leute, die das Thema schon einmal geöffnet haben :D
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Do 27.06.13 19:40 
wenn du dein Programm fertig hast, wär es sehr toll wenn du es hochladen könntest, würd mich sehr drüber freuen ;)

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Do 27.06.13 20:47 
Naja, Hoch laden wär ein bisschen sinnlos, ist ja nur die Main-Methode und fast komplett nur der Code von Marc :D

An Stelle von Sleep habe ich dann einfach das geschrieben:

ausblenden C#-Quelltext
1:
Process.Start("1602.exe").WaitForExit();					


Man könnte natürlich auch den Pfad der exe suchen lassen, oder Standardmäßig angeben, änderbar durch eine Datei in Appdata.

Ich hab noch vor, die Ordner nach dem Neustart des Explorers alle wieder zu öffnen, möglichst so, wie vorher, nur weiß ich noch nicht, wie.
Auch hatte ich vor, mal zu versuchen, die Hardware-Beschleunigung automatisch zu steuern, da gibt es ja auch schon einen kleinen Launcher, der das kann, allerdings funktioniert das alles nicht bei mir, da mein Grafik-Treiber das nicht zu lässt.
Nach einer Lösung such ich noch

Und bis ich keine Lösung dafür habe, kann ich auch kein Anno spielen, das stürzt nach rund 3 Minuten wieder ab :(
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Do 27.06.13 21:07 
Nachtrag: Statt der C#-Konsolenanwendung hätte übrigens eine Batchdatei auch genügt:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
@echo off
taskkill /f /IM explorer.exe
cd "C:\ANNO 1602 K?nigs-Edition\"
Start 1602.exe
timeout /T -1
Start explorer.exe

Aber da das auch nur dieses eine Symptom mit dem Grafikfehlern behebt und es scheinbar keine vernünftige Lösung dafür gibt, bleibt wohl vermutlich nur das Spiel in einer virtuellen Maschine mit WinXP oder niedriger zu installieren. :?
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Do 27.06.13 21:15 
user profile iconPalladin007 hat folgendes geschrieben Zum zitierten Posting springen:
Naja, Hoch laden wär ein bisschen sinnlos, ist ja nur die Main-Methode und fast komplett nur der Code von Marc :D

gibt Leute die keine C# Umgebung bei Hand haben ;)



user profile iconMarc. hat folgendes geschrieben Zum zitierten Posting springen:
Nachtrag: Statt der C#-Konsolenanwendung hätte übrigens eine Batchdatei auch genügt:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
@echo off
taskkill /f /IM explorer.exe
cd "C:\ANNO 1602 K?nigs-Edition\"
Start 1602.exe
timeout /T -1
Start explorer.exe

Aber da das auch nur dieses eine Symptom mit dem Grafikfehlern behebt und es scheinbar keine vernünftige Lösung dafür gibt, bleibt wohl vermutlich nur das Spiel in einer virtuellen Maschine mit WinXP oder niedriger zu installieren. :?


Danke, bei mir reicht komischerweise diese kleine Datei um es unter WIn7 Fehlerfrei zu spielen. Gehör wohl zu den glücklichen :D

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Do 27.06.13 21:29 
Na dann sag doch gleich, dass du keinen Compiler hast :D


Natürlich kann ich es hoch laden, aber erst, wenn ich ungefähr den Umfang habe, dass das Programm auf jedem PC mit .NET-Framework halbwegs fehlerfrei funktionieren kann.



Und der Grund, warum ich keine Batch wollte: Ich habe dann immer dieses hässliche schwarze Fenster in der Taskleiste und die ist bei mir ohnehin schon immer so überfüllt. :D
Ich hatte nach einer Lösung gesucht, die mir vor gaukeln kann, als wäre alles in Ordnung, aber ohne dass Hardware-Beschleunigungs-Problem gelöst zu haben, wird das wohl nix :/

@glotzer:

Dann hast du wahrscheinlich schon die Hardwarebeschleunigung deaktiviert, oder du freust dich zu früh.
Bei mir konnte ich anfangs auch rund ne halbe Stunde spielen, genau kann ich das nicht sagen, vergesse bei Anno immer die Zeit :D
Aber dass die Abstürze so schnell kommen, ist nicht immer so gewesen, eigentlich erst, seit ich versucht habe, mit irgendwelchen fremd geschriebenen Launchern das Problem zu lösen, vielleicht haben die etwas im Programm-Ordner geändert, was sie nicht hätten tun dürfen. :/