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

Win32::GuiTest: IsKeyPressed(shift strg...)



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
landogar
 2005-12-13 16:53
#60874 #60874
User since
2005-10-26
8 Artikel
BenutzerIn
[default_avatar]
Hallo!

ich brauch für ein skript eine art keylogger.
ich hab auch schon einen codefetzen gefunden:
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
use Win32::GuiTest qw/SendKeys IsKeyPressed/;

my @keys = qw/1 2 3 x y z ESC/;
my $logfile = "logfile_eingaben.txt";

open LOGFILE, ">> $logfile";
#until (IsKeyPressed("1")&&("2")) {
until (IsKeyPressed("ESC")) {
   for (@keys) {
       if (IsKeyPressed($_)) {
           print LOG "$_ wurde gedrückt\n";
           SendKeys "{PAUSE 1}";
       }
       elsif (IsKeyPressed("Strg"))
{
print LOG " $_ gedrückt\n";
SendKeys "{PAUSE 1}";
}

else {
          SendKeys "{PAUSE 1}";
       }
   }
}
close LOGFILE;


ich muss nur die oben angegebenen keys abfragen(1 2 3 x y z ESC) und zusätzlich noch die shift, tab, strg und alt taste.

wie frage ich mit IsKeyPressed nach diesen tasten??
bei excape funktioniert das mit "ESC" weis jemand wie es bei den anderen geht??

vielen dank schonmal!\n\n

<!--EDIT|renee|1134509916-->
renee
 2005-12-13 23:51
#60875 #60875
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Shift = Shift_L bzw. Shift_R (je nachdem ob man die linke oder rechte Shift-Taste drueckt) Vielleicht reicht bei Win32::GUITest auch ein einfaches Shift
Tag = Tab
strg = Control_L bzw. Control_R (vielleicht reicht auch nur Control)
Alt = Alt_L
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/
landogar
 2005-12-14 12:03
#60876 #60876
User since
2005-10-26
8 Artikel
BenutzerIn
[default_avatar]
Hallo!

danke für die antwort!

TAB funktioniert, aber bei shift habe ich alle möglichen versionen versucht...
ich finde auch im modul selbst keine beschreibung...

brauche dringend noch shift und satzzeichen(,.;:)

alles andere habe ich mitlerweile schon anders abgedeckt.
renee
 2005-12-14 13:01
#60877 #60877
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hast Du es auch mit
SHIFT probiert (und , . ...)? Es werden wohl GROSSBUCHSTABEN erwartet...

Oder probier es mal mit
Code: (dl )
1
2
3
4
5
6
7
use Win32::GuiTest qw/SendKeys IsKeyPressed :VK/;
[...]
if (IsKeyPressed(VK_SHIFT)) { # bzw. VK_ALT / VK_CONTROL
print LOG "SHIFT wurde gedrückt\n";
SendKeys "{PAUSE 1}";
}
[...]
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/
esskar
 2005-12-14 14:15
#60878 #60878
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
das ding ist doof implementiert:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
int findvkey(const char* name, int* key) 
{
/* symbol table record */
typedef struct tokentable {
char *token;
int vkey;
} tokentable;

/* global symbol table */
static tokentable tbl[] = {
"BAC", VK_BACK,
"BS" , VK_BACK,
"BKS", VK_BACK,
"BRE", VK_CANCEL,
"CAP", VK_CAPITAL,
"DEL", VK_DELETE,
"DOW", VK_DOWN,
"END", VK_END,
"ENT", VK_RETURN,
"ESC", VK_ESCAPE,
"HEL", VK_HELP,
"HOM", VK_HOME,
"INS", VK_INSERT,
"LEF", VK_LEFT,
"NUM", VK_NUMLOCK,
"PGD", VK_NEXT,
"PGU", VK_PRIOR,
"PRT", VK_SNAPSHOT,
"RIG", VK_RIGHT,
"SCR", VK_SCROLL,
"TAB", VK_TAB,
"UP", VK_UP,
"F1", VK_F1,
"F2", VK_F2,
"F3", VK_F3,
"F4", VK_F4,
"F5", VK_F5,
"F6", VK_F6,
"F7", VK_F7,
"F8", VK_F8,
"F9", VK_F9,
"F10", VK_F10,
"F11", VK_F11,
"F12", VK_F12,
"F13", VK_F13,
"F14", VK_F14,
"F15", VK_F15,
"F16", VK_F16,
"F17", VK_F17,
"F18", VK_F18,
"F19", VK_F19,
"F20", VK_F20,
"F21", VK_F21,
"F22", VK_F22,
"F23", VK_F23,
"F24", VK_F24,
"SPC", VK_SPACE,
"SPA", VK_SPACE,
"LWI", VK_LWIN,
"RWI", VK_RWIN,
"APP", VK_APPS,
};
int i;
for (i=0;i<sizeof(tbl)/sizeof(tokentable);i++) {
if (strcmp(tbl[i].token, name)==0) {
*key=tbl[i].vkey;
return 1;
}
}
return 0;
}

BOOL
IsKeyPressed(name)
char* name;
CODE:
int vkey;
int found;
int len = strlen(name);
if (len >= 3)
name[3]=NUL;
found = findvkey(name, &vkey);
if (found) {
OutputDebugString("Trying key\n");
RETVAL = GetAsyncKeyState(vkey);
} else if (strlen(name)==1 && (isdigit(*name) || isalpha(*name))) {
OutputDebugString("Trying alphanum\n");
RETVAL = GetAsyncKeyState(toupper(*name));
}else {
OutputDebugString("No key\n");
RETVAL = 0;
}
OUTPUT:
RETVAL


wie man sieht, kann es nicht gehen, da in findvkey nix von SHIFT definiert ist ... leider!
esskar
 2005-12-14 14:23
#60879 #60879
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
mit $Win32::GuiTest::debug = 1 solltest du dann wohl ne Debug-Meldung ala "No key" bekommen!
renee
 2005-12-14 23:37
#60880 #60880
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
In den Sourcen zu CPAN:Win32::GuiTest steht bei VK das VK_SHIFT drin...
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/
esskar
 2005-12-15 01:30
#60881 #60881
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=renee,14.12.2005, 22:37]In den Sourcen zu CPAN:Win32::GuiTest steht bei VK das VK_SHIFT drin...[/quote]
das mag sein, aber in http://search.cpan.org/src....test.pc ist VK_SHIFT als 0x10 definert - also 16. Als string ist das dann "16". strlen(name)==1 prüft dann aber, ob der string ein Zeichen lang ist... das wird da nix.
selbst wenn man das streln noch ändern würde, hat man schon vorher verloren:
Code: (dl )
1
2
3
int len = strlen(name);
if (len >= 3)
name[3]=NUL;

kürzt jeden String auf max. 3 Zeichen ... sorry... keine Ahnung, was er sich dabei gedacht hat, dass so zu implementieren.
esskar
 2005-12-15 02:29
#60882 #60882
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hab ihm mal folgenden Patch für sein xs-file geschickt
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
441a442,453
> BOOL IsDigitString(const char *s)
> {
>       if(s == NULL || *s == 0)
>               return FALSE;
>
>       while(*s && isdigit(*s)) {
>               s++;
>       }
>
>       return *s == 0 ? TRUE : FALSE;
> }
>
1503,1504c1515,1516
<     if (len >= 3)
<         name[3]=NUL;
---
>     /*if (len >= 3)
>         name[3]=NUL;*/
1508a1521,1523
>     } else if (IsDigitString(name)) {
>       OutputDebugString("Trying integer\n");
>       RETVAL = GetAsyncKeyState(atoi(name));


abwarten und tee trinken.\n\n

<!--EDIT|esskar|1134606708-->
renee
 2005-12-15 02:33
#60883 #60883
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
kannst Du daraus einen Bug-Report machen?
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/
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2005-12-13 16:53.