Nicht ganz einfach bei der Erstellung eines Tastaturmakrorecorders ist
folgendes Problem:
Tastaturstatusabfragen (Int16 Funktion 01 oder 11) knnen von Programmen
auf 2 Weisen verwendet werden:
1. Gewhnliche Abfrage
Hierbei wird im Polling der Status abgefragt. Alternativ knnte auch direkt
(mit Warten auf Taste) das BIOS gefragt werden (ReadKey). Damit schneidet
sich der Programmierer allerdings den Weg ab, bspw. in einer objektorien-
tierten Benutzerschnittstelle auch auf weitere Ereignisse reagieren zu knnen,
wie z.B. Mausereignisse, Zeittakte und das Erfassen des Drckens von
CTRL, SHIFT oder ALT zum Umschalten auf die Menleiste.
Allerdings knnte es auch Programme geben, die fr Tasteneingaben ausschlie-
lich die Funktion 16/00 bzw. 16/10 verwenden. Hierfr werde ich im Programm
MREC einen Schalter vorsehen.
2. Abfrage whrend einer Aktion
Das Programm PROFIB.EXE z.B. fragt whrend des Druckvorgangs stndig die
Tastatur ab, ob eine Taste gedrckt wurde, und leert den Tastaturpuffer
gegebenfalls. Blo wie soll man den Unterschied zum Fall 1. feststellen???
Nach auen ist dies absolut dasselbe Verhalten!
Nmlich in Turbo Pascal:
{$X+} (1)
for i:=1 to irgendwohin do begin
TuIrgendwas;
If KeyPressed then If ReadKey=0 then ReadKey;
{Tastaturpuffer stets leeren!}
end;
Das Tastaturabfrageprogramm macht "dagegen":
{$X+} (2)
repeat until keypressed;
C1:=ReadKey; {ASCII-Code}
if C1=0 then C2:=ReadKey; {Scan-Code erweiterte Tastatur}
Lsungen:
1. Der Interrupt 16/01 bzw. 16/11 meldet *stets* "Keine Taste", d.h.
die TP-Fkt. KeyPressed meldet stndig FALSE. Lt Programme mit dem
Programmstck (2) aufhngen, leider.
Um beim Test nicht RESET drcken zu mssen, ist eine normale
Tastaturabfrage zum Ausbruch aus der Schleife erforderlich
2. Der Interrupt 16/01 bzw. 16/11 meldet eine gewisse (ausreichend hohe)
Anzahl an "Keine Taste", bis er die nchste Taste "zum Verkauf" feilbietet.
Dies funktioniert recht universell, es ist aber ein verteufelter
Kompromi zu schlieen:
- Die Zahl ist *so* hoch zu whlen, da whrend eines Jobs keine Taste
(mehr) emuliert wird (korrekte Funktion der Routine (1)).
- Bei einer hohen Zahl dauert die Routine (2) sehr lange; oft viel lnger
als bei normaler Tastatureingabe
Als Lsung hierfr knnte man die *echte* Tastatur abfragen und bei gedrckter
Taste einen Ausbruch aus dieser Schleife erzwingen (siehe Lsung 1)
3. Ausnutzen knnte man, da bei Druckjobs sich auf dem Bildschirm etwas
ndert, z.B. eine Zahl hochluft oder eine Balkengrafik sich verndert.
Man knnte wiedergabeseitig (?) diese Vernderung benutzen, um den Zhler
zurckzusetzen, der ansonsten analog zu Lsung 2 die Leseversuche zhlen
mu.
4. Die Umschaltung der Anzahl knnte dynamisch whrend der Emulation geschehen.
Die Registrierung ist jedoch nicht whrend der Aufnahme mglich, soda
der entsprechende Befehl nachtrglich in die Steuerdatei eingefgt werden
mu.
Weitere Probleme und Lsungen:
- Die Tastenanschlge sind jedermann zugnlich; Pawrter stehen praktisch
im Klartext im Tastenfile. (Lsung: Scrambeln, was sonst!!)
- Das Tastaturfile kann also in 3 Arten vorkommen:
+ als editierbare ASCII-Datei ("Text")
+ als Binrdatei mit Tastencodes ("File of Integer")
+ als gescrambelte Binrdatei (Dateiaufbau ist natrlich geheim!)
Umwandlungsmglichkeit mu via MREC mglich sein!
Vorgefundene Kodierung: UTF-8 | 0
|