Aktuelle Zeit: 25.01.2021 09:06

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: VirtualKey : So lasse ich einen String schreiben
BeitragVerfasst: 28.04.2007 15:26 
Offline
Benutzeravatar

Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Code:
;/ (c) Folker Linstedt
Procedure WriteVirtualText(Text.s,P.l)
  m=Len(Text)
  Schrift=0
  Grosz=0
  For i=1 To m
    Letter=Asc(Mid(Text,i,1))
   
    If Letter>=48 And Letter<=57
      LetterV=$30+Letter-48
      Schrift=1
    EndIf
   
    If Letter>=65 And Letter<=90
      Grosz=1
      LetterV=$41+Letter-65
      Schrift=1
    EndIf
   
    If Letter>=97 And Letter<=122
       ;Grosz=0
       LetterV=$41+Letter-97
       Schrift=1
    EndIf
   
   
    If Schrift
      If Grosz
         keybd_event_(#VK_SHIFT, 0,1   ,0)
      ;  Delay(P)
      EndIf
     
      keybd_event_(LetterV, 0, 0   , 0)
      Delay(P)
     
     
      If Grosz
         keybd_event_(#VK_SHIFT, 0, 1   , 0)
       ; Delay(P)
       Grosz=0
      EndIf
     
      Schrift=0
    EndIf
   
  Next
 
EndProcedure

WriteVirtualText("folker Folker",40)


Eine ganz lustige Sache, nur am Ende schreibt mir das Programm alles groß. Sobald ich einmal UMSCHALT gedrück habe, bleibt es.
Erneutes Drücken funktioniert nicht und einen Key-Release gibt es so auch nicht. Zu mindest geht es nicht mit dem KEYEVENTF_KEYUP

CAPS gibt es auch nicht. ....

eigentlich will ich nur Shift dazu schalten können und wieder aus.

Dank euch. Gruß, Folker :allright:

_________________
Kinder an die Macht http://scratch.mit.edu/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.04.2007 16:22 
Offline
Benutzeravatar

Registriert: 01.10.2005 13:15
#VK_CAPITAL ist die Capslock Taste. Ich würde die aber nicht nehmen. Warum? Weil auf einigen PC eingestellt ist, dass dann ein Piepton beim Betätigen der Capslock Taste ertönt. Außerdem kann man als Benutzer einstellen, ob die Capslock- oder die Shift-Taste zum freigeben (releasen) der Capslock-Taste gedrückt werden soll - diese Einstellung kannst du nicht wissen. Von daher: Nimm lieber Shift! :)

Wenn ich genug Zeit habe, schreibe ich dir eine schönere Prozedur. :wink:

_________________
PB 4.30
Code:
Macro Happy
 ;-)
EndMacro

Happy End


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.04.2007 16:48 
Offline
Benutzeravatar

Registriert: 01.10.2005 13:15
So, Folker, hier bitte. Meine Prozedur ist doch schon mal ein ganzes Stück übersichtlicher als deine, oder? :wink:
Außerdem habe ich Select verwendet, welches flexibel erweiterbar ist.

Der Parameter "pause" ist frei wählbar und gibt an, wie lang die Pause zwischen den einzelnen Buchstaben sein soll.

Bis jetzt werden nur Zahlen, Buchstaben und Leerzeichen unterstützt, aber wie ich ja sagte, das Ding ist flexibel erweiterbar. :D

Das Delay vor dem Prozeduraufruf dient dazu, dass man noch genug Zeit hat, um nach Notepad zu switchen, damit dort reingeschrieben werden kann.

Ich möchte dir noch was zum flexiblen Erweitern der Prozedur sagen. Hast du schon gemerkt, dass die ASCII-Werte der Zeichen 0, 1, ..., 9 und [Leerzeichen] direkt in keybd_event_() eingesetzt werden können? Mehr dazu steht unten in diesem Posting.

Code:
EnableExplicit

Procedure type(text.s, pause.l=40)
   Protected *pos.Character=@text
   While *pos\c
      Select *pos\c
         Case 'A' To 'Z'
            keybd_event_(#VK_SHIFT, 0, 0, 0)
               keybd_event_(*pos\c, 0, 0, 0)
               keybd_event_(*pos\c, 0, #KEYEVENTF_KEYUP, 0)
            keybd_event_(#VK_SHIFT, 0, #KEYEVENTF_KEYUP, 0)
         Case 'a' To 'z'
            keybd_event_(*pos\c-32, 0, 0, 0)
            keybd_event_(*pos\c-32, 0, #KEYEVENTF_KEYUP, 0)
         Case '0' To '9', ' '
            keybd_event_(*pos\c, 0, 0, 0)
            keybd_event_(*pos\c, 0, #KEYEVENTF_KEYUP, 0)
      EndSelect
      *pos+SizeOf(Character)
      Delay(pause)
   Wend
EndProcedure



Delay(2345)
type("Folker Putt 0190")


Außer dem Pointer *pos brauche ich keine weiteren Variablen. Das Pointern macht meine Prozedur auch so schnell.


Folker, ich möchte dir noch einen Tipp geben: bei Zahlen machst du so eine komische Rechnung. Du schreibst:
> LetterV=$30+Letter-48
aber das ist völlig unnötig. Die Zahl 1 hat den ASCII-Wert 49. Dieser kann sofort in keybd_event_() eingesetzt werden. In deiner rechnung fressen sich $30 und -48 auf, weil $30 gleich 48 ist!

_________________
PB 4.30
Code:
Macro Happy
 ;-)
EndMacro

Happy End


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.04.2007 17:11 
Offline
Benutzeravatar

Registriert: 01.10.2005 13:15
Habe meine Prozedur nochmals verbessert.

Zeilenümbrüche (13), Tabstops (9), Leerzeichen (32) - deren ASCII-Werte können direkt so übernommen werden, weshalb man sie sehr einfach hinzufügen kann.

Man beachte bitte den String, den die Prozedur tippen soll, er erklärt noch einiges, zum Beispiel, dass ungültige Zeichen wie äöüß, die bis jetzt noch nicht vorhanden sind, übersprungen werden. Meiner Meinung nach ist es besser diese zu überspringen, anstatt irgendein Müll tippen zu lassen.

Code:
EnableExplicit

Procedure type(text.s, pause.l=40)
   Protected *pos.Character=@text
   While *pos\c
      Select *pos\c
         Case 'A' To 'Z'
            keybd_event_(#VK_SHIFT, 0, 0, 0)
               keybd_event_(*pos\c, 0, 0, 0)
               keybd_event_(*pos\c, 0, #KEYEVENTF_KEYUP, 0)
            keybd_event_(#VK_SHIFT, 0, #KEYEVENTF_KEYUP, 0)
         Case 'a' To 'z'
            keybd_event_(*pos\c-32, 0, 0, 0)
            keybd_event_(*pos\c-32, 0, #KEYEVENTF_KEYUP, 0)
         Case '0' To '9', ' ', 9, 13
            keybd_event_(*pos\c, 0, 0, 0)
            keybd_event_(*pos\c, 0, #KEYEVENTF_KEYUP, 0)
      EndSelect
      *pos+SizeOf(Character)
      Delay(pause)
   Wend
EndProcedure

Delay(2345)
type("Folker Putt"+#CRLF$+"Zeilen-"+#CRLF$+"umbrüche kann ich auch, so wie Tab"+Chr(9)+"stops. ungültige Zéichen werden (ignoriert). diese müssen erst noch in die Prozedur zum SELECT hinzugefügt werden!")

_________________
PB 4.30
Code:
Macro Happy
 ;-)
EndMacro

Happy End


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.04.2007 17:52 
Offline
Admin

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
@AND51
Es gibt auch nen Edit-Button.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.04.2007 18:00 
Offline
Benutzeravatar

Registriert: 01.10.2005 13:15
Das ist richtig. Aber die Übersicht ist mir wichtiger.

Ich danke dir für dein positives Feedback zu meiner Prozedur! :allright:

_________________
PB 4.30
Code:
Macro Happy
 ;-)
EndMacro

Happy End


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.04.2007 18:10 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
Code:
Procedure SendKeys(Keys.s)
  Protected i.l, KeyCode.w, VirtualKey.b, KeysState.b

  For i = 1 To Len(Keys)
    KeyCode = VkKeyScan_(Asc(Mid(Keys,i,1)))
    VirtualKey = KeyCode & $FF
    KeysState = (KeyCode >> 8) & $FF
   
    Select KeysState
      Case 1 ; Umschalt-Taste wird benoetigt
        keybd_event_(#VK_SHIFT,1,0,0)
      Case 6 ; "Alt Groß"-Taste wird benoetigt
        keybd_event_(#VK_RMENU,1,0,0)
    EndSelect
   
    keybd_event_(VirtualKey,1,0,0)
    keybd_event_(VirtualKey,1,#KEYEVENTF_KEYUP,0)
   
    Select KeysState
      Case 1 ; Umschalt-Taste wieder loslassen
        keybd_event_(#VK_SHIFT,1,#KEYEVENTF_KEYUP,0)
      Case 6 ; "Alt Groß"-Taste wieder loslassen
        keybd_event_(#VK_RMENU,1,#KEYEVENTF_KEYUP,0)
    EndSelect
  Next
EndProcedure


...müsste alle Zeichen unterstützen. :wink:

Mfg DerProgger


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 02.07.2008 14:29 
Offline

Registriert: 10.11.2004 03:22
aktuell hat grad Caine die Routine von Sicro gut brauchen können:

http://www.purebasic.fr/english/viewtop ... 352#250352

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 26.07.2008 21:19 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
Freut mich zu hören :)
Vielen Dank für den Hinweis, Kaeru Gaman. :allright:

Mfg Sicro

_________________
Bild
Warum OpenSource eine Lizenz haben sollte :: DarkColor-Schema für PureBasic
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download – Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: Windows 7 x64 (VirtualBox) :: Neueste PureBasic-Version


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye