[C#] Window Titel

ocram

Mitglied
Hallo,
ich wollte mal fragen ob es möglich wäre, von einem Prozess der im Moment Aktiv ist, den Fenster Titel zu ermitteln, also Automatisch per Code?

Ich Danke im voraus, für jede Antwort!


mfg ocram | Marco

EDIT:// Habe es selber gelöst
 
Zuletzt bearbeitet:
Usings;
System.Runtime.InteropServices

In der Klasse, ausserhalb einer Methode:
C#:
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int GetWindowTextLength(HandleRef hWnd);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int GetWindowText(HandleRef hWnd, StringBuilder lpString, int nMaxCount);

Methode, liefert bei Fehler null:
C#:
String getForegroundTitle()
{
    IntPtr ip;
    StringBuilder sb;
    int i;
    try
    {
        ip = GetForegroundWindow();
        if(hr.Handle.Equals(0))
            return null;
        i = GetWindowTextLength(new HandleRef(this, ip)) * 2;
        if(i < 1)
            return null;
        sb = new StringBuilder(i);
        i = GetWindowText(new HandleRef(this, ip), sb, sb.Capacity);
        if(i < 1)
            return null;
    }
    catch(Exception) { }
    return null;
}

Nicht getestet.
Ist aus verschiedenen Quellen (vA. MSDN) zusammenkopiert und leicht angepasst.

Gruß
 
das ist ja schön und gut, aber wenn ich ehrlich bin weiß ich jetzt grad gar nicht wie, ich das Script "ausführen" kann. Wenn wir z.B. mal ein Button nehmen und der soll den Titel in einem Label ausgeben, wie soll das gehen?

Sry, für die dumme frage, aber ich bin halt noch ein Anfänger in C#

Gruß
 
Eigentlich habe ich zu jedem Codestück geschrieben, wo es hingehört...

Weißt du, wie man generell irgendwas auf Buttonklick macht?
Kannst du ein Label erstellen?

Wenn beides ja: Mach eine Buttonmethode und ein Label, dann kopier den Code hier rein und ich füg dir das an den passenden Stellen ein.
Ist am Schnellsten.

Gruß
 
Da die Stelle mit den usings nicht da ist, bitte das eine Zusätzliche selber dazuschreiben.

C#:
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int GetWindowTextLength(HandleRef hWnd);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int GetWindowText(HandleRef hWnd, StringBuilder lpString, int nMaxCount);

String GetForegroundTitle()
{
    IntPtr ip;
    StringBuilder sb;
    int i;
    try
    {
        ip = GetForegroundWindow();
        if(ip.Handle.Equals(0))
            return null;
        i = GetWindowTextLength(new HandleRef(this, ip)) * 2;
        if(i < 1)
            return null;
        sb = new StringBuilder(i);
        i = GetWindowText(new HandleRef(this, ip), sb, sb.Capacity);
        if(i < 1)
            return null;
    }
    catch(Exception) { }
    return null;
}

private void button1_Click(object sender, EventArgs e)
{
    String x;
    x = GetForegroundTitle();
    if(x != null)
        label8.Text = x;
}

Gruß

PS: Es gibt spezielle Codetags für C#. Siehe Signatur.
 
Zuletzt bearbeitet:
ich bekomme immer noch einen Error in Zeile 16(bei dir im letzten Post):
C#:
if(hr.Handle.Equals(0))
hr. <- The name 'hr' does not exist in the current context

was soll ich da stattdessen hinmachen?

Gruß

PS// Ich komme mir grad vor wie ein Depp xDD
 

Neue Beiträge

Zurück