我怎样才能使 keyoutput 依赖于 window 鼠标结束的内容?

How can I make the keyoutput dependent on what window the mouse is over?

所以如果鼠标在msedge上,一个键应该有不同的含义。我看过 MouseGetPos 、OutputVarX、OutputVarY、OutputVarWin 函数,但我不知道如何正确应用它。

我想出了一个使用 WinGet command 的解决方案。

您可能还想查阅 WinTitle parameter 上的快速参考。只要命令接受 WinTitle 参数,您就可以传递 window:

  • 唯一 ID
  • 标题
  • 拥有进程 PID

...等等。

来自 MouseGetPosOutputVarWin 数据将 return 一个唯一的 window ID。要在 WinTitle 参数中使用 window ID,请在其前面加上 ahk_id(示例如下)。

现在,我的示例使用热键 (Ctrl + Shift + D) 进行触发。您可能有一个条件包含在循环或其他东西中,所以我认为热键声明 (^+D::) 下方的任何内容都与您最相关。

^+D::       ;User presses Ctrl + Shift + D to fire this routine
MouseGetPos,,,hWindowID
WinGet,szProcess,ProcessName,ahk_id %hWindowID%     ;Prefixed with ahk_id so AHK knows it's a unique window ID
if(szProcess="msedge.exe")
    MsgBox Mouse is over Edge!
else
    MsgBox Mouse isn't over Edge!
return

您可以使用 #IfWinActive。这样可以确保语句下方的热键仅在某个 window 处于活动状态时才被激活。

注意 1:此指令适用于以下所有内容,除非您以其他方式告诉脚本。

注2:这并不取决于鼠标悬停在哪个window上,而是当前激活了哪个window。

参见:https://www.autohotkey.com/docs/commands/_IfWinActive.htm

我的一个脚本中的示例:

#IfWinActive ahk_class CabinetWClass    ;Shortcuts for windows explorer 

    ;Ctrl + numpad + is resize all columns to fit. Make sure this works for ctrl+=. 
    ^=::Send,{LCtrl down}{NumpadAdd}{LCtrl up}

#IfWinActive ;Make sure everything below is not keyed to Windows Explorer