0

它不返回当前选择的字体,而是返回 0。

ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("F")
WinWaitActive("Font")
$select = ControlCommand("Font", "", "[CLASS:ComboLBox; INSTANCE:1]", "GetCurrentSelection", "")
MsgBox(0,"", $select)
4

2 回答 2

3

该控件实际上是“Combo L Box”,而不是 ComboBox。正如 AutoIt 帮助文件在下面所说ControlCommand

适用于普通 Combo 和 ListBoxes 的某些命令不适用于“ComboLBox”控件。

ComboLBox 实际上是 ComboBox 的子控件,只是它的下拉部分。如果您使用更高级的窗口查找器(如 Spy++),您实际上会看到那里有一个 ComboBox,有两个孩子(一个 Edit 和 ComboLBox)。因此,如果您更改"[CLASS:ComboLBox; INSTANCE:1]""[CLASS:ComboBox; INSTANCE:1]".

此外,您可以改进触发菜单项的代码,以便整个操作可以在后台完成。

#include <WindowsConstants.au3>
#include <WinAPI.au3>

Local $IDM_FONT = 33
Local $hWindow = WinGetHandle("Untitled - Notepad")

_WinAPI_PostMessage($hWindow, $WM_COMMAND, $IDM_FONT, 0)

Local $hFontWin = WinWait("Font")
$select = ControlCommand($hFontWin, "", "ComboBox1", "GetCurrentSelection", "")
WinClose($hFontWin)

MsgBox(0,"", $select)

或者,您可以使用与列表框相同的方式与 ComboLBox 进行交互:

$hLBox = ControlGetHandle($hFontWin, "", "ComboLBox1")
$itemIndex = _GUICtrlListBox_GetCurSel()
$select = _GUICtrlListBox_GetText($hLBox, $itemIndex)

我不知道为什么ControlCommand不能使用这种特定类型的列表框。我只能猜测,他们在内部检查控件类与“ComboBox”和“ListBox”是否匹配,如果不匹配则返回零。

于 2013-06-18T08:55:52.443 回答
0

如果这是您想要完成的,您可以使用ControlGetText()来读取当前活动字体的名称。

ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("F")
WinWaitActive("Font")
$select = ControlGetText("Font", "", "Edit1")
MsgBox(0,"", $select)
于 2013-06-18T07:40:59.410 回答