Tworzenie prostej klawiatury ekranowej

0

Mam pytanie jak zrobić aby klawiatura ekranowa w delphi mogła wyświetlać znaki w innych programach... Póki co ma tak

if ActiveControl.ClassName = 'TEdit' then //sprawdzenie czy aktywna kontrolka jest edycyjną
  keybd_event(ord('1'), 1, 0, 0);
keybd_event(ord('1'), 1, KEYEVENTF_KEYUP, 0); //dopisanie cyfry 1 

To oczywiście działa ale tylko w obrębie mojego programu, jak to zmodyfikować aby działało dla innych okien jak np. notatnik?

0

Pobrać uchwyt kontrolki wskazanej kursorem myszki (WindowFromPoint). Sprawdzić nazwę klasy kontrolki. Jeśli AnsiLowerCase(ta_nazwa) zawiera słowo edit (lub inna klasa na ktorej Tobie zależy) wtedy aktywować tę kontrolkę (jeśli nie jest jeszcze aktywna) po czym można już zasymulować naciskanie i puszczanie klawiszy. Do symulacji klawiszy skorzystał bym raczej z nowszej wersji funkcji keybd_event czyli SendInput. Dodam, że oczywiście standardowe konotrolki edycyjne mogą odbierać znaki wysłane z komunikatem WM_CHAR. Więcej info znajdziesz w google i na MSDNie. Jako przykład operacji myszką i wybierania kontrolek mogę pokazać coś co napisałem dla siebie. Zaraz pewnie ktoś mi zarzuci, że kod nie jest idealny. Pewnie i tak jest, ale ja pisałem go tak aby działał jak mi zależy. Kierując się bardziej mottem "cel uświęca środki". Wprawdzie program nie symuluje wciskań klawiszy, ale dodaje menu pod środkowy przycisk myszki (ponieważ do standardowego menu pod prawoklik nie można dodać własnych poleceń). Dodatkowo działa ze skrótami klawiszy. Program powstał jakiś czas temu, bo miałem dość jak mi instalator sugeruje ścieżkę do instalacji złożoną w większości z małych liter, ja wolę mieć nazwy większości katalogów pisane wielkimi literami. Może kod się Tobie przyda. Ale proszę przy wykorzystaniu jego części lub całości miło byłoby abyś wspomniał o autorze oryginału.

1 użytkowników online, w tym zalogowanych: 0, gości: 1