PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Qbasic



Robin Imhof
11.05.2004, 13:51
Hi,
weiß jemand wie man mit Qbasic einen Tastendruck der Tastatur simuliren kann?
Also das ich ein Programm habe des wenn ich es ausführe die taste "K" betätigt.
Danke
R Imhof

MacSeck
11.05.2004, 20:49
Da müsstest Du Dich in den Keyboard Interrupt einklinken. Inwieweit das allerdings mirt Quickbasic vernünftig geht????

Kirschbaum Power-Basic kann das, die machen auf ähnliche Tour Popup-Menüs etc.

Ansonsten Pascal oder C, da wäre das kein Thema.
Ich denke es ist allerdings einfacher, Du nimmst eine alte PC-Tastatur und ein Relais über der jeweiligen Taste, d.h. am Controller eben passende Spalte und Zeile verbinden. Das Relais kannst du dann z.B. an die DTR Leitung einer COM hängen und sobald du die öffnest mit open com1:9600,n,8,1,rs,cd" for input as #1 wird die DTR Leitung gesetzt und Du bekommst Dein "K".
close#1 macht das dann wieder rückgängig.
Nimmst ein Relais mit 2 weiteren Kontakten, dann kannst Du auch die Tastatur gegen Deine Schaltung in dem Moment austauschen. Das solltest Du allerdings dann mit 2 Relais machen, eins etwas verzögert, also erst Keyboard abklemmen und Deine Schaltung stattdessen dran, dann das "K" abschicken, dann fallen beide Relais wieder ab und Dein Keyboard ist wieder dran.:)

Robin Imhof
11.05.2004, 20:59
Hallo wie kann man das mit Power-Basic machen???? Danke

MacSeck
12.05.2004, 11:41
Auszug aus PB3.0 Venutzerhandbuch S.356:

"Mit dem Befehl POPUP STUFF von PowerBasic können Sie Tastatureingaben in den Tastaturpuffer setzen, als ob diese tatsächlich von der Tastatur kommen würden.
POPUP(3) liefert die Anzahl der Zeichen, die in den Tastaturpuffer gestellt werden können."

Das "zum TSR" machen also Terminate and stay resident erledigt der Popup Aufruf selbst, d,h. nach korrektem Aufruf und Beenden des Programms müsstest Du jedes andere KProgramm ganz normal starten können, das diese Tastatur-mogelei untergejubelt bekommen soll.
Weiteres im Handbuch, ggf. schau Dir mal die DEMOs an; z.B. Bildschirmschoner etc.:)

MacSeck
12.05.2004, 12:04
Andere Möglichkeit: Pseudo-Semaphore als Dateien:

Beispiel:
Du fragst die Tastatur ab. Vorher guckst du nach, ob eine gewisse Datei existiert und da was drin steht. Falls ja liest Du das Zeichen und nimmst das anstatt der Tastatureingabe. Könnte dann so in etwa aussehen:
open "Keysim.dat" for input as #1
on error resume TastaturLesen
REM also wenn diese Datei nicht existiert.
readln #1,Taste$
close #1
shell "del Keysim.dat"
REM müsste auch im Basic gehen (delete #1 oder so); also wegmachen.
goto Ende:
TastaturLesen: Taste$=inkey$
Ende: REM Fertig

Wenn Du jetzt z.B. unter Windows oder Software-Karussell oder sowas multitaskmässigem z.B. im MS DOS Fenster diese Datei erneut erzeugst:
copy con: Keysim.dat
K
^Z

müsste dein Programm diese finden und das K benutzen statt die Tastatur abzufragen. Wenn es das getan hat löscht es diese und irgendwer (ein Programm) z.b. Pascal könnte erneut eine erzeugen.
BSP Pascal
program J;
uses dos;
f:text;
begin
assign (f,'Keysim.dat');
rewrite (f);
writeln(f,'J');
close(f)
end.

MacSeck
12.05.2004, 12:42
Noch eins: Im Programm muss als erstes stehen :

ERROR ON

sonst macht er dieses ON ERROR RESUME... nicht,
und beim Compilieren muss "Checking between statements" angekreuzt sein.

Das können auch nur die Compiler, deswegen geht sowas in dem abgespechten QBASIC nicht.

noch´n Tipp für Quickbasic 4.x Compiler:
Den Compiler mit QB /bi aufrufen, dann bindet er eine Lib ein, mit der Du an DOS Interrupts herankommst. Kirschbaum macht das automatisch.
Dann geht auch das so beliebte
REG AX=DosFunktionsnummer
REG BX=sonstwas
etc.
etc.
CALL INTERRUPT &h10 (das ist Video IRQ; aber Keyboard IRQ gibt es auch, also ggf. auch da mal nachschauen). Gibt mit Sicherheit Funktionen wie ClearKeyboardBuffer oder ähnliches, die auf diese Weise angesprochen werden können.:)

Robin Imhof
12.05.2004, 19:01
Ok,

ich werde es mal mit quick basic probieren kirschbaum find ich nämlich nicht als Freeware.
Danke.
:rolleyes:

LameM
12.05.2004, 19:22
hallo robin,


habs zwar schon seit mindestens 10 jahren nichts mehr mit qbasic gemacht, aber es gibt da die befehle peek/poke

damit kann man direkt werte in den speicher schreiben bzw. auslesen.

wenn du nun direkt auf die speicherstellen des tastaturbufers zugreifst, kannst du beliebige tasten(-kombinationen) simulieren.

dazu musst du mit def seg (siehe qbasic hilfe) erstmal das bios-segment 0040h setzen und kannst dann auf adresse 1Eh bis 3Eh zugreifen, das sind insgesamt 16 wörter des tastaturbuffers. im high-byte der ascii-code und im low-byte der scancode .

an adresse 001Ah ist der Head (Adresse der ersten taste im buffer) und in 001Ch die Tail-adresse (letzte taste) des buffers gespeichert, wenn diese werte gleich sind, heißt das, das der tastaturbuffer leer ist, achso der buffer ist nach dem FIFO-prinzip organisiert d.h. die taste die zuerst gedrückt wurde steht auch an erster stelle (beim auslesen muss der anfangszeiger um 2 erhöht werden, bzw. beim schreiben halt erniedrigt)

probier einfach einmal damit herum, da wirst du schnell herausfinden wie es funnktioniert
ansonsten frag einfach nochmal :-)

LameM
edit: scan-code der taste K= 25h

hellraiser
12.05.2004, 19:33
einspruch. meeensch, herr staatsanwalt - sie ermitteln nur die hälfte! (nix für ungut) :rolleyes:

@robin: in der theorie funktioniert das was LameM geschrieben hat.
in der praxis auch durchaus, wenn man sich auf bestimmte betriebssysteme festlegt. Spätestens mit WinNT, 2K, XP oder Linux wird dir da ein strich durch die rechnung gemacht, denn diese betriebssysteme erlauben keinen direkten speicherzugriff auf adressen ausserhalb des für das programm reservierten speicherbereichs.

Falls du das allerdings ausschliesslich für Win98 und Abwärts (in der DOSe funktionierts natürlich auch) verwenden willst, dann sollte das kein problem sein.

Falls du die ganze geschichte in einem pseudo-multitasking-schrunzmichtot-betriebssystem made by KleinWeich realisieren willst würde ich dir vorschlagen VB, C oder Pascal (freepascal tuts auch) zu verwenden und die Winklotz API zu verwenden.
Dort gibt es irgendwo eine "SendKeys" funktion (habe ich in Delphi selbst schon oft genug benutzt).
Dort kannst du auch sicherstellen, dass das richtige Programm deine virtuelle Tastatureingabe auch bekommt.

Wenn du Beispielsweise bei Win98 nur einen Tastendruck ohne sendkeys simulierst reagiert nur das programm darauf, welches sich gerade im "vordergrund" befindet, also aktiv ist.

Gruss, Malte

Robin Imhof
16.05.2004, 01:01
Ich werde es einmal genauer erläutern was ich vorhabe.

Also:
Ich möchte einen Rechner mit win95 aufsetzen und als MP3 player laufen lassen.
Da eine Tastatur zu groß ist will ich ein Prog schreiben das wenn ich jetzt einen Taster am LPT-Port betätige eine Taste der tastatur simuliert wird. Dieses Prog muss aber im hintergrung laufen weil Winamp im vordergrung läuft ansonsten kann ich die Tasten eingabe nicht benutzen.
Und wie schreib ich so ein Prog mit VB?
Ich werde es jetzt aber erst einmal mit Quickbasic aus testen:)
Also schoneinmal danke schön

sparky
16.05.2004, 01:47
@Robin,
ich kann dir zwar keine Tips zur programmierung geben, aber vieleicht ist das auch garnicht nötig.

Schau dir mal diese Seien an:
http://sixdots.de/?id=miriam&lang=de
Mit Miriam kannst du Winamp steuern. Dazu baust du dir einen Infrarotempfänger (ca. 5 Bauteile) für die serielle Schnitttstelle. Dann bringst du Miriam bei, was sie bei einem Tastendruck auf der Fernbedienung machen soll. Auf diese weise kannst du den gesammten Rechner steuern, und sogar herunterfahren. Ist wirklich gut und funktioniert!
Mfg,
Kurt

hellraiser
16.05.2004, 12:06
@robin

hättest du das gleich gesagt... du brauchst unter plugins/general auf winamp.com nachsehen:

Hier ein Programm welches du von deinem VB Programm aus aufrufen kannst, je nachdem welche Taste am Parport gedrückt wird (http://www.winamp.com/plugins/details.php?id=139183)

Andererseits kannst du auch das IR Teil von Sparky nehmen

hier noch ein weiteres IR Plugin (http://www.winamp.com/plugins/details.php?id=138743)

da du an der soundkarte eh nen gameport hast kannst du auch
das plugin für joystick steuerung verwenden (http://www.winamp.com/plugins/details.php?id=134861) (immerhin 4 knöpfe und 2 analoge regler möglich)

soviel dazu... und es gibt noch mehr steuerungsplugins :)

MacSeck
16.05.2004, 16:32
...ist schon erstaunlich mit welcher Akribie heutzutage Treiber, Plugins, Active-X-Controls etc. programmiert werden und in Tiefen der Betriebssysteme eindringen...

Dual Joystick Overlay zur Steuerung von 4 Pustern, abhängig ob Lara Croft nun selber Hand anlegt oder gleich einen bläst; letzteres erfordert USB-Joy...Teil von Beate und G-Punkt... (sorry I.-Pod) von Apple..) - mehr verkauft als Beate je Vibros unter die Menschheit gestreut hat - abgesehen von Vibrations-Handys zum sich selber anrufen...

Vielleicht findet sich doch dann in Zukunft mal ein BS-Programmierer, der fernab von Vibro-USBs und JPEG / MPEG ... Penis Extensions mal ein stabiles Filesystem programmiert...

Man soll die Hoffnung ja nicht aufgeben:) .
Könnte ggf. unser Bevölkerungsproblem / Nachwuchsproblem lösen, wenn die Leute statt Service-Packs aufzuspielen wieder mal mehr Zeit zum GV hätten.

hellraiser
16.05.2004, 19:40
@andreas
GV funktioniert auch während der PC updates einspielt...

Aber mal was anderes: wieso benutzt du dann noch ein defektes betriebssystem? da gibt es was kostenloses und um um längen besseres auf dem freien downloadmarkt... nimm den pinguin! (als BS, nicht zum GV ;)

MacSeck
16.05.2004, 20:06
@Hellraiser: Ich benutze a) Frau, b) Freizeit c) MAC OS, Windows, SUSY, MS-DOS, Unix... was denn noch alles...

Ich denke das reicht.
Was den Pinguin betrifft: Sag denen mal sie sollen nicht von Version zu Version irgendwelche INIT-Tabs in andere Ordner kopieren, in denen man sie nicht erwartet und Kommandos umbenennen wie es ihnen gefällt.
Und dann!!! - - - sollten sie die User ihre Scannertreiber und Netzwerkkarten und Digicams usw. endlich mal im User-Mode drauf los lassen, ohne permanent Kernel-Rebuilds zu fordern. Das schadet der Stabilität des Kernels!!!
Soll sich jeder doch sein Ding einrichten wie er will. Das ist Sinn von UNIX!!!:)

alternativ, wenn das nicht geht, kann ich auch bei WIN98 und MAC-OS <10 bleiben.:mad:

hellraiser
17.05.2004, 12:39
wer fordert denn kernel rebuilds?
wenn du nicht gerade das neueste vom neuesten an hardware ankarrst brauchst du keine kernel patches, sofern das zeugs nicht in der experimental phase ist, laufen die sachen eh modular.
dann richtest die treiber mal eben als root ein und die laufen dann im usermode problemlos... ist zumindest mal meine erfahrung :)

ch.ruder
19.05.2004, 16:30
wenn du unbedingt eine tastatur zur bedienung willst (kein infrarot, joystick oder plug-in) nimm einfach eine alte tastatur und bau sie um. ist relativ einfach.

gruss
ch.ruder

elmar
24.05.2004, 17:55
Hi,

Der Umbau einer Tastatur ist ganz leicht. Nach dem Zerlegen hast Du eine kleine Platine an einem Kabel mit DIN oder PS/2 Stecker. An der seite ist die Kontaktfläche für die Tastaturmatrix.

Jetzt suchst Du Die eine Taste aus, die Du belegen willst und verfolgst die Matrix um zu sehen, welche beiden Kontakte der Leiste damit verbunden werden. Dann lötest Du da einfach einen 08/15 Taster drauf. Das ganze so oft wiederholen, bis Du die gewünschte Tastenanzahl zusammen hast.

Du kannst auch eine Multimediatastatur verwenden. Wenn Du glück hast, sind die Zusatztasten auf einer eigenen Platine/Folie aufgebracht - die kannst Du dann 1:1 in Dein Gehäuse setzen. Software für die Zusatzfunktionen drauf und fertig. Bei meiner Vivancotastatur reagiert der alte Winamp auch so auf die Zusatztasten, ganz ohne Treiber.
Ist es eine Tastaturmatrix, so verfährst Du wie oben beschrieben - nur nimmst Du keine Buchstaben sondern eben diese Zusatztasten. Das hat dann Vorteile, wenn Du wie ich gleich beschreibe eine normale Tastatur zusätzlich optional einstecken möchtest.

Irgendwo am gehäuse machst Du noch eine DIN oder PS/2 Buchse hin und hängst die parallel. Du kannst Tastaturen dank Open Collectorleitungen auch parallel schalten. So kannst Du auch eine normale Tastatur anstecken für Wartungszwecke anstecken.

Gruß
Elmar

Robin Imhof
25.05.2004, 19:43
Danke aller seits ihr habt mir sehr geholfen.
mfg
Robin Imhof