2013-12-18 22 views
0

如何在python中選擇winapi中的comobobox? 我現在的代碼如下。 它選擇組合框項目,但對程序沒有影響。 似乎沒有事件被觸發。通過python中的winapi選擇組合框

import win32gui 
import win32api 
import win32con 

class CBoxChanger: 

    def run(): 
     #init vars 
     self.count=0 

     #get the desktop window 
     lhWnd = win32gui.GetDesktopWindow() 

     #get the window window 
     win32gui.EnumChildWindows(lhWnd, self.appHandler, l) 

     #select toolbar 
     win32gui.EnumChildWindows(self.window_hwnd, self.toolBarHandler, l) 

     #select dialogbox 
     GW_CHILD=5 
     self.dialogbox_hwnd=win32gui.GetWindow(self.toolbar_hwnd,GW_CHILD) 

     #select item nr 3 
     index=2 
     win32gui.SendMessage(self.dialogbox_hwnd,win32con.CB_SETCURSEL,index,0) 



    def appHandler(self,lhWnd,lParam): 
     text = win32gui.GetWindowText(lhWnd) 
     if text=="WINDOWTITLE": 
     self.window_hwnd=lhWnd 

    def toolBarHandler(self,lhWnd,lParam): 
     self.count+=1 
     if self.count==5: 
      self.toolbar_hwnd=lhWnd 

所以我如何觸發所需的程序來處理所選擇的組合框(像的onclick,或ONSELECT事件)的reaktion事件?

+0

看看我的回答這裏http://stackoverflow.com/questions/19290914/cb-selectstring-ignored-on-some-machines您可能必須在選擇更改後通知父母。 – manuell

回答

0

找到一個解決方案:擴展這個

 #select item nr 3 
     index=2 
     win32gui.SendMessage(self.dialogbox_hwnd,win32con.CB_SETCURSEL,index,0) 

有:

 #select item nr 3 
     index=2 
     win32gui.SendMessage(self.dialogbox_hwnd,win32con.CB_SETCURSEL,index,0) 

     #trigger event 
     win32gui.SendMessage(self.dialogbox_hwnd, win32con.WM_LBUTTONDOWN, 0, 0) 
     win32gui.SendMessage(self.dialogbox_hwnd, win32con.WM_LBUTTONUP, 0, 0) 
     win32gui.SendMessage(self.dialogbox_hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) 
     win32gui.SendMessage(self.dialogbox_hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0) 
     win32gui.SendMessage(self.dialogbox_hwnd, win32con.CBN_SELCHANGE) 
     win32gui.SendMessage(self.dialogbox_hwnd, win32con.CBN_SELENDOK) 

我不知道,如果它是最簡單可行的解決方案,但它工作