' ControlCommand '与' ComboLBox '不起作用



它不是返回当前选定的字体,而是返回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下所说:

在普通组合框和列表框上工作的某些命令不起作用在"ComboLBox"控件上。

ComboLBox实际上是ComboBox的子控件,只是它的下拉部分。如果你使用更高级的窗口查找器,比如spy++,你会看到那里有一个组合框,有两个子框(一个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"one_answers"ListBox",如果没有匹配,返回零。

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

ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("F")
WinWaitActive("Font")
$select = ControlGetText("Font", "", "Edit1")
MsgBox(0,"", $select)

相关内容

  • 没有找到相关文章

最新更新