Мне нужно сделать небольшое приложение для системного лотка, которое отслеживает положение курсора по всей стране и отображает или скрывает экранную клавиатуру в зависимости от идентификатора дескриптора курсора. если курсор находится в текстовом поле (позиция равна IBeam) в IE, например, клавиатура всплывает. У меня есть код для приложения в системном трее (без формального приложения), но не удается найти способ его отслеживания. Любая помощь с функцией мониторинга системы для позиции курсора приветствуется. Благодарю.Монитор Cursor Position system wide
ответ
Чтобы управлять событиями, вам необходимо использовать SetWindowsHookEx
. Вы не можете сделать это напрямую через .NET, но должны ввести DLL. Вот MSDN article on making a mouse hook. Это делается с помощью System.Runtime.InteropServices
для импорта user32.dll. В статье MSDN приведены пошаговые инструкции по вызову SetWindowsHookEx
, CallNextHookEx
и UnhookWindowsHookEx
из C#. CodeProject также имеет статью о making system-wide hooks in .NET.
Не видите, как получить курсор управления IBeam с помощью мыши! –
Я не думаю, что вы хотите взглянуть на дескриптор курсора, но скорее сделайте тест на попадание мыши. Посмотрите на это [SO post about WindowFromPoint] (http://stackoverflow.com/questions/3901183/how-can-i-tell-if-the-mouse-is-over-a-top-level-window). – jltrem
нашел парня, ищущего то же самое в C++. Кто-нибудь, чтобы преобразовать код в C#? Я использовал конвертер, но не уверен, что он выполняет все необходимые преобразования: LRESULT CALLBACK winProc (int nCode, WPARAM wParam, LPARAM lParam) { if (nCode <0) return CallNextHookEx (hhk, nCode, wParam, lParam) ; if (lParam) { CWPSTRUCT * msg = (CWPSTRUCT *) lParam; if ((msg-> message == WM_COMMAND) && (HIWORD (msg-> wParam) == EN_SETFOCUS)) MessageBox (NULL, «focus!», «Information», MB_ICONINFORMATION); } return CallNextHookEx (hhk, nCode, wParam, lParam); } –
Контролировать позиции системного курсора:
private void Pos()
{
for (; ;)
{
Thread.Sleep(10);
Point position = Cursor.Position;
//You can use these to pass to your system tray or whereever you need it.
somePublicXVar = position.X;
somePublicYVar = position.Y;
}
}
public void PointPosition()
{
Thread pointThread = new Thread(new ThreadStart(Pos));
pointThread.Start();
}
В петле много CPU! –
В зависимости от ваших потребностей вы должны попробовать использовать большее число для Thread.Sleep (MinMilisecondsYouCanAfford). Надеюсь, поможет. – Regu
Потребность: всякий раз, когда мой курсор помещается в учебнике в любом приложении, экранная клавиатура может появиться как на планшетах. Windows Metro отлично работает, но в настольном режиме эта функция отсутствует. –
- 1. System Wide ApI Hooking
- 2. System wide Validation Callback
- 3. System Wide Таблица страниц
- 4. System wide api hook
- 5. Использование Proxy System Wide Ubuntu
- 6. System Wide I/O Statistics
- 7. Rails System Wide Уникальный ID
- 8. Cursor Position C++ Метод GetCursorPos
- 9. System wide NSUserDefaults в приложении для какао
- 10. jQuery UI Autocomplete IE Cursor Position Bug
- 11. Контрольный монитор Vs. System Call Wrapper
- 12. System Wide Shell Hook из .NET с использованием неуправляемой DLL
- 13. .Net System Wide Flag, чтобы определить, запущено ли приложение/поток
- 14. JQuery Draggable Helper Clone Position Offset from Cursor After Scroll
- 15. Создание шаблона Application Wide Wide
- 16. contenteditable div get position position
- 17. Разрешает локальное разрешение активации AppPool System Wide в dcomcnfg большой риск для безопасности?
- 18. Cocoa nsview cursor cursor
- 19. CSS hover over wide
- 20. On Idle Hide Mouse System-Wide, Show on Movement, из приложения C#
- 21. jtextfield default position position
- 22. max wide не работает
- 23. Cursor to String
- 24. jquery datatable position position (height)
- 25. CABasicAnimation duration & keep position position
- 26. make flex item 90% wide
- 27. Решение wide app.config/web.config?
- 28. Необычная переменная playbook-wide
- 29. variable application-wide variable
- 30. Project wide 'Convert indents'
Это можно легко сделать с помощью стандартного 'TextBox', но это не так просто с какой-то скомпонованы' TextBox', такие как '' TextBox' в WPF'. –
Просто используйте Cursor.Position в обработчике событий Tick Tick. –
образец кода, пожалуйста? –