2016-09-14 67 views
0

通過代碼我從另一個進程對話框組合框項目選擇與單一的SendMessage

這裏選擇comboxbox項目是試圖

// selecting using item text 
void setComboBox(HWND hDlg, const char* value, int ctrlId) { 
    SendDlgItemMessageA(hDlg, ctrlId, CB_SELECTSTRING, -1, (LPARAM) value); 
    SendMessageA(hDlg, WM_COMMAND, MAKEWPARAM(ctrlId,CBN_SELCHANGE), 
      (LPARAM) GetDlgItem(hDlg, ctrlId)); 

} 

// selecting using item index 
void setComboBox(HWND hDlg, int i, int ctrlId) { 
    SendDlgItemMessageA(hDlg, ctrlId, CB_SETCURSEL, i, 0); 
    SendMessageA(hDlg, WM_COMMAND, MAKEWPARAM(ctrlId,CBN_SELCHANGE), 
      (LPARAM) GetDlgItem(hDlg, ctrlId)); 
} 

所以,我看到的是在這兩種方法中的2路線我需要發送第二個消息(WM_COMMAND),這會增加延遲。 有沒有什麼方法可以選擇並使用單個消息通知兩者?

+1

自動化將爲您處理 –

+0

感謝大衛,我現在考慮使用UIA,順便說一句,我的當前2 sendmessage和uia之間的延遲如何比較,任何想法。 –

+0

這是你的性能瓶頸? –

回答

1

否按設計,通過代碼更改選擇不會觸發CBN_SELCHANGE。該文檔明確指出:

當使用CB_SETCURSEL消息設置當前選擇時,不會發送CBN_SELCHANGE通知代碼。

只有用戶操作觸發CBN_SELCHANGE,因此您必須手動發送它。