标签: autohotkey

在autohotkey中获取可用的屏幕区域

我正在尝试编写一些简单的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)

windows autohotkey

7
推荐指数
1
解决办法
8569
查看次数

Autohotkey窗口出现事件

我正在使用WorkRave休息提醒,并希望在其余窗口出现时关闭我的屏幕.我知道怎么把它关掉.

如何在指定窗口(#IfWinActive ahk_class ...)出现时创建事件?

另外,我可以绑定%符号吗?{%}不起作用,而不是其他的.

autohotkey

7
推荐指数
1
解决办法
6322
查看次数

热键if语句使用多个条件

以下脚本可以在任何地方使用打开Firefox的位置/"真棒"栏control-l,除非使用Acrobat/Adob​​e阅读器.这是因为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)

conditional autohotkey

7
推荐指数
1
解决办法
8612
查看次数

动态创建AutoHotkey热键到功能/子例程

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 function hotkeys dynamic subroutine

7
推荐指数
2
解决办法
5035
查看次数

使用 AutoHotkey 捕获 CMD 输出

我正在尝试使用 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 位系统?
如果计算架构可能不是问题所在,那么问题可能是什么? …

cmd autohotkey

7
推荐指数
1
解决办法
1万
查看次数

AutoHotkey 中的功能键叫什么?

Fn我的 Windows 7 键盘底部有一个标有蓝色字母的按键。我想每当有人按下该键时就触发我的 AutoHotkey 脚本。

AutoHotkey 中的功能键叫什么?

autohotkey keyboard-events

7
推荐指数
1
解决办法
4426
查看次数

为什么我的AutoHotkey脚本只能输入一些表情符号?

我已经设置了一个小的AutoHotkey脚本,它使用热字符串来允许我键入一些表情符号和其他特殊字符:

#SingleInstance force

#Hotstring * ?

::–::–
::†::†

::π::

::&shrug;::¯\_(?)_/¯
::&tm;::™
::&c;::©
::&r;::®
::&tableflip;::(?°?°??? ???
::&music;::?
::&piano;::
::&cmark;::?
::&xmark;::?
::&hourglass;::?
Run Code Online (Sandbox Code Playgroud)

该脚本也可以在PasteBin上使用.

这一切都在我的文本编辑器中工作: 来自文本编辑器的screengrab

但是,某些替换在任何地方都不起作用,例如在Telegram Desktop中: 来自Telegram Desktop的screengrab

这两个表情符号最初都是从Telegram Desktop复制的,因此它们肯定受到支持.

为什么这不按预期工作?

我在Windows 10(版本1511),Sublime Text 3(3103)和Telegram Desktop 0.9.28上运行版本1.1.23.3中的AutoHotkey Unicode 64位.

unicode autohotkey emoji

7
推荐指数
1
解决办法
1532
查看次数

AutoHotKey映射

我正在尝试使用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)

但它不会产生预期的结果.请帮忙!!

autohotkey

6
推荐指数
1
解决办法
3722
查看次数

如何使用 AutoHotkey 自动化 Java 应用程序?

我在工作中使用 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)

java automation accessibility autohotkey

6
推荐指数
1
解决办法
3189
查看次数

如何在 autohotkey v2 中连接字符串和变量?

这是在 v1 中运行的一段代码:

Var1 := "Example"
%Var1%Variable := "Concatenated Variable"
MsgBox % ExampleVariable
Run Code Online (Sandbox Code Playgroud)

然而,该语法似乎已从 v2 中删除。有什么办法可以在 v2 中做到这一点吗?

autohotkey

6
推荐指数
1
解决办法
1326
查看次数