KeyWatch geschrieben Juni/Juli 1997 von Manfred Lippert
========

     --- Programmbergreifende Tastatur-Shortcuts

KeyWatch berwacht alle Tastatureingaben, die mit gleichzeitig
gedrckter Control- und Alternate-Taste erfolgen. Desweiteren bietet
KeyWatch ber eine Cookie anderen Programmen die Mglichkeit, sich in
diese Tastendrcke "einzuklinken". Somit werden programmbergreifende
Shortcuts mglich.

Ein Programm, das KeyWatch benutzt, ist z.B. der Desktop Jinnee. Ist
KeyWatch installiert, so sind die Shortcuts in Jinnee angemeldeter
Applikationen jederzeit mglich, sofern die Shortcuts mit
Control+Alternate ausgelst werden. Ebenso sind die Quick-Keys davon
betroffen.

Wichtig: KeyWatch mu dazu vor Jinnee installiert sein.

Unter MagiC legt man sich deshalb KeyWatch am besten in den
START-Ordner. Der genaue Pfad ist in der MAGX.INF neben dem
_APP-Eintrag angegeben und lautet meist C:\GEMSYS\MAGIC\START\.

Hinweis: KeyWatch funktioniert nur, falls bei der Installation im
Cookie-Jar noch Platz fr den KeyWatch-Cookie vorhanden ist. KeyWatch
erweitert den Cookie-Jar also nicht selbstndig.

Das Programm darf beliebig - aber nur zusammen mit diesem Text und
beides unverndert - weitergegeben werden.

Zugabe: Das beiliegende kleine Progrmmchen MORECOOK.PRG erweitert den
Cookie-Jar auf 50 Eintrge. MORECOOK.PRG sollte mglichst weit vorne
im AUTO-Ordner (nicht START-Ordner!) - meist C:\AUTO\ - liegen. Unter
MagiCMac nicht vergessen, MORECOOK mglichst weit vorne in der
AUTOEXEC.BAT (falls vorhanden) einzutragen.

--------- fr Programmierer: ----------

KeyWatch installiert einen Cookie namens 'KyWt' dessen Wert auf
folgende Struktur zeigt:

typedef struct
{
	int cdecl (*install_func)(keywatch_func func);
	void cdecl (*remove_func)(keywatch_func func);
} KEYWATCH_COOKIE_STRUCT;

wobei der Parameter keywatch_func folgendermaen definiert ist:

typedef int cdecl (*keywatch_func)(int key, int shift);

install_func ist also ein Zeiger auf eine Funktion, die man aufruft,
wenn man eine Shortcut-Routine einklinken will. Als Parameter bergibt
man genau diese Routine.

Liefert install_func einen Wert ungleich 0, so war die Installation
erfolgreich.

In diesem Falle mu man unbedingt am Programmende remove_func
aufrufen, um die Routine wieder zu deinstallieren.

Zur eingeklinkten Routine selbst:

keywatch_func ist ein Zeiger auf eine Funktion, die bei jedem
Control+Alternate-Tastendruck aufgerufen werden soll.

Die Routine erhlt als Parameter in key die gedrckte Taste und in
shift die gedrckten Umschalttasten. Das Format von key ist wie das
vom evnt_keybd() gelieferte: Bit 0-7 = ASCII-Code, Bit 8-15 =
Scan-Code. Das Format von shift ist wie das von Kbshift() gelieferte.

Zurckliefern mu die Funktion einen Wert ungleich 0 (im Register d0),
falls die Taste ausgewertet wurde. Konnte die Funktion dagegen mit der
Taste nichts anfangen, so mu sie unbedingt 0 zurckgeliefern! Nur so
haben auch andere eingeklinkte Shortcut-Routinen eine Chance, an
Tasten zu kommen.

Achtung! Es ist darauf zu achten, da die eingeklinkte Routine unter
fremden Applikationen luft! Die Taste wird vom evnt_multi der
Top-Applikation ausgefiltert und die eingeklinkte Routine quasi von
dieser Applikationen aufgerufen. Man sollte also vorsichtig bei
AES-Aufrufen oder hnlichem sein. Auerdem sollte die Routine so wenig
Stack wie mglich benutzen.

Viel Spa wnscht
Manfred
