Pingui
Pingui

Reputation: 1496

No 'OnMouseClick'-Trigger?

I wanted to have a window closed by Autohotkey as soon as I click somewhere else and was confident that there would be a fitting trigger / listener like e.g. an OnMouseClick - function. But seems not; MouseClick just actively clicks the mouse. So the best way I could figure was this:

SetTitleMatchMode, 2
Loop{
    WinGetActiveTitle, OutputVar
    if (OutputVar <> "My_Window_Name_to_close.ahk"){
        WinClose , AutoTasks 2.ahk
    }
    Sleep, 1000
}
return

While the above code does work, it leaves me unsatisfied that that's really the best AHK can do (?), because those few lines of code, while not a real problem, do cost CPU and memory (according to my Task Manager e.g. more than Skype or my Cloud Background service). The 1-second-sleep also introduces a discernible lag, but without it, the loop would even cost 2% CPU!

Can you come up with a more efficient / AHK-native solution (except for further increasing the Sleep-time)?

Upvotes: 1

Views: 146

Answers (2)

Bort
Bort

Reputation: 551

Even though you found a solution to your problem, I wanted to provide an answer to the actual question of detecting a click. That can be done using a hotkey for "LButton" in combination with the tilde "~" modifier like so:

~LButton:: ; The "~" sets it so the key's native function will not be blocked 
    GoSub CheckActiveWindow
Return

CheckActiveWindow:
    sleep, 1 ; Wait a small amount of time in case the desired Window is changing from inactive to Active
    WinGetActiveTitle, OutputVar
    if (OutputVar <> "My_Window_Name_to_close.ahk"){
        WinClose , AutoTasks 2.ahk
    }
return

Upvotes: 2

Pingui
Pingui

Reputation: 1496

I've found the answer myself in the meantime:

SetTitleMatchMode, 3 ; exact match
WinWaitNotActive, My_Window_Name_to_close.ahk
WinClose, My_Window_Name_to_close.ahk

Upvotes: 1

Related Questions