Entwickler-Ecke

WinForms - Fremden Fenster den Fokus geben ?


Delete - Mi 02.01.08 21:06
Titel: Fremden Fenster den Fokus geben ?
Hi,

Mal ne kurze frage: Wie kann ich einem anderen fenster, das sich nicht in meiner anwendung befindet, den focus geben und wie kann ich die fenster ermitteln die offen sind ???

Ich will so ne liste haben wo alle offenen fenster drin stehen und bei klick wird dann das jeweilige fenster in den vordergrund gehohlt bzw. aktiviert. Wie mach ich das ?

mfg


Kha - Mi 02.01.08 21:32

Da wirst du nicht um die WinAPI herum kommen, was auch für deine andere Frage gilt. Beispiele gibts zB bei CodeProject [http://www.codeproject.com/KB/cs/windowhider.aspx].


Delete - Do 03.01.08 03:35

user profile iconKhabarakh hat folgendes geschrieben:
Da wirst du nicht um die WinAPI herum kommen, was auch für deine andere Frage gilt. Beispiele gibts zB bei [url=http://www.codeproject.com/KB/cs/windowhider.aspx]CodeProject[/url].


Ok das dachte ich mir schon irgendwie. Aber ich verstehe den artikel auf CodeProject beim besten willen nicht...

Es werden funktionen aus der winapi dll geladen, aber wo genau frägt er die fenster ab ??? Blick das nicht... hab mir den code auch runtergeladen, aber verstehes nicht.

Soweit hab ich herausgefunden das hier alles passiert:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
    //load all available windows
    private void Chooser_Load(object sender, System.EventArgs e)
    {
      VisListBox.Items.Clear();

      VisListBox.BeginUpdate();

      //enumerate thru Windows collection
      Windows wndList = new Windows(InvisibleBox.Checked,NoTitleBox.Checked);
      foreach (Window wnd in wndList) {VisListBox.Items.Add(wnd);}

      VisListBox.EndUpdate();
    }


Vllt kannste ja mal nur das zeigen, was nur für die fensterermittlung rlevant ist...

danke schonmal

mfg


Christian S. - Do 03.01.08 23:52

Hallo!

Was Du gepostet hast, ist nur der Teil für die Darstellung dessen, was die Window(s) Klassen es Projektes leisten. Entscheidend für Dich ist der Quellcode, der auch direkt auf der verlinkten Seite zu sehen ist, denn da passiert das eigentlich Interessante.

Du siehst dort zwei Klassen: eine Window-Klasse und eine Windows-Klasse, was eine Aufzählung von Instanzen der Window-Klasse darstellt.

Im Konstruktor der Windows-Klasse werden alle verfügbaren Fenster gesucht (mittels Callback-Methode EvalWindow) und der internen ArrayList hinzugefügt.

In der Window-Klasse wiederum findest Du die Funktionalität, um Fenster sichtbar zu machen bzw. um ihnen den Fokus zu geben. Für Dich dürfte dabei die Activate-Methode interessant sein, weil diese für den Fokus zuständig ist. Eventuell auch noch die Visible-Eigenschaft, welche für die Sichtbarkeit des entsprechenden Fensters zuständig ist.

Grüße
Christian


Delete - Fr 04.01.08 21:49

user profile iconChristian S. hat folgendes geschrieben:
Hallo!

Was Du gepostet hast, ist nur der Teil für die Darstellung dessen, was die Window(s) Klassen es Projektes leisten. Entscheidend für Dich ist der Quellcode, der auch direkt auf der verlinkten Seite zu sehen ist, denn da passiert das eigentlich Interessante.

Du siehst dort zwei Klassen: eine Window-Klasse und eine Windows-Klasse, was eine Aufzählung von Instanzen der Window-Klasse darstellt.

Im Konstruktor der Windows-Klasse werden alle verfügbaren Fenster gesucht (mittels Callback-Methode EvalWindow) und der internen ArrayList hinzugefügt.

In der Window-Klasse wiederum findest Du die Funktionalität, um Fenster sichtbar zu machen bzw. um ihnen den Fokus zu geben. Für Dich dürfte dabei die Activate-Methode interessant sein, weil diese für den Fokus zuständig ist. Eventuell auch noch die Visible-Eigenschaft, welche für die Sichtbarkeit des entsprechenden Fensters zuständig ist.

Grüße
Christian


Hi Christian,

Danke für die Hilfe... jetzt hab ichs endlich geschaft nur das was ich wollte aus dem code zu extrahieren.

Hab sonst keine probleme codes zu analysieren und so, aber diesmal hab ich mir echt schwer getan... naja arbeite ja erst ne woche mit C# :)

Danke und mfg