Schrift
[thread]8796[/thread]

Globales Tasten-Event abfangen (win) (Seite 2)

Leser: 1


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
esskar
 2007-03-01 11:19
#74663 #74663
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=GoodFella,28.02.2007, 21:25]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl
use strict;

package MyModule;
use base qw/Win32::API::Interface/;

__PACKAGE__->generate( "kernel32", "SetWindowsHookEx", "WH_MOUSE", \&test, "NULL", 0 );

1;

my $obj = MyModule->new();
$obj->SetWindowsHookEx();


sub test
 {
  print "Mouse Event\n";
 }
[/quote]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl

use strict;

use Win32::API;
use Win32::API::Callback;

package MyModule;
use base qw/Win32::API::Interface/;

__PACKAGE__->generate( "kernel32", "SetWindowsHookEx", "IKNN", "N");

1;

use constant WH_KEYBOARD => 2;

my $lpfn = Win32::API::Callback->new(
sub { my ($code, $wParam, $lParam) = @_; },
"IIN", "N",
);

my $obj = MyModule->new();
$obj->SetWindowsHookEx(WH_KEYBOARD, $lpfn, 0, 0);


so wäre der ansatz; aber es muss noch einiges mehr getan werden
deine lösung ist wohl optimal
GoodFella
 2007-03-01 12:39
#74664 #74664
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Jo, danke. :)

Es gibt da leider noch ein Problem;
Ich habe folgende Zeile hinzugefügt:
Code (perl): (dl )
 $main->focus if ($vis == 1);

Diese wird alle 50ms aufgerufen.
Leider poppt das Online-Pokerspiel trotzdem darüber. Jemand eine Idee, wie ich das beheben kann / warum das so ist?
esskar
 2007-03-01 12:47
#74665 #74665
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
focus hat nix mit top-window zu tun.
GoodFella
 2007-03-01 13:09
#74666 #74666
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,01.03.2007, 11:47]focus hat nix mit top-window zu tun.[/quote]
Danke, das Stichwort habe ich gebraucht:

Code (perl): (dl )
1
2
use Tk::StayOnTop;
$main->stayOnTop if ($vis == 1);


funktioniert perfekt.

Hier nochmal das ganze Programm falls jemand sowas auch braucht:
Code (perl): (dl )
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
36
37
38
39
40
41
42
43
44
#!/usr/local/bin/perl -w

use Tk;
use Win32::API;
use Tk::JPEG;
use Tk::StayOnTop;

my $boss_key = 0x04;
#my $boss_key = 0x1b;


my $main =  new Tk::MainWindow( -title => 'IDEAL' );
$main->geometry('1030x740');
my $image = $main->Photo('-format' => 'jpeg', -file => 'boss.jpg');
$main->Label(-image => $image)->pack(); 

Win32::API->Import('user32', 'GetAsyncKeyState', 'I', 'I');

my $vis = 1;

sub read_stuff
{
 $main->stayOnTop if ($vis == 1);
 $main->focus if ($vis == 1);
 &switch_vis if ((GetAsyncKeyState($boss_key) & 1) == 1);
}
$main->repeat(50, \&read_stuff);


sub switch_vis
{
  if($vis == 0)
   {
    $vis = 1;
    $main->deiconify;
   }
  else
   {
    $vis = 0;
    $main->withdraw;
   }
}

MainLoop;
esskar
 2007-03-01 14:17
#74667 #74667
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
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
36
37
38
39
40
41
42
43
44
#!/usr/local/bin/perl -w

use Tk;
use Win32::API;
use Tk::JPEG;
use Tk::StayOnTop;

my $boss_key = 0x04;
#my $boss_key = 0x1b;


my $main = new Tk::MainWindow( -title => 'IDEAL' );
$main->geometry('1030x740');
my $image = $main->Photo('-format' => 'jpeg', -file => 'boss.jpg');
$main->Label(-image => $image)->pack();

Win32::API->Import('user32', 'GetAsyncKeyState', 'I', 'I');

my $vis = 1;
sub read_stuff
{
if ($vis) {
$main->stayOnTop;
$main->focus;
}
&switch_vis if ((GetAsyncKeyState($boss_key) & 1) == 1);
}
$main->repeat(50, \&read_stuff);


sub switch_vis
{
unless($vis)
{
$main->deiconify;
}
else
{
$main->withdraw;
}
$vis = !$vis;
}

MainLoop;
vayu
 2007-03-02 10:49
#74668 #74668
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
So wird das Fenster gleich maximiert aufgerufen.

was natürlich noch super wäre ... wenn das ganze OHNE fensterleiste zu machen wäre :)

Code: (dl )
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
36
37
38
39
40
41
use Tk;
use Win32::API;
use Tk::JPEG;
use Tk::StayOnTop;

my $boss_key = 0x04;

my $main = new Tk::MainWindow( -title => 'IDEAL');
$main->geometry('1030x740');
my $image = $main->Photo('-format' => 'jpeg', -file => 'boss.jpg');
$main->Label(-image => $image)->pack();

Win32::API->Import('user32', 'GetAsyncKeyState', 'I', 'I');

my $vis = 1;
sub read_stuff
{
if ($vis) {
$main->stayOnTop;
$main->focus;
$main->state("zoomed");
}
&switch_vis if ((GetAsyncKeyState($boss_key) & 1) == 1);
}
$main->repeat(50, \&read_stuff);


sub switch_vis
{
unless($vis)
{
$main->deiconify;
}
else
{
$main->withdraw;
}
$vis = !$vis;
}

MainLoop;
\n\n

<!--EDIT|vayu|1172825410-->
GoodFella
 2007-03-02 17:14
#74669 #74669
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Jo, und wenn es gleich noch die Lautstärke auf 0 setzen würde, hilfreich bei youtube z.B. ^^
Habe nur leider nichtmal einen Ansatz, wie das zu lösen wäre.

Wegen Vollbildmodus ... muss irgendwie gehen, mal sehen, was ich ergooglen kann.
renee
 2007-03-02 19:15
#74670 #74670
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
schau mal nach overredirect von CPAN:Tk::MainWindow...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
PerlProfi
 2007-03-02 20:53
#74671 #74671
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Die Funktion heißt overrideredirect() und du kannst sie vor $main->geometry(...) einbauen:
$main->overrideredirect(1);

MfG
esskar
 2007-03-03 12:26
#74672 #74672
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=GoodFella,02.03.2007, 16:14]Jo, und wenn es gleich noch die Lautstärke auf 0 setzen würde, hilfreich bei youtube z.B. ^^
Habe nur leider nichtmal einen Ansatz, wie das zu lösen wäre.[/quote]
Win32::Sound::Volume(0);
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2007-02-28 12:24.