Laden...

Bildschirmauflösung eines Spiel abfragen.

Erstellt von Regenwurm vor 15 Jahren Letzter Beitrag vor 15 Jahren 4.418 Views
R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren
Bildschirmauflösung eines Spiel abfragen.

Hallo

Kann ich mit C# abfragen, in welcher Auflösung ein bestimmter Prozess/Spiel läuft?

greetings
Regenwurm

ServiceStack & Angular = =)

946 Beiträge seit 2008
vor 15 Jahren

Meinst du Bildschirmauflösung?
Wenn du das Fenster kennst kannst du ja die Höhe und Breite in Pixel von diesem abfragen.

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren
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 = =)

946 Beiträge seit 2008
vor 15 Jahren

Wie man am Namen System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width erkennen kann, braucht dies den Verweis System.Windows.Forms.

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren

Fehler 1 Der Typ- oder Namespacename "Windows" ist im Namespace "System" nicht vorhanden. (Fehlt ein Assemblyverweis?)

So, und nun erschlag mich ^^

ServiceStack & Angular = =)

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren

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 = =)

946 Beiträge seit 2008
vor 15 Jahren
int width = Form.FromHandle(handle).Size.Width;
int heigth = Form.FromHandle(handle).Size.Heigth;
R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren

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 = =)

946 Beiträge seit 2008
vor 15 Jahren

handle ist vermutlich :::

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren

handle ist vermutlich :::

Tjo, woher kommt dann die komische Musik? 😕

ServiceStack & Angular = =)

49.485 Beiträge seit 2005
vor 15 Jahren

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

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren

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 = =)

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Regenwurm,

den Handle bekommst du wie gehabt mit FindWindow (oder EnumWindows).

herbivore

479 Beiträge seit 2008
vor 15 Jahren

Hallo,

wenn es speziell iTunes sein soll, kannst du auch die iTunesLib nutzen.

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)
R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren

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 = =)

49.485 Beiträge seit 2005
vor 15 Jahren

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

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren

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 = =)

479 Beiträge seit 2008
vor 15 Jahren

Hallo,

das hatte ich auch...

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)
R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 15 Jahren

Und wie hast du das gelöst? ^^

ServiceStack & Angular = =)

S
248 Beiträge seit 2008
vor 15 Jahren

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