Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Tasten abfrage bei ncht aktiven Fenster

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Thorben



Anmeldungsdatum: 26.04.2005
Beiträge: 173
Wohnort: SH

BeitragVerfasst am: 10.10.2005, 21:02    Titel: Tasten abfrage bei ncht aktiven Fenster Antworten mit Zitat

Hallo

Ich habe vor ein Programm zu programmieren welches im hintergrund läuft und mitzählt wi oft man welche taste am tag gedrückt hat.
Wie man ein programm im hintergrund laufen läst weiß ich mitlerweile
aber wie kann ich jetzt die tastartur abfragen?

vielen dank für eure antworten Thorben
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 10.10.2005, 21:28    Titel: Antworten mit Zitat

Hallo.

Dafür musst du auf WinAPIs zurückgreifen. Habe dazu mal einen kleinen code geschrieben, wo allerdings der unterschied zwischen groß und klein nicht ganz klappt.

Code:

Declare Function GetAsyncKeyState Lib "user32" ( _
      ByVal vKey As Long) As Integer
screen 12


dim i as ubyte
   

do
   for i = 0 to 254
      a=GetAsyncKeyState(i)
               
      if a <> 0 and i <> 166 and i <> 16 then  '166 und 16 gehoeren zu schift, sollen nicht ueberprueft werden
         if i <> 160 then
             if a = 1 then
                tmp$=UCASE$(CHR$(i))  'klappt noch nicht ganz, buchstaben groesser bzw. kleiner machen
             ELSE                     'wenn a nicht 1 ist, dann ist das zeichen oft(vll. auch immer) groß
                tmp$=LCASE$(CHR$(i))
             End if
         end if
         do :loop until GetAsyncKeyState(i)=0 'so lange warten, bis die taste nicht mehr gedrueckt wird
            exit for                          'um doppel Zaehlungen zu vermeiden
      end if
   next i
   locate 1,1: print tmp$;"              ";asc(tmp$);"       "
   sleep 1
loop until inkey$ <>"" 'so lange laufen, bis in dem aktiven(freebasic-programm) fenster eine taste gedrückt wurde
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 11.10.2005, 13:06    Titel: Antworten mit Zitat

Hallo!

Klingt irgendwie nach einem Keylogger?! durchgeknallt
Oder irre ich mich da (wieder)?

Greetings,
Mao
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 12.10.2005, 16:15    Titel: Antworten mit Zitat

Hallo.

Ich habe mal (NICHT UM ZU SPIONIEREN) versucht, ein Programm zu machen, welches jede Taste aufzeichnet und am ende in eine Datei speichert. Doch das klappt nie.

Code:

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

dim i as ubyte
   
open "D:\test.txt" for output as #1
do
   for i = 0 to 254
      a=GetAsyncKeyState(i)
               
      if a <> 0 and i <> 166 and i <> 16 then  '166 und 16 gehoeren zu schift, sollen nicht ueberprueft werden
         if i <> 160 then
             if a = 1 then
                tmp$+=UCASE$(CHR$(i))  'klappt noch nicht ganz, buchstaben groesser bzw. kleiner machen
             ELSE                     'wenn a nicht 1 ist, dann ist das zeichen oft(vll. auch immer) groß
                tmp$+=LCASE$(CHR$(i))
             End if
         end if
         do :loop until GetAsyncKeyState(i)=0 'so lange warten, bis die taste nicht mehr gedrueckt wird
            exit for                          'um doppel Zaehlungen zu vermeiden
      end if
   next i
   sleep 1
loop until inkey$ <>"" 'so lange laufen, bis windows zum beenden die Tastenkombination CHR$(255)+"X" sendet (glaube ich) :-)

print #1,tmp$
close #1
end


edit:

hab ne notlösung:

Code:

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

dim i as ubyte
   
do
   for i = 60 to 200
      a=GetAsyncKeyState(i)
               
      if a <> 0 and i <> 166 and i <> 16 then  '166 und 16 gehoeren zu schift, sollen nicht ueberprueft werden
         if i <> 160 then
             if a = 1 then
                tmp$+=UCASE$(CHR$(i))  'klappt noch nicht ganz, buchstaben groesser bzw. kleiner machen
             ELSE                     'wenn a nicht 1 ist, dann ist das zeichen oft(vll. auch immer) groß
                tmp$+=LCASE$(CHR$(i))
             End if
         end if
         do :loop until GetAsyncKeyState(i)=0 'so lange warten, bis die taste nicht mehr gedrueckt wird
            exit for                          'um doppel Zaehlungen zu vermeiden
      end if
   next i
   if LEN(tmp$)>50 then
       open "D:\test.txt" for append as #1
       print #1,tmp$;
       tmp$=""
       close #1
    end if
   sleep 1
loop until inkey$ <>"" 'so lange laufen, bis in dem aktiven(freebasic-programm) fenster eine taste gedrückt wurde
                    'oder windows zum beenden die Tastenkombination CHR$(255)+"X" sendet (glaube ich) :-
end
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Thorben



Anmeldungsdatum: 26.04.2005
Beiträge: 173
Wohnort: SH

BeitragVerfasst am: 17.10.2005, 14:12    Titel: Antworten mit Zitat

Vielen Dank habt mir sehr geholfen! happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 21.10.2005, 15:13    Titel: Antworten mit Zitat

Da fällt mir gerade auf, wenn du ein grafik-fenster hast, dann kannst du auch multikey benutzen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz