它不返回当前选定的字体,而是返回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 :(得分:3)
该控件实际上是“Combo L Box”,而不是ComboBox。正如Auto ControlCommand
下的AutoIt帮助文件所示:
某些适用于普通Combo和ListBox的命令不起作用 在“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”检查控件类,如果没有匹配则返回零。
答案 1 :(得分:0)
如果您想要完成此任务,可以使用ControlGetText()来读取当前活动字体的名称。
ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("F")
WinWaitActive("Font")
$select = ControlGetText("Font", "", "Edit1")
MsgBox(0,"", $select)