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

そのコントロールは、実際には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」に対してコントロールクラスをチェックし、一致しない場合はゼロを返すと推測できます。

于 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 に答える