Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > PureBasic

PureBasic Мощный кросс-платформенный язык среднего уровня на основе BASIC. Подходит для решения широкого круга задач.

Ответ
 
Опции темы
Старый 24.10.2013, 11:17   #1
Artfrost
AnyKey`щик
 
Регистрация: 02.11.2009
Сообщений: 9
Написано 2 полезных сообщений
(для 2 пользователей)
Mышь?

Как отлавливать клики мыша в фоне ?
(когда фокус не на нашей проге, а в другой программе windows)

ситуация:
программа запущена и свёрнута в панель задач, юзер работает в других программах,
так вот, надо чтобы моя программа регистрировала каждый клик мыша юзера где бы он не находился
без хуков не обойтись?

Последний раз редактировалось Artfrost, 24.10.2013 в 14:55.
(Offline)
 
Ответить с цитированием
Старый 24.10.2013, 13:59   #2
kvitaliy
Оператор ЭВМ
 
Регистрация: 10.01.2007
Сообщений: 37
Написано 6 полезных сообщений
(для 5 пользователей)
Re: Mыш?

Если эта программа не использует для работы с мышкой DirectX® ( к примеру игры), то легко отлавливается при помощи
GetAsyncKeyState_(#VK_LBUTTON)
GetAsyncKeyState_(#VK_RBUTTON)
Так же и координаты мышки через API GetCursorPos
Вполне решаемо без хуков.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Artfrost (24.10.2013)
Старый 24.10.2013, 14:35   #3
Artfrost
AnyKey`щик
 
Регистрация: 02.11.2009
Сообщений: 9
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Mыш?

поставил в обработку главного цикла
GetAsyncKeyState_(#VK_LBUTTON)
GetAsyncKeyState_(#VK_RBUTTON)
клик отлавливается только если жамкать по форме программы
или я что-то сделал не так?

похоже что палки в колёса ставит WaitWindowEvent() который участвует в цикле
видимо надо GetAsyncKeyState_ выносить в отдельный поток...

Последний раз редактировалось Artfrost, 24.10.2013 в 17:06.
(Offline)
 
Ответить с цитированием
Старый 24.10.2013, 17:01   #4
Artfrost
AnyKey`щик
 
Регистрация: 02.11.2009
Сообщений: 9
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Mыш?

с потоком вроде пашет
поправьте если что не так:
Procedure TREAD_CLICK(period)
	Repeat
		If GetAsyncKeyState_(#VK_LBUTTON) = -32767
			Debug "!!!!!!!!!!!!!!!!!"
		EndIf
		Delay(period)
	ForEver
EndProcedure

OpenWindow(0, 605, 501, 295, 150, "Test click", #PB_Window_SystemMenu|#PB_Window_TitleBar)

TREAD_CLICK = CreateThread(@TREAD_CLICK(), 1)

Repeat
 
  Select WaitWindowEvent()
    	Case #PB_Event_CloseWindow
            Select EventWindow()
                Case 0
                	KillThread(TREAD_CLICK)
                    Break
            EndSelect
  EndSelect
  
ForEver
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
barsunduk (02.11.2013)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 01:17.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com