Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.10.2011, 12:37

Bildschirm Auflösung eines bestimmen Spiels

Hallo zusammen, ich hoffe mal ich bin im richtigen Teil der Forums.

Ich suche einen Möglichkeit mit C# die Bildschirmauflösung eines Spiels (DX) auszulesen. Leider komme ich nicht weiter meine Suchen bleiben erfolglos oder ich verwende die falschen Stichpunkte.

Kennt jemand eine Möglichkeit bzw. hat nen Tip wonach ich suchen muss oder hat evtl. sogar ein Beispiel!?

PS: Ich mache das nur als Hobby.


mfg s0uuuL

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

2

17.10.2011, 13:15

Also kein Plan wie das mit C# geht, aber ich würde da eine Win32 Function benutzen

http://msdn.microsoft.com/en-us/library/…8(v=vs.85).aspx


Also mit ...

C-/C++-Quelltext

1
2
3
HWND WINAPI WindowFromPoint(
  __in  POINT Point
);


das Handle des Fensters krallen und dann mit

C-/C++-Quelltext

1
2
RECT rect;
GetWindowRect(hWnd, &rect);


die Koordinaten auslesen.

Bei C# kann man glaube ich auch auf die WinAPI zugreifen.

Eine Anmerkung noch, wenn ich Entwickler des besagten Spiels wäre, würde ich versuchen solche Aktionen zu unterbinden.

Gruß

Fb

3

17.10.2011, 14:34

Danke ich werd es mal ausprobieren, mein Problem ist ist probiere Automatische Screens von einem Spiel zu machen, das Problem ist halt nur ich kenne die Auflösung nicht und somit werden die Screen an den Rändern schwarz wenn die Auslösung kleiner als meine vorbelegt ist und andersrum ist das Bild nicht komplett.

Darum brauche ich die Auflösung der Spiels um die Screengröße dementsprechend anzupassen.

Wenn wer ne andere Idee hat nur raus damit :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

17.10.2011, 14:37

Wie genau machst du denn die Screenshots?

5

17.10.2011, 15:09

Gibts hier ne Art Spoiler? Damit der Post nicht endlos lang wird?

Unten einmal der fertige C# Code dafür.

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
[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(HandleRef hWnd, out RECT lpRect);

private void button1_Click(object sender, EventArgs e){ 
    IntPtr i = FindWindow("Screen Test");   
    RECT rc;    
    GetWindowRect(new HandleRef(this, this.Handle), out rc);    

    int width = rc.Right - rc.Left;
    int height = rc.Bottom - rc.Top;
}

private IntPtr FindWindow(string title)
{
    IntPtr ret = new IntPtr();
    Process[] tempProcesses;
    tempProcesses = Process.GetProcesses();
    foreach (Process proc in tempProcesses)
    {
        if (proc.MainWindowTitle == title)
        {
            ret = proc.MainWindowHandle;
        }
    }
return ret;
}

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
    public int Left;
    public int Top; 
    public int Right;
    public int Bottom; 
}


So mach ich die Screens und ich glaub oben das brauch ich nicht komplett weil hab das gefunden (in Fett, vorher stand da Primary (was wohl der Desk ist)). Bin mir nur net sicher ob das Suchen über den Namen das wirklich Wahre ist.


int Width = System.Windows.Forms.Screen.FromHandle(FindWindow("Screen Test")).Bounds.Width;
int Height = System.Windows.Forms.Screen.FromHandle(FindWindow("Screen Test")).Bounds.Height;
size = new System.Drawing.Size(Width, Height);
Bitmap bitmap = new Bitmap(Width, Height);
{
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(new Point(0, 0), new Point(0, 0), size);
}
}

Ist hier dran was auszusetzen?

mfg s0uuuL

Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von »s0uuuL« (17.10.2011, 15:47)


Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

6

17.10.2011, 15:55

weißt du denn wie das Fenster des Spiel heißt?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

17.10.2011, 16:07

Gibts hier ne Art Spoiler? Damit der Post nicht endlos lang wird?

Lange Codeabschnitte kannst du sonst auch auf pastebin o.ä posten. Einfach darauf achten, dass du den unbeschränkt anklickst.
Aber nur längere Abschnitte (>100 Zeilen), ansonsten ist es eher mühsam den Post zu lesen.

8

17.10.2011, 16:57

weißt du denn wie das Fenster des Spiel heißt?
Die lese ich vorher aus. Ich habs nun mal getestet und es funktioniert. Das einzige was ich noch fixen muss das ab un zu BlackScreen vorhanden sind ( Win7 Aero deaktivier ich).

Werbeanzeige