2016-03-25 12 views
1

Aşağıdaki kodları kullanarak başka bir uygulamanın bir düğmesini tıklatmayı biliyorum. Ama şimdi bir açılan kutunun seçilen değerini nasıl değiştireceğimi bilmem gerekiyor.Başka bir uygulamanın açılan kutucuğu seçili değeri nasıl değiştirilir? Visual Basic

'Declaration 
Private Declare Auto Function FindWindow Lib "user32.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr 
Private Declare Auto Function FindWindowEx Lib "user32.dll" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As IntPtr, ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr 
Declare Auto Function PostMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByRef lParam As IntPtr) As IntPtr 
Private Const BM_CLICK = &HF5 

'Usage 
Dim ButtonHandle As IntPtr 
Dim MainWindowHandle As IntPtr 
MainWindowHandle = FindWindow(FormClass, FormCaption) 
ButtonHandle = FindWindowEx(MainWindowHandle, IntPtr.Zero, TargetClass, TargetCaption) 
If ButtonHandle <> 0 Then 
    PostMessage(ButtonHandle, BM_CLICK, 0, 0) 
End If 

yapmam gereken tek şey On değerine Off varsayılan değerine farklı bir uygulamanın combobox seçilen değeri değiştirmektir. Herhangi bir yardım çok takdir edilmektedir. Teşekkür ederim.

+0

Belgeyi henüz okudunuz mu? [ComboBox Kontrol Mesajları] (https://msdn.microsoft.com/en-us/library/windows/desktop/ff485901.aspx). Bkz. ['CB_SETCURSEL'] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb775899.aspx). –

+0

Yardımlarınız için teşekkür ederiz. Bunun nasıl çalıştığını anlamaya çalışacağım. –

+0

@RemyLebeau Peki şimdi çalışıyor, ancak değiştirdiği birleşik kutu, istediğim değil. Değişen açılan kutu ilk olan ve ikincisini değiştirmem gerekiyor. Bunu nasıl yapabilirim? –

cevap

1

Son olarak, şimdi bunu nasıl yapacağımı biliyorum. Kullandığım kod aşağıda gösterilmiştir. MSDN documentation of FindWindowEx itibaren

'Declaration 
Private Declare Auto Function FindWindow Lib "user32.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr 
Private Declare Auto Function FindWindowEx Lib "user32.dll" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As IntPtr, ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr 
Declare Auto Function PostMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByRef lParam As IntPtr) As IntPtr 

Private Const BM_CLICK = &HF5 
Private Const CB_SETCURSEL = &H14E 

'Usage 
Dim MainWindowHandle As IntPtr 
Dim ChildAfter As IntPtr 
Dim ComboBoxHandle As IntPtr 
'Get the Handle 
MainWindowHandle = FindWindow(FormClass, FormCaption) 
'Get the ChildAfter of the Combo Box 
ChildAfter = FindWindowEx(MainWindowHandle, IntPtr.Zero, ChildClass, ChildCaption) 
'Get the handle of the combobox dropdown 
ComboBoxHandle = FindWindowEx(MainWindowHandle, ChildAfter, "ComboBox", vbNullString) 
'Select combo box index(1) 
PostMessage(ComboBoxHandle, CB_SETCURSEL, 1, 0) 

:

Tipi [isteğe bağlı, içinde]

hwndChildAfter: HWND

çocuk penceresine kolu. Arama, bir sonraki alt pencere ile Z sırasına göre başlar. Alt pencere, yalnızca bir alt pencereden değil, hwndParent öğesinin doğrudan bir alt penceresi olmalıdır.

hwndChildAfter NULL ise, arama, hwndParent öğesinin ilk alt penceresiyle başlar.

@RemyLebeau Bunu yapmama yardım ettiğiniz için çok teşekkür ederim.

İlgili konular