它不返回当前选择的字体,而是返回 0。
ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("F")
WinWaitActive("Font")
$select = ControlCommand("Font", "", "[CLASS:ComboLBox; INSTANCE:1]", "GetCurrentSelection", "")
MsgBox(0,"", $select)
它不返回当前选择的字体,而是返回 0。
ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("F")
WinWaitActive("Font")
$select = ControlCommand("Font", "", "[CLASS:ComboLBox; INSTANCE:1]", "GetCurrentSelection", "")
MsgBox(0,"", $select)
该控件实际上是“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”是否匹配,如果不匹配则返回零。
如果这是您想要完成的,您可以使用ControlGetText()来读取当前活动字体的名称。
ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("F")
WinWaitActive("Font")
$select = ControlGetText("Font", "", "Edit1")
MsgBox(0,"", $select)