GreyWerewolf
То тут, то там...
- Сообщения
- 23
- Репутация
- 0
Была необходимость скрыть курсор мыши, а с файлами курсоров возиться не хотелось. Кроме того - если наша программа изменит курсор Windows, то при каком либо непредвиденном вылете нашей программы курсор обратно не восстановится сам.
Появилась идея перекрыть окном весь рабочий стол. В целом для моих целей такой вариант вполне подошел. К сожалению, в таком варианте перетаскивание мышью работать не будет, а если его включить, то на время перетаскивания курсор вылезет наверх.
Внимание! Пример требует наличия MouseOnEvent!
Собственно сам код:
Бывает ошибка программы при нажатии Esc на выходе. Проблема в библиотеке MouseOnEvent.au3.
Появилась идея перекрыть окном весь рабочий стол. В целом для моих целей такой вариант вполне подошел. К сожалению, в таком варианте перетаскивание мышью работать не будет, а если его включить, то на время перетаскивания курсор вылезет наверх.
Мне данный вариант пригодился для того, чтобы видеть, какую область у меня запишет getpixel в текстовый файл. Области были небольшие - курсор перекрывал квадраты-обозначения. Скрыть курсор за квадратами было нельзя - мне через них нужно было кликать.
Внимание! Пример требует наличия MouseOnEvent!
Собственно сам код:
Код:
#include "MouseOnEvent.au3"
#include <WinAPI.au3>
Global $WidthX=(WinGetPos('Program Manager'))[2];разрешение экрана в сумме
Global $hParenttt = GUICreate('', $WidthX, @DesktopHeight, 0, 0);родитель чтобы не было иконки снизу
$hSquare_GUI = GUICreate("", 10, 10,0,0,$WS_POPUPWINDOW, BitOR($WS_EX_LAYERED,$ws_ex_transparent,$WS_EX_TOPMOST),$hParenttt);прорисовка замены курсора
GUISetBkColor(0x0000FF,$hSquare_GUI)
WinSetTrans($hSquare_GUI, '', 100)
GUISetState(@SW_SHOWNA, $hSquare_GUI)
global $hCross_GUI = GUICreate("", $WidthX, @DesktopHeight - 20, 0, 0, 2147483648, 8,$hParenttt);перекрывающее окно
WinSetTrans($hCross_GUI, "", 1)
GUISetState(@SW_SHOWNA, $hCross_GUI)
GUISetCursor(16, 1, $hCross_GUI)
_mousesetonevent($MOUSE_PRIMARYDOWN_EVENT,"_mouseclickdown",$hCross_GUI,1);хоткей на поднятие левой кнопки
HotKeySet("{Esc}","_Exit");выход по Esc
Example()
func Example()
while 1
sleep(30)
WinMove($hSquare_GUI, "", MouseGetPos(0), MouseGetPos(1));двигаем замену курсора
WEnd
EndFunc
func _mouseclickdown()
GUIDelete($hCross_GUI);удаляем прозрачное окно, скрывающее курсор
if (WinGetState($hCross_GUI)=0) then
MouseClick("left");кликаем мышей
$hCross_GUI = GUICreate("", $WidthX, @DesktopHeight - 20, 0, 0, 2147483648, 8,$hParenttt);снова создаем окно для перекрытия курсора
GUISetCursor(16, 1, $hCross_GUI)
GUISetState(@SW_SHOWNA, $hCross_GUI)
WinSetTrans($hCross_GUI, "", 1)
_mousesetonevent($MOUSE_PRIMARYDOWN_EVENT,"_mouseclickdown",$hCross_GUI);назначаем новому окну горячую клавишу
EndIf
EndFunc
Func _Exit()
exit
EndFunc
Бывает ошибка программы при нажатии Esc на выходе. Проблема в библиотеке MouseOnEvent.au3.