У чому разніча між GetAsyncKeyState і GetKeyState?
Власне сабж :) хочеться розібратися.
The key status returned from this function (GetKeyState) changes as a given thread reads key messages from its message queue. The status does not reflect the interrupt-level state associated with the hardware. Use the GetAsyncKeyState function to retrieve that information.
Функція GetKeyState відрізняється від GetAsyncKeyState тим, що повертає стан клавіатури на момент, коли з черги потоку вилучено останні повідомлення від клавіатури (Дж. Ріхтер)
> Ботвін Дмитро щось подібне я читав, але не зрозумів сенс :(
GetAsyncKeyState більш стабільно працюватиме что-ли?
Ні, просто GetAsyncKeyState завжди повертає 0 (не було натиснуто), якщо її викликає інший потік, а не той, який створив вікно, що знаходиться зараз у фокусі введення. А GetKeyState можна викликати
в будь-який момент і для неї не важливо, яке вікно в даний момент
в фокусі.
Ботвін Дмитро # XA0; (15.08.05 11:03) [4]
> Ні, просто GetAsyncKeyState завжди повертає 0 (не було натиснуто)
Дивно, а у мене в програмі вона успішно працює, не залежно від потоку захопив введення (або який створив вікно, що знаходиться зараз у фокусі введення). Я спочатку відмінності так зрозумів: GetKeyState ловить всі натискання клавіш, що обробляються в потоках активного декстопов. GetAsynKeyState ловить натискання, при зміні стану клавіатури в поточному робочому столі.
Пояснення на кшталт таке:
Although the least significant bit of the return value indicates whether the key has been pressed since
the last query, due to the pre-emptive multitasking nature of Windows, another application can call
GetAsyncKeyState and receive the "recently pressed" bit instead of your application.
The behavior of the least significant bit of the return value is retained strictly for compatibility
with 16-bit Windows applications (which are non-preemptive) and should not be relied upon.
Що значить поки працює obsolete-ефект використання функції, але в майбутньому це не гарантується.
Пам'ять: 0.73 MB
Час: 0.05 c