2013-03-25 111 views
0

我有一个在应用程序主窗口中嵌入PuTTY会话的应用程序(Royal TS)。但是,如果另一个应用程序的窗口遮挡了嵌入的PuTTY会话,并且我单击了嵌入的PuTTY会话,则皇家TS窗口不会出现在的前面。如何区分左键单击和左键单击并拖动操作?

于是,我试着用以下AutoHotkey的脚本来解决此问题:

LButton::        ; Detect left mouse button click 
MouseGetPos, xpos, ypos, win_id  ; Get mouse position and window ID 
WinGetTitle, title, ahk_id %win_id% ; Get window title 
WinGetClass, class, ahk_id %win_id% ; Get window class 

if class=PuTTY      ; If clicked in an emmbeded PuTTY window... 
{          ; 
    IfWinExist, Royal TS    ; ...and Royal TS is running... 
    {         ; 
    WinActivate      ; ...bring Royal TS to the front 
    }         ; 
}          ; 
else         ; Else, it wasn't a PuTTY window clicked... 
{          ; 
    MouseClick, left, xpos, ypos  ; ...just pass mouse button click through 
}          ; 
return        ; 

这种精细...直到工作到一个点。当我尝试点击并按住应用程序的标题栏拖动它(或调整应用程序窗口的大小)并且拦截我的左按钮时,发生问题,但由于鼠标单击命令而导致拖动或调整窗口大小的意图丢失接近剧本的末尾。

如何区分左键单击和左键单击并拖动操作?

回答

0

将您的LButton::更改为~LButton::并删除else声明。

~将使鼠标左键照常工作,但仍然会运行代码。

+0

太棒了!非常感谢...它是一种享受! – 2013-03-25 16:10:18

+0

实际上,'WinActivate'命令出现了一个小问题...如果我点击嵌入式PuTTY会话,皇家TS窗口_was_激活(被带到前面),但是PuTTY会话没有焦点(即if我在点击PuTTY会话后开始输入我的文本没有输入到会话中)。我通过用两个WinSet命令替换WinActivate命令解决了这个问题: 'WinSet,AlwaysOnTop,On,Royal TS' 'WinSet,AlwaysOnTop,Off,Royal TS' – 2013-03-26 15:23:45

相关问题