如何用sendmessage触发combobox的CBN_SELCHANGE事件

zhlhyy 2012-08-18 12:05:26
本人在网上反复查找,主要用下面方法,均未成功,望高人指点迷津
方法一:能触发事件,但无法改变选择(选择始终是第一项)
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命令
...全文
924 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhlhyy 2012-08-21
  • 打赏
  • 举报
回复
自己再顶一下
zhlhyy 2012-08-19
  • 打赏
  • 举报
回复
问题无法解决,哪位高手能帮忙啊?
zhlhyy 2012-08-18
  • 打赏
  • 举报
回复
是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是只读的,不知道有没有关系到
stonespace 2012-08-18
  • 打赏
  • 举报
回复
你确定你要控制的窗口是combobox吗?有时候只是看起来像combobox,不是真的combobox,

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧