Hallo
Kann ich mit C# abfragen, in welcher Auflösung ein bestimmter Prozess/Spiel läuft?
greetings
Regenwurm
ServiceStack & Angular = =)
Meinst du Bildschirmauflösung?
Wenn du das Fenster kennst kannst du ja die Höhe und Breite in Pixel von diesem abfragen.
int Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
int Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
Will schonmal nicht. (War nur zum testen)
Brauch ich einen bestimmten Verweis?
Bin bei einer Konsolenanwendung.
Finde im übrigen den Bereich hier ein bisschen unpassend 😄
greetings
Regenwurm
ServiceStack & Angular = =)
Wie man am Namen System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width erkennen kann, braucht dies den Verweis System.Windows.Forms.
Fehler 1 Der Typ- oder Namespacename "Windows" ist im Namespace "System" nicht vorhanden. (Fehlt ein Assemblyverweis?)
So, und nun erschlag mich ^^
ServiceStack & Angular = =)
Also ehm.. ^^
Nun habe ich also die Auflösung des Bildschirmes.
Nur, wie bringe ich eben die Auflösung eines anderen Fensters dahin?
Das Windows Handle hab ich ja.
ServiceStack & Angular = =)
int width = Form.FromHandle(handle).Size.Width;
int heigth = Form.FromHandle(handle).Size.Heigth;
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Dies kommt bei "int width = Form.FromHandle(handle).Size.Width;"
Würde beim anderen wahrscheinlich auch kommen.
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
static void Main(string[] args)
{
IntPtr handle = FindWindow("iTunes", null);
int Width = Form.FromHandle(handle).Size.Width;
int Height = Form.FromHandle(handle).Size.Height;
ServiceStack & Angular = =)
handle ist vermutlich :::
Tjo, woher kommt dann die komische Musik? 😕
ServiceStack & Angular = =)
Hallo Regenwurm,
So, und nun erschlag mich
soweit würde ich nicht gehen, aber solche Fragen solltest du dir bitte verkneifen. Dein Kommentar hat ja gezeigt, dass du gewusst hast, das sowas nicht ins Forum gehört. Überhaupt erwarten wir mehr Eigeninitiative.
Zur Sache:
Form.FromHandle(handle) funktioniert nur, wenn das Fenster im gleichen Prozess läuft. Auf Fenster in anderen Prozessen kannst du nur per Win32 zugreifen. Im konkreten Fall soll GetWindowRect passen.
herbivore
Hallo herbivore
Sorry, ich habe mir nun einige Beispiele für GetWindowRect angeschaut, doch schlau werde ich daraus nicht.
Wie bekomm ich nun das handle eines Fensters? (Beispielsweise "iTunes").
Grüsse
Regenwurm
ServiceStack & Angular = =)
Hallo Regenwurm,
den Handle bekommst du wie gehabt mit FindWindow (oder EnumWindows).
herbivore
Hallo,
wenn es speziell iTunes sein soll, kannst du auch die iTunesLib nutzen.
mfg.
markus111
Ihr verwirrt mich 😃
Also soll ich in dem Falle die Auflösung des Fensters durch GetWindowRect regeln?
[DllImport("user32.dll", SetLastError = true)]
static extern Rectangle GetWindowRect(IntPtr hWnd, Rectangle lpRect);
static extern bool GetWindowRect(IntPtr hWnd, out RECT rect);
public static int GibAufloesung()
{
IntPtr handle = FindWindow(null, "iTunes");
Rectangle Fenster;
GetWindowRect(handle, out Fenster);
return Fenster.Size;
}
Console.WriteLine(GibAufloesung());
Fehler 1 Die beste Übereinstimmung für die überladene Catcher.Program.GetWindowRect(System.IntPtr, System.Drawing.Rectangle)-Methode hat einige ungültige Argumente.
Fehler 2 Das Argument "2" darf nicht mit dem out-Schlüsselwort übergeben werden.
Fehler 3 Eine implizite Konvertierung vom Typ "System.Drawing.Size" in "int" ist nicht möglich.
@markus
Danke, aber es ist nicht speziell iTunes. 😃
Ich benutze das Fenster nur als Beispiel.
Grüsse Regenwurm
ServiceStack & Angular = =)
Hallo Regenwurm,
schau dir auf www.pinvoke.net an, wie du das machen musst.
Mal ganz abgesehen davon, dass die Fehlermeldungen doch sehr aussagekräftig sind. Siehe [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen).
herbivore
Ich nochmal.
Ich befinde mich in einer Sackgasse.
Ich komme einfach nicht raus!
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[DllImport("user32.dll", SetLastError = true)]
static extern Rectangle GetWindowRect(IntPtr hWnd, Rectangle lpRect);
static extern bool GetWindowRect(IntPtr hWnd, out RECT rect);
public static string GibAufloesung()
{
IntPtr handle = FindWindow(null, "iTunes");
RECT Fenster;
GetWindowRect(handle, out Fenster);
return Fenster.ToString();
}
Der Fehler kommt beim kompilieren:
er Typ "Catcher.Program" der Assembly "Catcher, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" konnte nicht geladen werden, da die Methode "GetWindowRect" keine Implementierung (keine RVA) hat.
Was auch immer damit gemeint ist.
greetings
Regenwurm
ServiceStack & Angular = =)
Hallo,
das hatte ich auch...
mfg.
markus111
Hallo,
als erstes solltest du diese Definition der API Funktion verwenden:
[DllImport("user32.dll", SetLastError = true)]
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
Der Fehler kommt daher, dass du eine Methode ohne Implementierung deklariert hast:
static extern bool GetWindowRect(IntPtr hWnd, out RECT rect);
Wenn du extern angibst, musst du auch das DllImport Attribut angeben.
Spooky