1

Тема: AHK: Клик мышью по области

В Windows 7, около часов есть кнопка, показать рабочий стол. В Windows XP такой кнопки нет, но место для неё там имеется.
Я сделал это

LButton::
    MouseGetPos,,,w, control
    If (control = "TrayNotifyWnd1")
        Send #{vk44} ; win+d
Return

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

2

Re: AHK: Клик мышью по области

Есть у меня скрипт такой, но только на работе. Разница в том, что он отслеживает не контрол трея, а созданное окно Gui. В общем если не забуду, принесу с работы.

В Вашем случае можно попробовать

~Lbutton::

3

Re: AHK: Клик мышью по области

Да, спасибо большое, но Ваше творение я бы тоже хотел попробовать

4

Re: AHK: Клик мышью по области

OFF: Есть такая кнопка в XP. Называется «Свернуть все окна». На панели быстрого запуска.

5

Re: AHK: Клик мышью по области

http://forum.script-coding.com/viewtopic.php?id=2426

[Shell]
Command=2
[Taskbar]
Command=ToggleDesktop

6

Re: AHK: Клик мышью по области

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

7

Re: AHK: Клик мышью по области

Как обещал.

#NoEnv
#SingleInstance, force
;~ #NoTrayIcon
SetBatchLines, -1
WinGet, ID, ID, ahk_class Shell_TrayWnd
WinGetPos,,,,Height, ahk_id %ID%
Width:=10
xpos := A_ScreenWidth-Width
ypos := A_ScreenHeight-Height
Gui Color, 245DBD
Gui +AlwaysOnTop -Caption +ToolWindow +E0x08000000 +Border +LastFound
Gui show, x%xpos% y%ypos% w%Width% h%Height% NA
OnMessage(0x201, "WM_LBUTTONDOWN")
SetTimer Minimize
Return

Minimize:
  Gui show, x%xpos% y%ypos% w%Width% h%Height% NA
Return

WM_LBUTTONDOWN()
  {
  Send #{vk44}
  }

8 (изменено: Ark, 2011-01-25 22:11:14)

Re: AHK: Клик мышью по области

Шикарно, только добавил прозрачность.

WinSet, TransColor, 245DBD

Плохая идея с прозрачностью, так кнопка не работает.

9 (изменено: alexii, 2011-08-21 22:49:27)

Re: AHK: Клик мышью по области

InFlames пишет:

Как обещал…

Прикольный скрипт.

А как сделать в одном скрипте что бы сразу несколько таких кнопок было.

Я конешно могу, создать два скрипта, в которых поместить разные координаты кнопок. Но как сделать что бы обе кнопки было в одном скрипте и выполняли разную функцию, например:
1я что бы сворачивала и разворачивала все окна.
2я допутим выполняла какую либо другую горячую клавишу (например: F9)

10

Re: AHK: Клик мышью по области

Вася Пупкин, избегайте излишнего цитирования. Я поправил Ваш пост.

11

Re: AHK: Клик мышью по области

Для дел свёрточных многотрудных, — в результате какого-то наития, — выдумал сочетать мышиное колесо с верхней границей экрана. Как любит говаривать Androgen, это очень удобно, — необходимость куда-либо прицеливаться отпадает.

WheelUp/WheelDown (ролик мыша у верхнего края экрана) — свернуть/развернуть активное;
RButton & Wheel (правая мышь на пару с колесом) — свернуть/развернуть все.


#SingleInstance Force

CoordMode Mouse, Screen
CoordMode Menu,  Screen


~WheelUp::
YY := 0 "," 190 "," A_ScreenHeight-185 "," A_ScreenHeight-2 "," 9999
StringSplit YY, YY, `,
MouseGetPos X, Y

If (Y <= YY%A_Index%) {            ; ВЕРХНЯЯ ГРАНИЦА ЭКРАНА::
  RestoreMode = 1
  Gosub, RestoreWin
  Send, {WheelDown} ; чтобы прокрутку не слать в окно — лучше выдумать не мог
  Sleep, 900
  RETURN
}
; ...
RETURN

~WheelDown::
YY := 0 "," 190 "," A_ScreenHeight-185 "," A_ScreenHeight-2 "," 9999
StringSplit YY, YY, `,
MouseGetPos X, Y

If (Y <= YY%A_Index%) {            ; ВЕРХНЯЯ ГРАНИЦА ЭКРАНА::
  Send, {WheelUp}
  MinimizeMode = 1
  Gosub, MinimizeWin
  Sleep, 900
  RETURN
}
; ...
RETURN

RButton & WheelUp::
YY := 0 "," 190 "," A_ScreenHeight-185 "," A_ScreenHeight-2 "," 9999
StringSplit YY, YY, `,
MouseGetPos X, Y

If (Y <= YY%A_Index%) {            ; ВЕРХНЯЯ ГРАНИЦА ЭКРАНА::
  RestoreMode = 2
  Gosub, RestoreWin
  Send, {WheelDown}
  Sleep, 600
  RETURN
}
; ...
RETURN

RButton & WheelDown::
YY := 0 "," 190 "," A_ScreenHeight-185 "," A_ScreenHeight-2 "," 9999
StringSplit YY, YY, `,
MouseGetPos X, Y

If (Y <= YY%A_Index%) {            ; ВЕРХНЯЯ ГРАНИЦА ЭКРАНА::
  Send, {WheelUp}
  MinimizeMode = 2
  Gosub, MinimizeWin
  Sleep, 600
  RETURN
}
; ...
RETURN

$RButton::
  SendInput, {RButton}
RETURN

; =============== СВЕРНУТЬ ОКНО =======================
MinimizeWin:
DetectHiddenWindows, off
  If (MinimizeMode == 1)
    {
      Win_ID =   ;!!
      SetWinDelay, -1         ; want to move pretty fast
      WinGet, Win_ID, ID, A ; сохранить ID сворачиваемого окна в переменной
      WinGetClass, Win_Class, A ; получить класс активного окна
      WinMinimize, ahk_class %Win_Class% ; свернуть окно
      Return
    }
  If (MinimizeMode == 2)
      WinMinimizeAll
RETURN
; =============== РАЗВЕРНУТЬ ОКНО =======================
RestoreWin:
  If (RestoreMode == 1)
    {
      SetWinDelay, -1         ; want to move pretty fast
      WinRestore, ahk_id %Win_ID% ; восстановить свернутое окно с запомненным ID
      WinActivate, ahk_id %Win_ID% ; активизировать его
      Return
    }
  If (RestoreMode == 2)
      WinMinimizeAllUndo
RETURN

12

Re: AHK: Клик мышью по области

InFlames пишет:

Как обещал.

.................
WM_LBUTTONDOWN()
  {
  Send #{vk44}
  }
..................

Меня интересует, вот этот фрагмент в твоём скрипте (см. код).
Как сделать что бы Send #{vk44} выполнилось, не только при нажатии ЛКМ WM_LBUTTONDOWN() в этой областе , но и при подводе курсора к этой областе с уже заранее нажатой ЛКМ?
Т.е. что бы:
1. взял какой нибудь файл
2. перетащил в эту область
3. выполнилась какая либо функция (в нашем случае Send #{vk44})
4. и отпустил кнопку уже где нибудь в окне, после выполнения функции скрипта.

P.s. В итоге мне нужно заменить WM_LBUTTONDOWN() на что то другое (или добавить к существующему что то).

Спасибо.

13 (изменено: Grey, 2011-09-01 10:36:33)

Re: AHK: Клик мышью по области

Вася Пупкин пишет:

...В итоге мне нужно заменить WM_LBUTTONDOWN() на что то другое...

WM_MOUSEMOVE

SetBatchLines, -1
XPos:=(A_ScreenWidth/2)-14
YPos:=(A_ScreenHeight/2)-14

Gui, Color, Blue
RevealGUI()
OnMessage(0x200, "WM_MOUSEMOVE")
Return

CheckColor:
   MouseGetPos,,, WinID
   WinGetClass, WinClass, % "ahk_id" WinID
   If WinClass = AutoHotkeyGUI
      Gui, Color, Red
   Else
      Gui, Color, Green
   RevealGUI()
   Return

WM_MOUSEMOVE()
{
   Gui, Color, Red
   RevealGUI()
   SetTimer, CheckColor, -250
}

RevealGUI()
{
   Global
   Gui, +AlwaysOnTop
      . -Caption
      . +ToolWindow
      . +Border
      . +LastFound
   Gui, Show, NoActivate x%XPos%
                       . y%YPos%
                       . w26
                       . h26
}

Esc::ExitApp

14

Re: AHK: Клик мышью по области

спасибо, щас посмотрим что за скрипт.

15

Re: AHK: Клик мышью по области

Нет, не подходит скрипт, ещё варианты?

Твой скрипт выполняет функцию при подводе курсора к областе.
А мне надо, что бы с при подводе с уже нажатой ЛКМ.

16 (изменено: Grey, 2011-09-02 00:43:45)

Re: AHK: Клик мышью по области

Вася Пупкин пишет:

...с уже нажатой ЛКМ.

Кто нажал клавишу (пользователь/скрипт), если скрипт, то когда нажал (с запуском/при наведении на какое-либо окно/при обстоятельстве связанном с каким-либо условием)? Потрудитесь более чётко сформулировать свою мысль, это ускорит процесс нахождения решения.

17 (изменено: alexii, 2011-09-04 05:35:56)

Re: AHK: Клик мышью по области

Grey пишет:

Потрудитесь более чётко сформулировать свою мысль

Хорошо. Даже нарисую.
Ссылка на картинку:
http://narod.ru/disk/23901676001/3423.JPG.html

1 на рисунке:
Допустим открыто куча папок/программ.
Пользователь берёт/зацепает какой либо файл/папку и тащет её к областе (2 на рисунке).
2 на рисунке:
при подводе к этой областе (наш скрипт) выполняется какая либо функция (в нашем случае сворачиваются все окна или выполняется какая нибудь горячая клавиша).
И после того как все окна свернулись мы этот файл/папку тащим/перетаскиваем на рабочий стол (3 на рисунке), но уже со всеми свёрнутыми окнами.

P.s. В будущем я хочу (это я сам смогу сделать) что бы в место функции "свернуть все окна" можно было заменить на любую другую горячую клавишу, которая в свою очередь запустит какое либо в приложение в которое и нужно будет перетащить файл/папку.

P.s.2. Все перетаскивания делает пользователь, а не скрипт. Скрипт лиш, выполняет горячую клавишу при подводе к областе.

P.s.3. Выше сказанное объеснено на основе этого скрипта.

Спасибо.

18

Re: AHK: Клик мышью по области

SetBatchLines, -1
WinGet, WinID, ID, ahk_class Shell_TrayWnd
WinGetPos,,,, Height, % "ahk_id" WinID
Width:=12
XPos:=A_ScreenWidth-Width
YPos:=A_ScreenHeight-Height
RedrawLostedGUI:
Gui, Color, Blue
RevealGUI()
OnMessage(0x200, "WM_MOUSEMOVE")
Return

CheckColor:
   MouseGetPos,,, WinID
   WinGetClass, WinClass, % "ahk_id" WinID
   If WinClass=AutoHotkeyGUI
      Gui, Color, Red
   Else
   {
      Gui, Color, Green
      Iterate:=0
   }
   RevealGUI()
   Return

#If MouseIsOver("ahk_class Shell_TrayWnd")
~LButton::
~RButton::
   Sleep, 300
   Gosub, RedrawLostedGUI
   Return

WM_MOUSEMOVE()
{
   Global
   Gui, Color, Red
   RevealGUI()
   If !Iterate
   {
      Send, #{vk44} ; тут можно задать любое действие при наведении, в данном случае это комбинация клавиш win+d
      Iterate:=1
      SetTimer, CheckColor, -300
   }
   Else
      SetTimer, CheckColor, -300
}

RevealGUI()
{
   Global
   Gui, +AlwaysOnTop
      . -Caption
      . +ToolWindow
      . +ToolWindow
      . +Border
      . +LastFound
   Gui, Show, NoActivate x%XPos%
                       . y%YPos%
                       . w%Width%
                       . h%Height%
}

MouseIsOver(WinTitle)
{
   MouseGetPos,,, WinID
   Return, WinExist(WinTitle . " ahk_id " . WinID)
}

19

Re: AHK: Клик мышью по области

Твой скрипт пишет ошибку:

Error at line 26.
Line Text: #If MouseIsOver("ahk_class Shell_TrayWnd")
Error: This line does not contain a recognized action.
The program will exit.

20

Re: AHK: Клик мышью по области

Это не в моём скрипте ошибка, а у тебя версия старая, обновляйся.

21

Re: AHK: Клик мышью по области

Вася Пупкин, ссылки оформляем тэгом «url». Я поправил Ваш пост.

22 (изменено: Вася Пупкин, 2011-09-04 11:44:20)

Re: AHK: Клик мышью по области

Спасибо. Обновил программу. Скрипт заработал.
Но опять не так как надо.
Незнай, может ты меня не слышиш или просто у меня система другая.
Моя система: win XP SP3.
Или прочитай мой пост ещё раз:
http://forum.script-coding.com/viewtopi … 397#p51133

Объясняю ещё раз:
См. картинку (это твой скрипт):
http://narod.ru/disk/23950473001/%D0%91 … 9.JPG.html

Кароче, зацепаю папку (1 на рисунке), тащу к областе (2 на рисунке).
После того как курсор подходит к области (2 на рисунке)
курсор сразу меняется на чёрный зачёркнутый кружок (2 на рисунке).

Твой скрипт выполняет то что мне не надо, а именно:
1. Выполняет функцию (горячую клавишу) при подводе к областе с зажатой ЛКМ, но предварительно НЕ была зацеплена папка/файл ЛКМ.
2. Просто при подводе, без зажатой ЛКМ скрипт просто мигает, т.е. через 300 милисекунд сворачивает все окна, и через 300 милисекунд разворачивает.

Спасибо.

23

Re: AHK: Клик мышью по области

Вася Пупкин, картинки лучше помещать на профильные ресурсы, как-то: http://imagevenue.com/, в виде миниатюры со ссылкой:
http://img262.imagevenue.com/loc185/th_91076_CancelInstall_122_185lo.JPG
или полноразмерное изображение:
http://img262.imagevenue.com/aAfkjfp01fo1i-6413/loc185/91076_CancelInstall_122_185lo.JPG

http://imageshack.us/, http://radikal.ru/, http://savepic.ru/ и тому подобные. В крайнем случае на Яндекс.Фотки же, например:
http://img-fotki.yandex.ru/get/4813/6476532.0/0_5dd91_83fa32ea_L.jpg
в конце концов, обычную ссылку на страницу хостинге изображений, но никак не на Яндекс.Народ, который для этого совершенно не предназначен.

Для оформления картинок требуется тэг «img». Как правило, порядочные хостинги для каждой Вашей загруженной картинки дают готовый BBCode.

24

Re: AHK: Клик мышью по области

SetBatchLines, -1
CoordMode, Mouse
WinGet, WinID, ID, ahk_class Shell_TrayWnd
WinGetPos,,,, Height, % "ahk_id" WinID
Width:=12
GUIXPos:=A_ScreenWidth-Width
GUIYPos:=A_ScreenHeight-Height
SetTimer, ChaseCoordinates, 250
RedrawLostedGUI:
Gui, Color, Blue
Gui, +AlwaysOnTop
   . -Caption
   . +ToolWindow
   . +ToolWindow
   . +Border
   . +LastFound
Gui, Show, NoActivate x%GUIXPos%
                    . y%GUIYPos%
                    . w%Width%
                    . h%Height%
Return

ChaseCoordinates:
   MouseGetPos, XPos, YPos, WinID
   If (XPos >= GUIXPos && YPos >= GUIYPos)
   {
      Gui, Color, Red
      If !Iterate
      {
         Send, #{vk44} ; win+d
         Iterate:=1
         SetTimer, CheckColor, -250
      }
      Else
         SetTimer, CheckColor, -250
   }
   Return

CheckColor:
   WinGetClass, WinClass, % "ahk_id" WinID
   If WinClass=AutoHotkeyGUI
      Gui, Color, Red
   Else
   {
      Gui, Color, Green
      Iterate:=0
   }
   Return

#If MouseIsOver("ahk_class Shell_TrayWnd")
~LButton::
~RButton::
   SetTimer, RedrawLostedGUI, -350
   Return

MouseIsOver(WinTitle)
{
   Global
   Return, WinExist(WinTitle . " ahk_id " . WinID)
}

25 (изменено: Вася Пупкин, 2011-09-04 20:23:38)

Re: AHK: Клик мышью по области

Не плохо получилось, совсем почти здорово получилось.
Спасибо!
Но всё же немного хотелось бы доработать:
1. Перетаскивание работает зашибись, его трогать не надо. Работает супер.
2. А просто при подводе курсора к областе (без зажатой ЛКМ) вообще нечего делать не надо. А у тебя выполняется функция эта (горячая клавиша). Лучше сделать что бы она выполнялась, не при подводе к областе, а при щелчке по нему, как в этом оригинальном скрипте:
http://forum.script-coding.com/viewtopi … 397#p44397

Р.s. Ещё раз повторяю. Алгоритм по перетаскиванию папки/файла работает просто Супер, его трогать не надо, надо просто дописать скрипт.
Как говорят програмисты:
"Если работает, не трогай!"

26

Re: AHK: Клик мышью по области

SetBatchLines, -1
CoordMode, Mouse
WinGet, WinID, ID, ahk_class Shell_TrayWnd
WinGetPos,,,, Height, % "ahk_id" WinID
Width:=12
GUIXPos:=A_ScreenWidth-Width
GUIYPos:=A_ScreenHeight-Height
SetTimer, ChaseCoordinates, 250
RedrawLostedGUI:
Gui, Color, Blue
RevealGUI()
OnMessage(0x201, "WM_LBUTTONDOWN")
Return

ChaseCoordinates:
   MouseGetPos, XPos, YPos, WinID
   If ((GetKeyState("vk01" "P")
     || GetKeyState("vk02" "P"))
     && XPos>=GUIXPos
     && YPos>=GUIYPos)
   {
      Gui, Color, Red
      RevealGUI()
      If !Iterate
      {
         Send, #{vk44}
         Iterate:=1
      }
      SetTimer, CheckColor, -250
   }
   Return

CheckColor:
   WinGetClass, WinClass, % "ahk_id" WinID
   If WinClass=AutoHotkeyGUI
   {
      Gui, Color, Red
      RevealGUI()
   }
   Else
   {
      Gui, Color, Green
      RevealGUI()
      Iterate:=0
   }
   Return

#If MouseIsOver("ahk_class Shell_TrayWnd")
~LButton::
~RButton::
   SetTimer, RedrawLostedGUI, -250
   Return

RevealGUI()
{
Global
Gui, +AlwaysOnTop
   . -Caption
   . +ToolWindow
   . +ToolWindow
   . +Border
   . +LastFound
Gui, Show, NoActivate x%GUIXPos%
                    . y%GUIYPos%
                    . w%Width%
                    . h%Height%
}

WM_LBUTTONDOWN()
{
   Gui, Color, Red
   RevealGUI()
   Send #{vk44}
   SetTimer, CheckColor, -1000
}

MouseIsOver(WinTitle)
{
   Global
   Return, WinExist(WinTitle . " ahk_id "
                             . WinID)
}

27

Re: AHK: Клик мышью по области

Да, вот такой мне скрипт надо, тока он работает, как то через раз.

Запускаю скрипт
1й клик по областе - выполняется функция
2й клик по областе - выполняется функция
3й клик по областе - не чего не происходит
4й клик по областе - не чего не происходит
5й клик по областе - не чего не происходит
..........
отвожу курсор в сторону
опять подвожу к областе
1й клик по областе - выполняется функция
2й клик по областе - выполняется функция
3й клик по областе - не чего не происходит
4й клик по областе - не чего не происходит
5й клик по областе - не чего не происходит
.................
и так по кругу.
С перетаскиванием таже фигня.

Перетаскивание файла/папки в предыдущем скрипте (там где я говорил "Скрипт Супер", было реализовано идеально, без сбоев, зря ты его трогал.
Давай попробуем ещё раз

28

Re: AHK: Клик мышью по области

Думаю, что более пробовать уже не будем.

SetBatchLines, -1
CoordMode, Mouse
WinGet, WinID, ID, ahk_class Shell_TrayWnd
WinGetPos,,,, Height, % "ahk_id" WinID
Width:=12
GUIXPos:=A_ScreenWidth-Width
GUIYPos:=A_ScreenHeight-Height
Hotkey, Esc, ExitScript
SetTimer, ChaseCoordinates, 250
Gosub, TrayMenu
Return

ChaseCoordinates:
   MouseGetPos, XPos, YPos, WinID
   WinGetClass, WinClass, % "ahk_id" WinID
   If WinClass=AutoHotkeyGUI
   {
      Gui, Color, Red
      RevealGUI()
      If ((GetKeyState("vk01" "P")
        || GetKeyState("vk02" "P"))
        && XPos>=GUIXPos
        && YPos>=GUIYPos && !Iterate)
      {
         Send, #{vk44}
         Iterate:=1
      }
   }
   Else
   {
      Gui, Color, Green
      RevealGUI()
      Iterate:=0
   }
   Return

~LButton::
~RButton::
   If (XPos>=GUIXPos && YPos>=GUIYPos)
   {
      SetTimer, ChaseCoordinates, Off
      Send, #{vk44}
      Iterate:=1
      SetTimer, ChaseCoordinates, 250
   }
   Return

TrayMenu:
   Menu, Tray, NoStandard
   Menu, Tray, Icon, shell32.dll, 35
   Menu, Tray, Tip, Hide/Show Desktop
   Menu, Tray, Add, &About, About
   Menu, Tray, Add, &Exit (Esc), ExitScript
   OnMessage(0x404, "WM_LBUTTONDOWN")
   Return

About:
   Hotkey, Esc, Off
   SetTimer, ChaseCoordinates, Off
   Gui, Destroy
   Gui, Add, Text, x32 y30 w140 h20 +Center, Made using AutoHotkey for
   Gui, Font, Bold
   Gui, Add, Text, x32 y50 w140 h20 +Center, Vasya Pupkin
   Gui, Font
   Gui, Font, CBlue Underline
   Gui, Add, Text, x22 y90 w160 h20 gAHKHome +Center, www.autohotkey.com
   Gui, Font
   Gui, Add, GroupBox, x22 y10 w160 h110
   Gui, -MinimizeBox -Resize
   Gui, Show, Center h143 w207, About
   hHandCursor:=DllCall("LoadCursor", UInt, 0, Int, 32649) ; IDC_HAND
   OnMessage(0x200, "WM_MOUSEMOVE")
   Return

AHKHome:
   Run, http://www.autohotkey.com,, UseErrorLevel
   Return

GuiClose:
   Gui, Destroy
   SetTimer, ChaseCoordinates, 250
   Hotkey, Esc, On
   Return

ExitScript:
   ExitApp

RevealGUI()
{
Global
Gui, +AlwaysOnTop
   . -Caption
   . +ToolWindow
   . +ToolWindow
   . +Border
   . +LastFound
Gui, Show, NoActivate x%GUIXPos%
                    . y%GUIYPos%
                    . w%Width%
                    . h%Height%
}

WM_MOUSEMOVE(wParam, lParam)
{
   Global hHandCursor
   MouseGetPos,,,, WinControl
   If WinControl In Static3
      DllCall("SetCursor", UInt, hHandCursor)
}

WM_LBUTTONDOWN(uMsg, lParam)
{
   If (uMsg=0x404 && lParam=0x201)
      SetTimer, About, -0
}

29

Re: AHK: Клик мышью по области

Ну ладно спасибо и на этом.
И так много для меня сделал
Всё таки скажу, что в итоге получилось.

Пост 28 (последний твой пост). Скрипт демонстрирует следующее:
(+) 1. Без перетаскивания работает Супер. При клике выполняется функция (это правильно).
(+) 2. При подводе курсора к областе без кликов, нечего не происходит (это правильно).
(-) 3. Перетаскивание глючит. Окна просто мигают. Зачем то (незнаю зачем) при перетаскивании файла/папки на область функция выполняется 2 раза (надо 1 раз), что приводит к миганию, т.е. свёртывание всех окон и тут же развёртывание через 250 милесекунд.

Пост 24
(-) 1. Без перетаскивания работает не правильно. При клике по областе нечего не происходит (это не правильно).
(-) 2. При подводе курсора к областе без кликов, выполняется функция (это не правильно).
(+) 3. Перетаскивание работает зашибись.

В итоге идеальный скрипт выгледел бы, если можно было объединить:
Пост 28 (пункт 1,2) + Пост 24 (пункт 3) =  Идеальный скрипт

30

Re: AHK: Клик мышью по области

Вася Пупкин пишет:

В итоге идеальный скрипт выгледел бы, если можно было объединить:Пост 28 (пункт 1,2) + Пост 24 (пункт 3) =  Идеальный скрипт

Ну так в чём проблема?, мануал под рукой, примеры даны - вперёд!

P.S. У меня последний скрипт работает без нареканий, и ни чего не мерцает/мигает.

31

Re: AHK: Клик мышью по области

Gui, Color, Red
Gui, Color, Green

В твоём скрипте встречаются красный, зелёный цвета.
Что прописать что бы было прозрачный?

32

Re: AHK: Клик мышью по области

Добавь строку

WinSet, Trans, 125, ahk_class AutoHotkeyGUI

перед строкой

Gui, Show, NoActivate x%GUIXPos%

где 125 это степень прозрачности в диапазоне от 0 до 255, которую ты можешь выставить по вкусу.

33 (изменено: Вася Пупкин, 2011-09-07 21:59:54)

Re: AHK: Клик мышью по области

Скрипт1:

SetBatchLines, -1
CoordMode, Mouse
WinGet, WinID, ID, ahk_class Shell_TrayWnd
WinGetPos,,,, Height, % "ahk_id" WinID
Width:=12
GUIXPos:=A_ScreenWidth-Width
GUIYPos:=A_ScreenHeight-Height
Hotkey, Esc, ExitScript
SetTimer, ChaseCoordinates, 250
Gosub, TrayMenu
Return
 
ChaseCoordinates:
   MouseGetPos, XPos, YPos, WinID
   WinGetClass, WinClass, % "ahk_id" WinID
   If WinClass=AutoHotkeyGUI
   {
      Gui, Color, Red
      RevealGUI()
      If ((GetKeyState("vk01" "P")
        || GetKeyState("vk02" "P"))
        && XPos>=GUIXPos
        && YPos>=GUIYPos && !Iterate)
      {
         Send, #{vk44}
         Iterate:=1
      }
   }
   Else
   {
      Gui, Color, Green
      RevealGUI()
      Iterate:=0
   }
   Return
 
~LButton::
~RButton::
   If (XPos>=GUIXPos && YPos>=GUIYPos)
   {
      SetTimer, ChaseCoordinates, Off
      Send, #{vk44}
      Iterate:=1
      SetTimer, ChaseCoordinates, 250
   }
   Return
 
TrayMenu:
   Menu, Tray, NoStandard
   Menu, Tray, Icon, shell32.dll, 35
   Menu, Tray, Tip, Hide/Show Desktop
   Menu, Tray, Add, &About, About
   Menu, Tray, Add, &Exit (Esc), ExitScript
   OnMessage(0x404, "WM_LBUTTONDOWN")
   Return
 
About:
   Hotkey, Esc, Off
   SetTimer, ChaseCoordinates, Off
   Gui, Destroy
   Gui, Add, Text, x32 y30 w140 h20 +Center, Made using AutoHotkey for
   Gui, Font, Bold
   Gui, Add, Text, x32 y50 w140 h20 +Center, Vasya Pupkin
   Gui, Font
   Gui, Font, CBlue Underline
   Gui, Add, Text, x22 y90 w160 h20 gAHKHome +Center, www.autohotkey.com
   Gui, Font
   Gui, Add, GroupBox, x22 y10 w160 h110
   Gui, -MinimizeBox -Resize
   Gui, Show, Center h143 w207, About
   hHandCursor:=DllCall("LoadCursor", UInt, 0, Int, 32649) ; IDC_HAND
   OnMessage(0x200, "WM_MOUSEMOVE")
   Return
 
AHKHome:
   Run, http://www.autohotkey.com,, UseErrorLevel
   Return
 
GuiClose:
   Gui, Destroy
   SetTimer, ChaseCoordinates, 250
   Hotkey, Esc, On
   Return
 
ExitScript:
   ExitApp
 
RevealGUI()
{
Global
Gui, +AlwaysOnTop
   . -Caption
   . +ToolWindow
   . +ToolWindow
   . +Border
   . +LastFound
Gui, Show, NoActivate x%GUIXPos%
                    . y%GUIYPos%
                    . w%Width%
                    . h%Height%
}
 
WM_MOUSEMOVE(wParam, lParam)
{
   Global hHandCursor
   MouseGetPos,,,, WinControl
   If WinControl In Static3
      DllCall("SetCursor", UInt, hHandCursor)
}
 
WM_LBUTTONDOWN(uMsg, lParam)
{
   If (uMsg=0x404 && lParam=0x201)
      SetTimer, About, -0
}

Скрипт2:

SetBatchLines, -1
CoordMode, Mouse
WinGet, WinID, ID, ahk_class Shell_TrayWnd
WinGetPos,,,, Height, % "ahk_id" WinID
Width:=12
GUIXPos:=(A_ScreenWidth/2)-14
GUIYPos:=(A_ScreenHeight/2)-14
Hotkey, Esc, ExitScript
SetTimer, ChaseCoordinates, 250
Gosub, TrayMenu
Return
 
ChaseCoordinates:
   MouseGetPos, XPos, YPos, WinID
   WinGetClass, WinClass, % "ahk_id" WinID
   If WinClass=AutoHotkeyGUI
   {
      Gui, Color, Red
      RevealGUI()
      If ((GetKeyState("vk01" "P")
        || GetKeyState("vk02" "P"))
        && XPos>=GUIXPos
        && YPos>=GUIYPos && !Iterate)
      {
         Send, #{vk44}
         Iterate:=1
      }
   }
   Else
   {
      Gui, Color, Green
      RevealGUI()
      Iterate:=0
   }
   Return
 
~LButton::
~RButton::
   If (XPos>=GUIXPos && YPos>=GUIYPos)
   {
      SetTimer, ChaseCoordinates, Off
      Send, #{vk44}
      Iterate:=1
      SetTimer, ChaseCoordinates, 250
   }
   Return
 
TrayMenu:
   Menu, Tray, NoStandard
   Menu, Tray, Icon, shell32.dll, 35
   Menu, Tray, Tip, Hide/Show Desktop
   Menu, Tray, Add, &About, About
   Menu, Tray, Add, &Exit (Esc), ExitScript
   OnMessage(0x404, "WM_LBUTTONDOWN")
   Return
 
About:
   Hotkey, Esc, Off
   SetTimer, ChaseCoordinates, Off
   Gui, Destroy
   Gui, Add, Text, x32 y30 w140 h20 +Center, Made using AutoHotkey for
   Gui, Font, Bold
   Gui, Add, Text, x32 y50 w140 h20 +Center, Vasya Pupkin
   Gui, Font
   Gui, Font, CBlue Underline
   Gui, Add, Text, x22 y90 w160 h20 gAHKHome +Center, www.autohotkey.com
   Gui, Font
   Gui, Add, GroupBox, x22 y10 w160 h110
   Gui, -MinimizeBox -Resize
   Gui, Show, Center h143 w207, About
   hHandCursor:=DllCall("LoadCursor", UInt, 0, Int, 32649) ; IDC_HAND
   OnMessage(0x200, "WM_MOUSEMOVE")
   Return
 
AHKHome:
   Run, http://www.autohotkey.com,, UseErrorLevel
   Return
 
GuiClose:
   Gui, Destroy
   SetTimer, ChaseCoordinates, 250
   Hotkey, Esc, On
   Return
 
ExitScript:
   ExitApp
 
RevealGUI()
{
Global
Gui, +AlwaysOnTop
   . -Caption
   . +ToolWindow
   . +ToolWindow
   . +Border
   . +LastFound
Gui, Show, NoActivate x%GUIXPos%
                    . y%GUIYPos%
                    . w%Width%
                    . h%Height%
}
 
WM_MOUSEMOVE(wParam, lParam)
{
   Global hHandCursor
   MouseGetPos,,,, WinControl
   If WinControl In Static3
      DllCall("SetCursor", UInt, hHandCursor)
}
 
WM_LBUTTONDOWN(uMsg, lParam)
{
   If (uMsg=0x404 && lParam=0x201)
      SetTimer, About, -0
}

Скрипт1. Твой последний скрипт.
Скрипт2. Мой скрипт (отредактированный твой последний скрипт).

Grey пишет:

P.S. У меня последний скрипт работает без нареканий, и ни чего не мерцает/мигает.

У меня мигал. Но я устранил этот глюк (см. скрипт2). У меня глюк проявлялся когда кнопка(область) находилась на панели задач возле часов (а может под панелью, что возможно и приводило к глюку). Как только я эту область переместил по центру экрана, глюк исчез.

Я эти две строки:
GUIXPos:=A_ScreenWidth-Width
GUIYPos:=A_ScreenHeight-Height

заменил на:
GUIXPos:=(A_ScreenWidth/2)-14
GUIYPos:=(A_ScreenHeight/2)-14

Щас я голову ломаю над следующей задачей.
Дело в том что у меня будет много таких кнопок/областей и выполняющие разные функции.
И следовательно в диспечере задач будет висеть много таких процессов со скриптами.
Интересно, можно ли соединить их в один скрипт?
Например, что бы Скрипт1 и Скрипт2 были в одном *.ahk-файле

34

Re: AHK: Клик мышью по области

Вася Пупкин пишет:

Щас я голову ломаю над следующей задачей...

Не стоит заниматься членовредительством.

SetBatchLines, -1
CoordMode, Mouse
WinGet, WinID, ID, ahk_class Shell_TrayWnd
WinGetPos,,, Width, Height, % "ahk_id" WinID
Width:=12
GUIXPos:=A_ScreenWidth-Width
GUIYPos:=(A_ScreenHeight-Height)-(Height+1)
GUIYPos2:=GUIYPos-(Height+1)
GUIYPos3:=GUIYPos2-(Height+1)
Hotkey, Ctrl & Esc, ExitScript
SetTimer, ChaseCoordinates, 250
SetTimer, ChaseCoordinates2, 250
SetTimer, ChaseCoordinates3, 250
Gosub, TrayMenu
Return

ChaseCoordinates:
   MouseGetPos, XPos, YPos, WinID
   WinGetClass, WinClass, % "ahk_id" WinID
   If (WinID=GUIID)
   {
      Gui, Color, Red
      RevealGUI()
      If ((GetKeyState("vk01" "P")
        Or GetKeyState("vk02" "P"))
        And XPos>=GUIXPos
        And YPos>=GUIYPos And !Iterate)
      {
         TrayTip, Действие первое, при перетаскивании,, 2
         Iterate:=1
      }
   }
   Else
   {
      Gui, Color, Green
      RevealGUI()
      Iterate:=0
   }
   Return

ChaseCoordinates2:
   MouseGetPos, XPos2, YPos2, WinID2
   WinGetClass, WinClass, % "ahk_id" WinID2
   If (WinID2=GUIID2)
   {
      Gui, 2:Color, Blue
      RevealGUI2()
      If ((GetKeyState("vk01" "P")
        Or GetKeyState("vk02" "P"))
        And XPos2>=GUIXPos
        And YPos2>=GUIYPos2 And !Iterate2)
      {
         TrayTip, Действие второе, при перетаскивании,, 2
         Iterate2:=1
      }
   }
   Else
   {
      Gui, 2:Color, Yellow
      RevealGUI2()
      Iterate2:=0
   }
   Return

ChaseCoordinates3:
   MouseGetPos, XPos3, YPos3, WinID3
   WinGetClass, WinClass, % "ahk_id" WinID3
   If (WinID3=GUIID3)
   {
      Gui, 3:Color, Fuchsia
      RevealGUI3()
      If ((GetKeyState("vk01" "P")
        Or GetKeyState("vk02" "P"))
        And XPos3>=GUIXPos
        And YPos3>=GUIYPos3 And !Iterate3)
      {
         TrayTip, Действие третье, при перетаскивании,, 2
         Iterate3:=1
      }
   }
   Else
   {
      Gui, 3:Color, Aqua
      RevealGUI3()
      Iterate3:=0
   }
   Return

~LButton::
~RButton::
   If (XPos>=GUIXPos And YPos>=GUIYPos)
   {
      SetTimer, ChaseCoordinates, Off
      TrayTip, Действие первое, по клику,, 1
      Iterate:=1
      SetTimer, ChaseCoordinates, 250
   }
   Else If (XPos2>=GUIXPos And YPos2>=GUIYPos2)
   {
      SetTimer, ChaseCoordinates2, Off
      TrayTip, Действие второе, по клику,, 1
      Iterate2:=1
      SetTimer, ChaseCoordinates2, 250
   }
   Else If (XPos3>=GUIXPos And YPos3>=GUIYPos3)
   {
      SetTimer, ChaseCoordinates3, Off
      TrayTip, Действие третье, по клику,, 1
      Iterate3:=1
      SetTimer, ChaseCoordinates3, 250
   }
   Return

TrayMenu:
   Menu, Tray, NoStandard
   Menu, Tray, Icon, shell32.dll, 35
   Menu, Tray, Tip, Hide/Show Desktop
   Menu, Tray, Add, &About, About
   Menu, Tray, Add, &Exit (Ctrl+Esc), ExitScript
   OnMessage(0x404, "WM_LBUTTONDOWN")
   Return

About:
   OpenAbout:=1
   Hotkey, Ctrl & Esc, Off
   SetTimer, ChaseCoordinates, Off
   SetTimer, ChaseCoordinates2, Off
   SetTimer, ChaseCoordinates3, Off
   Gui, Destroy
   Gui, 2:Destroy
   Gui, 3:Destroy
   Gui, Add
      , Text
      , x32 y30 w140 h20 +Center
      , Made using AutoHotkey for
   Gui, Font, Bold
   Gui, Add
      , Text
      , x32 y50 w140 h20 +Center
      , Vasya Pupkin
   Gui, Font
   Gui, Font, CBlue Underline
   Gui, Add
      , Text
      , x22 y90 w160 h20 gAHKHome +Center
      , www.autohotkey.com
   Gui, Font
   Gui, Add, GroupBox, x22 y10 w160 h110
   Gui, -MinimizeBox -Resize
   Gui, Show, Center h135 w205, About
   hHandCursor:=DllCall("LoadCursor", UInt, 0
                                    , Int, 32649)
   OnMessage(0x200, "WM_MOUSEMOVE")
   Return

AHKHome:
   Run, http://www.autohotkey.com,, UseErrorLevel
   Return

GuiClose:
   OpenAbout:=0
   Gui, Destroy
   SetTimer, ChaseCoordinates, 250
   SetTimer, ChaseCoordinates2, 250
   SetTimer, ChaseCoordinates3, 250
   Hotkey, Ctrl & Esc, On
   Return

ExitScript:
   ExitApp

RevealGUI()
{
   Global
   Gui, +AlwaysOnTop
      . -Caption
      . +ToolWindow
      . +ToolWindow
      . +Border
      . +LastFound
;   WinSet, Trans, 125, ahk_class AutoHotkeyGUI
   Gui, Show, NoActivate x%GUIXPos%
                       . y%GUIYPos%
                       . w%Width%
                       . h%Height%
   GUIID:=WinExist()
}

RevealGUI2()
{
   Global
   Gui, 2:+AlwaysOnTop
      . -Caption
      . +ToolWindow
      . +ToolWindow
      . +Border
      . +LastFound
;   WinSet, Trans, 125, ahk_class AutoHotkeyGUI
   Gui, 2:Show, NoActivate x%GUIXPos%
                         . y%GUIYPos2%
                         . w%Width%
                         . h%Height%
   GUIID2:=WinExist()
}

RevealGUI3()
{
   Global
   Gui, 3:+AlwaysOnTop
      . -Caption
      . +ToolWindow
      . +ToolWindow
      . +Border
      . +LastFound
;   WinSet, Trans, 125, ahk_class AutoHotkeyGUI
   Gui, 3:Show, NoActivate x%GUIXPos%
                         . y%GUIYPos3%
                         . w%Width%
                         . h%Height%
   GUIID3:=WinExist()
}

WM_MOUSEMOVE(wParam, lParam)
{
   Global hHandCursor, Hover
   MouseGetPos,,,, WinControl
   If WinControl=Static3
      DllCall("SetCursor", UInt, hHandCursor)
}

WM_LBUTTONDOWN(uMsg, lParam)
{
   Global
   If (uMsg=0x404 And lParam=0x201)
   {
      If OpenAbout
         SetTimer, GuiClose, -0
      Else
         SetTimer, About, -0
   }
}

Гъюишек тут три, нужно больше?, добавь по аналогии.

35

Re: AHK: Клик мышью по области

Ладно, спасибо.
Тяжёлый для меня код.
Надо разбираться.
Может позже, через месяц ещё что нибудь спрошу, а пока мне надо это переворить.