Cześć, mam kod, który ma symulować wciskanie klawiszy. Kod jest prosty:
for I := 1 to length(str) do
begin
keybd_event(vkKeyScan(str[i]), 0, 0, 0);
keybd_event(vkKeyScan(str[i]), 0, KEYEVENTF_KEYUP, 0);
end;
i działa w aplikacji okienkowej. Gdy aktywny jest np. Notatnik, ładnie do niego tekst jest wpisywany. Natomiast kod nie chce w ogóle działać w aplikacji serwisowej. Nie ważne, czy ustawię współdziałanie z pulpitem, czy nie. Otwieram sobie notatnika i tam powinny lecieć pewne teksty, ale nic się nie dzieje. Mam pewność, że problem leży w tym miejscu, bo to sprawdzałem (zaraz przed tym kodem zapisuję log do pliku tekstowego). Czemu to nie działa w usłudze? Co zrobić, żeby działało? Problem dotyczy Windows 7, jeśli to istotne.
Próbowałem też to zrobić assemblerem, ale Windows chyba blokuje przerwanie 16h. Czy tak może być? A może moja funkcja jest źle napisana? (w asmie mam właściwie zerowe doświadczenie):
function SendChar(VirtualCode: word): boolean; assembler;
asm
push CX
push AX
mov CX, VirtualCode
mov AH, 05h {wywołaj funkcję 5 - czyli wysłanie na bufor klawiatury}
int 16h {wywołanie przerwania - tu dostaję access violation: read of adress 0xffffffff}
pop AX
pop CX
mov @Result, AL
end;
wywołuję tak:
SendChar(vkKeyScan('B'));
dodanie znacznika <code class="delphi"> - fp