我正在尝试编写一些简单的AutoHotkey脚本来移动窗口,我无法获得正确的屏幕尺寸值.
我试图获得屏幕上可用区域的大小(通常是全屏分辨率减去任务栏,也可能是任何其他停靠窗口,如Vista中的侧边栏).我找到的用于获得屏幕宽度的方法似乎都不起作用.
我发现获得屏幕尺寸的3种方法都没有给我正确的值.这是我正在使用的测试脚本(在XP上运行,底部的任务栏为默认大小):
#7::
WinMove A,,0,0,A_ScreenWidth,A_ScreenHeight
return
#8::
;SM_CXMAXIMIZED and SM_CYMAXIMIZED
SysGet, ScreenWidth, 61
SysGet, ScreenHeight, 62
WinMove A,,0,0,ScreenWidth,ScreenHeight
return
#9::
;SM_CXFULLSCREEN and SM_CYFULLSCREEN
SysGet, ScreenWidth, 16
SysGet, ScreenHeight, 17
WinMove A,,0,0,ScreenWidth,ScreenHeight
return
Run Code Online (Sandbox Code Playgroud)
#7使窗口占据整个分辨率,因此它与任务栏重叠.
#8导致宽度大于分辨率(我看到窗口的右边缘显示在我的辅助监视器上)并且高度稍微过大,因此窗口部分重叠任务栏区域.看起来这是正确的,除了没有考虑边缘的窗户装饰.
#9似乎有正确的宽度,但高度太短.看起来它正在从分辨率的高度减去任务栏的高度,但是从它减去另外30个像素.
我可以使用我在#9中的内容并将其添加到我所获得的高度30,但这感觉太像在其他配置中会破坏的黑客.似乎必须有一种方法来正确获得可用的屏幕尺寸,但我无法在AutoHotkey中找到它.
作为参考,这似乎给了我在Java中需要的东西:
Toolkit.getDefaultToolkit().getScreenSize();
Run Code Online (Sandbox Code Playgroud) 我正在使用WorkRave休息提醒,并希望在其余窗口出现时关闭我的屏幕.我知道怎么把它关掉.
如何在指定窗口(#IfWinActive ahk_class ...)出现时创建事件?
另外,我可以绑定%符号吗?{%}不起作用,而不是其他的.
以下脚本可以在任何地方使用打开Firefox的位置/"真棒"栏control-l,除非使用Acrobat/Adobe阅读器.这是因为control-l在Acrobat中全屏显示.它工作,但它很丑,并使用嵌套#ifWinNotActive.
#IfWinNotActive, ahk_class MozillaWindowClass
#IfWinNotActive, ahk_class ahk_class AcrobatSDIWindow
^l::
WinActivate, ahk_class MozillaWindowClass
Send, ^l
return
#IfWinNotActive
#IfWinNotActive
Run Code Online (Sandbox Code Playgroud)
以下代码替换不起作用.Autohotkey不会抱怨错误,但忽略了!WinActive条件,而且似乎陷入无限循环.有什么想法吗?(我在结束括号前后都尝试了return语句.)
^l::
if (!WinActive(ahk_class,MozillaWindowClass)) and (!WinActive(ahk_class,AcrobatSDIWindow)) {
WinActivate, ahk_class MozillaWindowClass
Send, ^l
}
return
Run Code Online (Sandbox Code Playgroud) AutoHotkey命令Hotkey允许在运行时创建动态热键,但其语法和文档似乎将其限制为内置或现有标签/子例程,这使得它没那么有用:
热键,KeyName [,标签,选项]
有没有办法让它像普通的硬编码热键一样工作?例如:
#z::MsgBox foobar ; Typical, hard-coded hotkey pops up a message-box
Hotkey, z, MsgBox foobar ; Nope; complains about missing label “MsgBox foobar”
Run Code Online (Sandbox Code Playgroud)
看起来它可能是由于手册中的以下行,但不清楚它是如何工作的:
标签 - 可以使用普通标签和热键/热字符串标签.
我正在尝试使用 AutoHotkey 读取 Windows CMD 的标准输出。例如,我想将setAHK 内的控制台命令的输出存储在变量中。我不久前已经实现了它,这让我更加困惑为什么它现在不起作用。
在 AHK 论坛中,有一个关于CMDret 的相当老的线程,这是一个基于 DLL 的功能,可以完全满足我的需求。第一个问题是找到一个可用的下载,因为帖子中的所有链接都已失效。Google 给了我另一个网站,托管v3.1.2。虽然似乎有一个较新的版本(分别是v3.2.1 4d Beta),但我检查了它并测试了一个简单的示例:
msgbox % CMDret(COMSPEC " /C set")
CMDret(CMD)
{
VarSetCapacity(StrOut, 10000)
RetVal := DllCall("cmdret.dll\RunReturn", "str", CMD, "str", StrOut)
Return, %StrOut%
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,MsgBox 中什么也没有包含。然后我检查了RetVal哪个值为0;随附的自述文件说:
如果函数失败,返回值为零。
再往下写着:
注意:当前只有 32 位控制台应用程序可以使用此 dll 版本的 CMDret(v3.1.2 或更低版本)。需要 command.com 的调用可能不会产生任何输出,并且可能会崩溃。为了避免这种情况,我在下载中包含了一个名为“cmdstub.exe”的文件(在 Win9x 文件夹中)。当调用16 位控制台应用程序以启用返回输出时,应使用此文件 。
总之,我不确定问题是什么。我的机器运行在 64 位上。但自述文件中的相应条款是否应该仅排除 16 位系统,还是仅包括 32 位系统?
如果计算架构可能不是问题所在,那么问题可能是什么? …
Fn我的 Windows 7 键盘底部有一个标有蓝色字母的按键。我想每当有人按下该键时就触发我的 AutoHotkey 脚本。
AutoHotkey 中的功能键叫什么?
我已经设置了一个小的AutoHotkey脚本,它使用热字符串来允许我键入一些表情符号和其他特殊字符:
#SingleInstance force
#Hotstring * ?
::–::–
::†::†
::π::
::&shrug;::¯\_(?)_/¯
::&tm;::™
::&c;::©
::&r;::®
::&tableflip;::(?°?°??? ???
::&music;::?
::&piano;::
::&cmark;::?
::&xmark;::?
::&hourglass;::?
Run Code Online (Sandbox Code Playgroud)
该脚本也可以在PasteBin上使用.
但是,某些替换在任何地方都不起作用,例如在Telegram Desktop中:

这两个表情符号最初都是从Telegram Desktop复制的,因此它们肯定受到支持.
为什么这不按预期工作?
我在Windows 10(版本1511),Sublime Text 3(3103)和Telegram Desktop 0.9.28上运行版本1.1.23.3中的AutoHotkey Unicode 64位.
我正在尝试使用AutoHotkey在键盘上映射以下组合键 -
Alt i - >向上箭头Alt j - >向左箭头Alt k - >向右箭头Alt m - >向下箭头
我将以下代码添加到我的AutoHotkey.ahk文件中 -
!i::Up
!j::Down
!m::Left
!k::Right
Run Code Online (Sandbox Code Playgroud)
但它不会产生预期的结果.请帮忙!!
我在工作中使用 Java 应用程序。我需要将点击发送到按钮并填充文本框。我希望这些操作在后台发生。所述ahk_class窗口是SunAwtFrame,并且没有控制的暴露于WindowSpy。
我已经使用 JavaFerret 来确定我想按下的第一个按钮有一个AccessibleAction
Version Information:
Java virtual machine version: 1.7.0_25
Access Bridge Java class version: 1.7.0_25
Access Bridge Java DLL version: AccessBridge 2.0.2
Access Bridge Windows DLL version: AccessBridge 2.0.2
AccessibleContext information:
Name: New Call
Description: Place a new call
Role: push button
Role in en_US locale: push button
States: enabled,focusable,visible,showing,opaque
States in en_US locale: enabled,focusable,visible,showing,opaque
Index in parent: 1
Children count: 0
Bounding rectangle: [288, 317, 385, 376]
Top-level window name: Phone Assistant: …Run Code Online (Sandbox Code Playgroud) 这是在 v1 中运行的一段代码:
Var1 := "Example"
%Var1%Variable := "Concatenated Variable"
MsgBox % ExampleVariable
Run Code Online (Sandbox Code Playgroud)
然而,该语法似乎已从 v2 中删除。有什么办法可以在 v2 中做到这一点吗?
autohotkey ×10
automation ×1
cmd ×1
conditional ×1
dynamic ×1
emoji ×1
function ×1
hotkeys ×1
java ×1
subroutine ×1
unicode ×1
windows ×1