そのコントロールは、実際にはComboBox ではなく「Combo L Box」です。AutoItヘルプファイルの下にあるようにControlCommand
:
通常の Combo および ListBox で機能する特定のコマンドが、「ComboLBox」コントロールでは機能しません。
ComboLBox は、実際には ComboBox の子コントロールであり、そのドロップダウン部分にすぎません。Spy++ のようなより高度なウィンドウ ファインダーを使用すると、実際にはそこに ComboBox があり、2 つの子 (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」に対してコントロールクラスをチェックし、一致しない場合はゼロを返すと推測できます。