本人在网上反复查找,主要用下面方法,均未成功,望高人指点迷津
方法一:能触发事件,但无法改变选择(选择始终是第一项)
            SendMessage(hComboBox, CB_SHOWDROPDOWN, 1, 0);
            SendMessage(hComboBox, CB_SETCURSEL, 2, 0);
            ShowWindow(hComboBox, SW_NORMAL);
            SetForegroundWindow(hComboBox);
            Thread.Sleep(100);
            Support.SendMessage(hComboBox, WM_KEYDOWN, VK_RETURN, 0);
            Thread.Sleep(100);
            Support.SendMessage(hComboBox, WM_KEYUP, VK_RETURN, 0);
方法二:不知道其中一行代码 Tools.ToD(cbn_selchange, 16)
              IntPtr mwh = (IntPtr)Convert.ToInt32(handle);                //ComboBox的句柄
              int result = SendMessage(hComboBox, CB_SETCURSEL, index, 0); //改变ComboBox的值       
              int mwh_p = GetWindowLong(hComboBox, -8);                    //获取ComboBox所属窗口的句柄                        
              IntPtr mwh2 = (IntPtr)Convert.ToInt32(mwh_p);                //转换ComboBox所属窗口的句柄
              string cbn_selchange;
        int cb_id = GetWindowLong(hComboBox, -12);                   //获取ComboBox的控件ID
        cbn_selchange = "0001" + string.Format("{0:X4}", cb_id);      
        IntPtr s1 = (IntPtr)Convert.ToInt32(Tools.ToD(cbn_selchange, 16));
        SendMessage(mwh2, WM_COMMAND, s1, hComboBox);                    //给ComboBox所属窗口发送WM_COMMAND命令

解决方案 »

  1.   

    你确定你要控制的窗口是combobox吗?有时候只是看起来像combobox,不是真的combobox,
      

  2.   

    是combobox没错啊,我如果只用SendMessage(hComboBox, CB_SETCURSEL, 2, 0);这是可以修改成功的,只是没触发事件,但如果加上后面的代码,
    ShowWindow(hComboBox, SW_NORMAL);
      SetForegroundWindow(hComboBox);
      Thread.Sleep(100);
      SendMessage(hComboBox, WM_KEYDOWN, VK_RETURN, 0);
      Thread.Sleep(100);
      SendMessage(hComboBox, WM_KEYUP, VK_RETURN, 0);
    就又变成选择了第一项的,真郁闷。另外这个COMBOBOX是只读的,不知道有没有关系到