keybd_event_()

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Oliver1994
Beiträge: 321
Registriert: 15.06.2008 21:52

keybd_event_()

Beitrag von Oliver1994 »

Hallo,

hab folgendes Problem:

Will den API: keybd_event_() nutzen...

funzt auch Super alldings will ich den ja nich 10mal aufrufen wenn ich hallo ich bins schreiben will

Sondern ich würde es gerne so machen:

Code: Alles auswählen

For a=1 to Len(eingabe$)
dim test(len(eingabe$))
Zeichen$ StringField(eingabe$, a, "")
test(a) = Zeichen$
keybd_event_("#VK_"+Zeichen$,0,0,0)
next
^^Das Funktioniert ja nicht! Ich verstehe ja auch warum aber wie kann ich das denn lösen?

Gruß

JENS
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Mir is nich so ganz klar was der Code überhaupt machen soll ;-)
Vll solltest du erstma Einrücken, überprüfen ob alle = gesetzt sind und dann in der Hilfe nachschlagen was StringField() eigentlich macht ;-)
(\/) (°,,,°) (\/)
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Der Code ist großer Müll:

Code: Alles auswählen

keybd_event_("#VK_"+Zeichen$,0,0,0)
1. Wird #VK_x nicht in Anführungszeichen gesetzt, weil es eine Variable ist.
2. Kann man das nicht einfach über #VK_+Zeichen$ machen, weil z.B. das Leerzeichen '#VK_ ' nicht existiert. #VK... sind die virtuellen Tastencodes. Zur Nutzung von keybd_event_() siehe auch hier: http://msdn.microsoft.com/en-us/library ... S.85).aspx

Gruß
Oliver1994
Beiträge: 321
Registriert: 15.06.2008 21:52

Beitrag von Oliver1994 »

Das der Code nicht funzt ist mir klar!

Desswegen wollte ich ja wissen wie man es macht!

Gruß

JENS
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

dein grunddenkfehler ist:
eine Konstante ist keine zeichenkette, sondern ein Wort das im Code steht das zur Compilezeit durch einen Wert ersetzt wird.
also zu deutsch, ein Ersatz für eine Zahl damit der Programmierer leichter sehen kann worum es sich handelt.

sämtliche #VK_ konstanten sind also Zahlen, die Tasten bedeuten.
auf der anderen Seite hast du in deinen Strings auch Zahlen, die Zeichen bedeuten.
du könntest dir jetzt also z.b. eine Tabelle anlegen, in der du dem Zeichenwert einen Tastenwert zuordnest,
und in der Schleife übergibst du dann den Wert aus der Tabelle an deinen API-Call.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Oliver1994 hat geschrieben:Desswegen wollte ich ja wissen wie man es macht
Und genau deshalb der Verweis auf das MSDN.

Aber Kaeru Gaman wurde ja schon konkreter.
Oliver1994
Beiträge: 321
Registriert: 15.06.2008 21:52

Beitrag von Oliver1994 »

Jo danke!
Oliver1994
Beiträge: 321
Registriert: 15.06.2008 21:52

Beitrag von Oliver1994 »

Hallo!

Ich möchte gerne das er einen bestimmten String an ein bestimmtes Gadget sendet!

Jetzt werden viele sagen "Nimm doch einfach SetGdagetText()" << Diese Lösung ist bei mir aber nicht machbar da es sich ums WebGdaget handel!Nin habe ich folgenden Code geschrieben! (Ich weiß er ist nicht besonders ordentlich aber es war auch nur ein kleiner TEST!)

Dies ist nur ein Ausschnitt...

Warum funzt er nicht! Wenn ich den Befehl so nehme funzt es :-(



Code: Alles auswählen

  
name$ = "ichbins"

name$ = LCase(name$) 

SetActiveGadget(#Web_0)

For k=1 To Len(name$)
      char$ = StringField(name$, k, "")
      Debug char$
       If char$ = "a"
       keybd_event_(#VK_A,0,0,0)
       ElseIf char$ = "b"
       ElseIf char$ = "a"
       keybd_event_(#VK_A,0,0,0)
       ElseIf char$ = "b"
       keybd_event_(#VK_B,0,0,0)
       ElseIf char$ = "c"
keybd_event_(#VK_C,0,0,0)
ElseIf char$ = "d"
keybd_event_(#VK_D,0,0,0)
ElseIf char$ = "e"
keybd_event_(#VK_E,0,0,0)
ElseIf char$ = "f"
keybd_event_(#VK_F,0,0,0)
ElseIf char$ = "g"
keybd_event_(#VK_G,0,0,0)
ElseIf char$ = "h"
keybd_event_(#VK_H,0,0,0)
ElseIf char$ = "i"
keybd_event_(#VK_I,0,0,0)
ElseIf char$ = "j"
keybd_event_(#VK_J,0,0,0)
ElseIf char$ = "k"
keybd_event_(#VK_K,0,0,0)
ElseIf char$ = "l"
keybd_event_(#VK_L,0,0,0)
ElseIf char$ = "m"
keybd_event_(#VK_M,0,0,0)
ElseIf char$ = "n"
keybd_event_(#VK_N,0,0,0)
ElseIf char$ = "o"
keybd_event_(#VK_O,0,0,0)
ElseIf char$ = "p"
keybd_event_(#VK_P,0,0,0)
ElseIf char$ = "q"
keybd_event_(#VK_Q,0,0,0)
ElseIf char$ = "r"
keybd_event_(#VK_R,0,0,0)
ElseIf char$ = "s"
keybd_event_(#VK_S,0,0,0)
ElseIf char$ = "t"
keybd_event_(#VK_T,0,0,0)
ElseIf char$ = "u"
keybd_event_(#VK_U,0,0,0)
ElseIf char$ = "v"
keybd_event_(#VK_V,0,0,0)
ElseIf char$ = "w"
keybd_event_(#VK_W,0,0,0)
ElseIf char$ = "x"
keybd_event_(#VK_X,0,0,0)
ElseIf char$ = "y"
keybd_event_(#VK_Y,0,0,0)
ElseIf char$ = "z"
keybd_event_(#VK_Z,0,0,0)
ElseIf char$ = "1"
keybd_event_(#VK_1,0,0,0)
ElseIf char$ = "2"
keybd_event_(#VK_2,0,0,0)
ElseIf char$ = "3"
keybd_event_(#VK_3,0,0,0)
ElseIf char$ = "4"
keybd_event_(#VK_4,0,0,0)
ElseIf char$ = "5"
keybd_event_(#VK_5,0,0,0)
ElseIf char$ = "6"
keybd_event_(#VK_6,0,0,0)
ElseIf char$ = "7"
keybd_event_(#VK_7,0,0,0)
ElseIf char$ = "8"
keybd_event_(#VK_8,0,0,0)
ElseIf char$ = "9"
keybd_event_(#VK_9,0,0,0)
ElseIf char$ = " "
keybd_event_(#VK_SPACE,0,0,0)
Else 
MessageRequester("Log", "Error! Der Name darf nur aus Zeichen oder Ziffern bestehenen!",0)
EndIf
Gruß

JENS
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Sehr coole Aktion :lol:

ein Blick in die ASCII-Tabelle, und der Vergleich mit den Virtual-Keycodes (den #VK- Konstanten) hätte dich schonmal auf eine weitaus kürzere Lösung bringen können.

Aber versuchs doch mal so! (Code eben zusammengeklackert, nicht getestet...mit etwas Pech hast du lediglich Buchstaben-Unterstützung...)

Code: Alles auswählen

Procedure Tippen(sVALUE.s) 
    If Len(sVALUE) <> 1
        MessageRequester("Fehler!","So läuft das nicht! Nur 1 Buchstabe zur Zeit!")
        End
    EndIf
    
    lASC = Asc(sVALUE)
    lKeyCode = VkKeyScan_(lASC)
    
    If lASC >= 65 And lASC <= 90
        lUCase = #True
    EndIf

    ;Shift drücken...
    If lUCase
        KeyBd_Event_(#VK_SHIFT, #Null, #Null, #Null)
    EndIf

    ;Taste drücken
    KeyBd_Event_(lKeyCode, #Null, #Null, #Null)

    ;Shift loslassen
    If lUCase THEN
        KeyBd_Event_(#VK_SHIFT, #Null, #KEYEVENTF_KEYUP, #Null)
    EndIf
    
    SLEEP(1)

EndProcedure


 sNAME.s = "dAs isT jA oberc0OL!"

 For i.l=1 To Len(sName)
   Tippen(Mid(sName,i,1))
 Next    
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Oliver1994
Beiträge: 321
Registriert: 15.06.2008 21:52

Beitrag von Oliver1994 »

Aber PureBasic kannst du schon oder!

es gibt nicht:

If lUCase THEN
KeyBd_Event_(#VK_SHIFT, #Null, #KEYEVENTF_KEYUP, #Null)
EndIf

sondern

If lUCase
KeyBd_Event_(#VK_SHIFT, #Null, #KEYEVENTF_KEYUP, #Null)
EndIf

oder seleep(1) ist delay(1)

Aber trotzdem Danke...

Gruß

JENS
Antworten