Seite 2 von 2

Verfasst: 26.01.2009 18:25
von Oliver1994
Aber wenn man das ändert funzt der Code!

THX!

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

Gruß

JENS

Verfasst: 26.01.2009 18:33
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

Verfasst: 27.01.2009 09:49
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

Verfasst: 27.01.2009 10:58
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