Avatar billede jpst Nybegynder
18. september 2007 - 22:10 Der er 4 kommentarer og
1 løsning

GetAsyncKeyState() Fejl PInvokeStackImbalance?

Hey. Kort og godt så prøver jeg at programmere en keylogger i VisualBasic 2005 Express (.net)

Jeg bruger GetAsyncKeyState(), og har lavet følgende:


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
_________________________________________

If GetAsyncKeystate(45) Then
    File.AppendAllText(txt, "e") '(txt er filnavnet på en .txt fil)
End If


Men jeg får en "PInvokeStackImbalance" ved "
If GetAsyncKeystate(45) Then"

når jeg debugger mit program

Her er et screenshot..
http://www.janphilip.dk/imbalance.jpg


På forhånd tak for hjælpen..
Avatar billede bernhof Nybegynder
18. september 2007 - 22:27 #1
Prøv at deklarere den således i stedet:
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Int32) As Int16

Læg mærke til at "Long" er udskiftet med "Int32" og "Integer" er udskiftet med "Int16". I .NET svarer datatypen Int32 til Integer og Int16 til Short.

Den skal deklareres således, fordi de gamle VB6 datatyper Integer og Long i .NET er blevet dobbelt så store (Integer var i VB6 16-bit, men er i .NET 32-bit, ligesom Long i VB6 var 32-bit, men i .NET er 64-bit). Dvs. din deklaration af metoden ville være korrekt i VB6, men i .NET er samme datatyper for store til API'en, hvilket nogle gange kan give problemer, hvis man ikke husker at rette det.

Flere oplysninger om GetAsyncKeyState finder du her:
http://www.pinvoke.net/default.aspx/user32/GetAsyncKeyState.html
Avatar billede jpst Nybegynder
18. september 2007 - 22:50 #2
Fedt.. Nu får jeg ingen fejl..

Men når jeg er i debug mode, så sker der intet når jeg prøver at trykke E, eller noget andet..

Har skrevet: If GetAsyncKeyState(45) then.. osv.. så burde den reagere når man trykkede på E..

Som der ses her, så står der at E-key er nr 45
http://msdn2.microsoft.com/en-us/library/ms645540.aspx

Men uden held.. Nogen ide til hvordan det skal laves?

Det link du gav virker godt, men jeg kan sku ikke læse andre kode-sprog, så jeg forstod ikke ret meget af den "Sample-Code" der var..
Avatar billede bernhof Nybegynder
19. september 2007 - 10:36 #3
GetAsyncKeyState benyttes til at undersøge, om den angivne tast (eksempelvis nr. 45 - E) er trykket ned i det øjeblik du kalder funktionen.

Dvs. GetAsyncKeyState giver IKKE automatisk besked, når der trykkes på E-tasten.
Avatar billede jpst Nybegynder
19. september 2007 - 13:35 #4
Okay, har også læst mig til at hook-funktionen nok også er bedre egnet til det..
Men tak for hjælpen..
Avatar billede marvind Nybegynder
11. oktober 2007 - 21:51 #5
jeg lavede engang en keylogger med GetAsyncKeyState
jeg proppede bare GetAsyncKeyState(xx) i en timer med et interval på 1 milisekund

jeg har koden et eller andet sted, jeg kigger lige efter det når jeg får tid
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester