Autor |
Beitrag |
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: 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:
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:
Quelltext
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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 27.06.13 11:42
Moin! Quick and Dirty ist das eine Möglichkeit;
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;
[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) { Console.WriteLine("Killing explorer.exe"); int hwnd; hwnd = FindWindow("Progman", null); PostMessage(hwnd, WM_QUIT, 0, 0);
Console.WriteLine("Starting another Program"); System.Threading.Thread.Sleep(500);
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 
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Do 27.06.13 11:55
Diese Zeile hats gepackt:
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 
|
|
glotzer
      
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: 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 
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: 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
An Stelle von Sleep habe ich dann einfach das geschrieben:
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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 27.06.13 21:07
Nachtrag: Statt der C#-Konsolenanwendung hätte übrigens eine Batchdatei auch genügt:
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
      
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Do 27.06.13 21:15
_________________ ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
|
|
Palladin007 
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Do 27.06.13 21:29
Na dann sag doch gleich, dass du keinen Compiler hast
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.
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
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. :/
|
|
|