Как узнать, изменился ли значок указателя мыши

Я пишу приложение для записи экрана для Windows в Delphi 7 и хочу знать, когда указатель мыши изменится в моем приложении (например, с обычного указателя на указатель изменения размера и т. Д.).

В настоящее время я рисую указатель мыши на растровом изображении в памяти каждый раз, когда мышь движется (и на таймере), и сравниваю его по пикселям с последним нарисованным растровым изображением.

Хотя сравнение выполняется довольно быстро (около 2-5 мс), потому что оно происходит так часто (каждое движение мыши), что складывается. Я считаю, что должен быть более быстрый и менее сложный способ!

11.12.2008 05:50:00
1 ОТВЕТ
РЕШЕНИЕ

У вас есть ручка для курсора, верно? Если это то же значение дескриптора, которое вы имели раньше, то я думаю, что разумно предположить, что оно тоже выглядит одинаково. Если курсор выглядит иначе, он будет иметь другое значение дескриптора.

Это должно быть верно для стандартных системных курсоров. Если приложение, которое вы записываете, создает новые курсоры во время работы, то, возможно, оно сможет обновить внешний вид текущего курсора, фактически не создавая новый объект курсора в ОС (и, таким образом, сохраняя то же значение дескриптора), но Я не думаю, что это вероятно, тем более что SetCursorвыход происходит немедленно, когда курсор не изменился, и я ожидаю, что функция API также не выполняет графического сравнения, которого вы пытаетесь избежать. Это просто сравнивает HCursorзначение.

2
11.12.2008 06:28:02
Я был неправ. Я начал замечать, что простой проверки дескриптора недостаточно, поскольку кажется, что маркер меняется только при наведении курсора на мое приложение. Если я печатаю текущий дескриптор курсора на экране каждые несколько миллисекунд, когда я наводю курсор мыши на другие приложения, он фактически не меняется при изменении курсора. :(
CodeAndCats 5.01.2009 04:55:12
Как вы получаете указатель курсора, когда он над другим приложением? MSDN говорит вызывать GetCursorInfo вместо GetCursor.
Rob Kennedy 5.01.2009 05:53:05
Ах, да, ты прав. Я сравнивал результаты GetCursor. Еще раз спасибо!
CodeAndCats 7.01.2009 07:15:37