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

Beitrag von Oliver1994 »

Aber wenn man das ändert funzt der Code!

THX!

Ich glaube du warst halb in einer anderen Sprache drin...

Gruß

JENS
Oliver1994
Beiträge: 321
Registriert: 15.06.2008 21:52

Beitrag von Oliver1994 »

So nun wollte ich natürlich auch das es mit Zahlen funzt und habe etwas hinzugefügt:

Code: Alles auswählen

Procedure StringSend(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
    Else
    OtherChr = #True    
    EndIf

    If OtherChr = #True And lASC >= 48 And lASC <= 57
    lUCase = #True
    OtherChr = #False
    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
        keybd_event_(#VK_SHIFT, #Null, #KEYEVENTF_KEYUP, #Null)
    EndIf
   
    Delay(1)

EndProcedure
Jetzt schreibt er habe irgend ein kack...

Weiß jemand was da falsch is?

Gruß

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

Beitrag von Tafkadasom2k5 »

Oliver1994 hat geschrieben:So nun wollte ich natürlich auch das es mit Zahlen funzt
Das funktioniert auch mit Zahlen einwandfrei ö.Ö

Sonderzeichen funktionieren nicht wirklich, da hast du wahr, aber Zahlen und Buchstaben funktionieren wie 'ne 1!

Also mit meiner ursprünglichen Routine, deine neue Routine spuckt tatsächlich Müll aus.

Und das ich 1-2 THENs vergessen habe wegzunehmen- stimmt. Ich nutze seit ewigkeiten kein Purebasic mehr, und habe nur noch ne Demo (und mit dieser kann ich natürlich keine APIs kompililieren, deshalb musste ich ne andere Sprache verwenden)

Gr33tz
Tafkadasom2k5
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!
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Sorry für den Doppelpost, hier ne erweiterte Variante, die ich nicht testen konnte bisher...)


Ich weiß nicht, ob das mit den HiBytes/LoBytes so funkltioniert. In meinem original getesteten Quelltext waren die Variablen "DWORD", und ausgelesen wurde mit Hi(BYTE,WERT)/Lo(BYTE,WERT). Ich weiß nicht,wie sich Pure hier verhält und kann es mangels API auch nicht testen... Wie gesagt, man muss den Wert von VkKeyScan_ auf HiByte (Extra Tasten) und LoByte(Tastendruck) abfragen.

Code: Alles auswählen

#SHIFT = 1
#CTRL = 2
#ALT  = 4

Procedure.b LoByte(Value.b)
  ProcedureReturn Value & $F
EndProcedure

Procedure.b HiByte(Value.b)
  ProcedureReturn (Value >> 4) & $F
EndProcedure 

Procedure Tippen(sVALUE.s)
    If Len(sVALUE) <> 1 
        MessageRequester("Fehler","Ey! Nur ein Buchstabe zur Zeit!")
        End
    EndIf

    
    lKeyCode.l   = VkKeyScan_(Asc(sVALUE))
    lExtraKeys.l = HiByte(lKeyCode)
    lKeyCode     = LoByte(lKeyCode)
    ;MessageRequester("Nachricht",sVALUE+":"+Str(lExtraKeys)+"|"+Str(lKeyCode))
   

    ;Shift drücken...
    If (lExtraKeys And #SHIFT) 
        KeyBd_Event_(#VK_SHIFT, #Null, #Null, #Null)
    EndIf
    
    ;Alt drücken...
    If (lExtraKeys And #ALT) 
        KeyBd_Event_(#VK_MENU, #Null, #Null, #Null)
    EndIf

    ;CTRL drücken...
    If (lExtraKeys And #CTRL) 
        KeyBd_Event_(#VK_CONTROL, #Null, #Null, #Null)
    EndIf
    
    ;Taste drücken
    KeyBd_Event_(lKeyCode, #Null, #Null, #Null)

    ;Shift loslassen
    If (lExtraKeys And #SHIFT) 
        KeyBd_Event_(#VK_SHIFT, #Null, #KEYEVENTF_KEYUP, #Null)
    EndIf
    
    ;ALT loslassen
    If (lExtraKeys And #ALT) 
        KeyBd_Event_(#VK_MENU, #Null, #KEYEVENTF_KEYUP, #Null)
    EndIf
    
    ;CTRL loslassen
    If (lExtraKeys And #CTRL) 
       KeyBd_Event_(#VK_CONTROL, #Null, #KEYEVENTF_KEYUP, #Null)
    EndIf

    Delay(1)

EndProcedure

 sNAME.s = "W0000hoow@lÖl.de!! ;D"

 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!
Antworten