Звоните в TMouse. GetCursorPos иногда перестал работать с “Вызовом к отказавшей функции ОС”

Создайте ресурс цвета в colors.xml (в данном случае R.color.purple) и используйте его так:

floatingActionButton.setBackgroundTintList(getResources().getColorStateList(R.color.purple));
5
задан Mark Elder 11 June 2009 в 22:49
поделиться

3 ответа

CursorPos использует метод Windows GetCursorPos. В примечаниях к MSDN говорится, что у него есть два требования:

  • «Вызывающий процесс должен иметь доступ WINSTA_READATTRIBUTES к оконной станции»
  • «Рабочий стол ввода должен быть текущим рабочим столом при вызове GetCursorPos. Вызовите OpenInputDesktop, чтобы определить, является ли текущий рабочий стол рабочим столом ввода. Если это не так, вызовите SetThreadDesktop с HDESK, возвращенным OpenInputDesktop, чтобы переключиться на этот рабочий стол »

. Таким образом, скорее всего, хранитель экрана запущен на другом рабочем столе. С другой стороны, если вы используете Vista, я почти уверен, что диалоговое окно пароля (для разблокировки компьютера) работает и на другом рабочем столе.

Поскольку у вас есть исходный код для этого компонента, вы можете написать свою собственную оболочку для CursorPos, которая возвращает фиктивное значение при возникновении проблемы. (Edit: или комментатор предлагал обработать ошибку при получении позиции inline вместо написания функции, возвращающей фиктивное значение.)

Наконец, вы можете вызвать GetLastError, чтобы узнать, какая была последняя ошибка Windows после того, как было создано исключение. . Это должно сказать вам наверняка, с какой реальной проблемой он сталкивается. Как и в комментарии (спасибо!), Вы уже встречали сообщение об ошибке в сообщении об исключении.

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

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

13
ответ дан 13 December 2019 в 19:33
поделиться

Не видя кода и версии Windows, можно только догадываться. Я бы посмотрел на код процедуры TtaoHoverTimer.Timer в модуле taoCntrr.

-1
ответ дан 13 December 2019 в 19:33
поделиться

Попробуйте вызвать метод GetCursorPos (cursorPos); в модуле Windows .

Примерно так:

var
   cursorPos       : TPoint;

begin
     GetCursorPos(cursorPos);
     cursorPos := ScreenToClient(cursorPos);

Он без проблем работает во всех моих приложениях.

-1
ответ дан 13 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: