Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12368[/thread]

Geöffnete Fenster auf dem Desktop erkennen..

Leser: 3


<< >> 7 Einträge, 1 Seite
rommi
 2008-08-17 20:09
#113616 #113616
User since
2005-03-03
54 Artikel
BenutzerIn
[default_avatar]
Hallöchen,
wie kann ich mit Perl feststellen welche Fenster (am Besten die eindeutige Fensterid) auf dem Desktop aktuell geöffnet (nicht minimiert)sind?
Egal ob das Fenster gerade den Focus (aktives Fenster) hat oder nicht es muss nur geöffnet auf dem Desktop sein. Also minimierte Fenster oder Fenster die nicht auf dem Desktop geöffnet sind benötige ich nicht.

Ich hab es schon mit FindWindowLike() und GetWindowText() probiert aber da bekomme ich die Fensterids von allen möglichen Fenstern/Frames und kann keine Unterscheidung treffen. Zudem benötige ich noch die Reihenfolde dieser Fenster. D.h. welches Fenster liegt ganz oben und welche darunter. Das aktive (mit dem Focus) Fenster wird natürlich immer ganz oben sein.

Vielleicht hat jemand einen Tip. Danke im voraus! Gruss rommi

Achtung Crosspost!
http://perlboard.de/cgi-bin/perlboard.pl?action=sh...
Linuxer
 2008-08-17 20:30
#113619 #113619
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Hi,

++ fürs Kenntlichmachen des Crossposts.

Welches Betriebssystem bzw. welcher Fenstermanager wird verwendet?
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
MatthiasW
 2008-08-17 20:43
#113620 #113620
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Den genannten Funktionen nach gehe ich mal von Windows aus.
Da solltest du folgendermaßen die sichtbaren Fenster bekommen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $starthwnd = $GetDesktopWindow->Call(); # get desktop window, all other windows are childs of this one

my $hwnd = $GetWindow->Call( $starthwnd, 5 ); # get first child window

while ($hwnd)
{
        my $is_visible = $IsWindowVisible( $hwnd );

        print "$hwnd ", ( $is_visible ? 'is' : 'is not' ), " visible\n";

        $hwnd = $GetWindow->Call( $hwnd, 2 ); # get next window
} # while

Vorher musste natürlich noch die Funktionen über Win32::API holen.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
rommi
 2008-08-18 17:18
#113665 #113665
User since
2005-03-03
54 Artikel
BenutzerIn
[default_avatar]
Hallo MatthiasW, danke für die schnelle Antwort! Was meinst du mit mit "Funktionen über Win32::API holen"? GetDesktopWindow oder GetWindow gehören doch garnicht zu Win32::API und dem Call muss ich doch noch einen Wert (Value) mitgeben, oder?

gruss, rommi
rommi
 2008-08-18 17:21
#113666 #113666
User since
2005-03-03
54 Artikel
BenutzerIn
[default_avatar]
Hi Linuxer, ++ auch für dich. Bin schon lange nicht mehr gelobt worden.
gruss, rommi
MatthiasW
 2008-08-18 17:38
#113669 #113669
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
rommi+2008-08-18 15:18:31--
Hallo MatthiasW, danke für die schnelle Antwort! Was meinst du mit mit "Funktionen über Win32::API holen"? GetDesktopWindow oder GetWindow gehören doch garnicht zu Win32::API und dem Call muss ich doch noch einen Wert (Value) mitgeben, oder?

gruss, rommi

Die Funktionen bekommst du folgendermaßen:
Code (perl): (dl )
1
2
3
my $GetDesktopWindow = Win32::API->new( "user32", "GetDesktopWindow",   "", "N" );
my $GetWindow        = Win32::API->new( "user32", "GetWindow",        "NN", "N" );
my $IsWindowVisible = Win32::API->new( "user32", "IsWindowVisible",  "N", "L" );

Dem ->Call() übergibst du eben die Parameter, die die jeweilige Funktion benötigt.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
rommi
 2008-08-18 17:50
#113670 #113670
User since
2005-03-03
54 Artikel
BenutzerIn
[default_avatar]
alles klar, danke! gruss, rommi
<< >> 7 Einträge, 1 Seite



View all threads created 2008-08-17 20:09.