请教FindWindowEx的用法

freeboy827 2010-01-05 10:25:26
我有个窗体上有好多下拉框,并且caption都是空,请问如何获取每个下拉框,谢谢
...全文
502 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzsh0622 2010-01-06
  • 打赏
  • 举报
回复
下面这段代码 对TextBox有效,应该能用于下拉列表,你可以试试

[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
const int WM_GETTEXT = 0x000D;
const int WM_SETTEXT = 0x000C;
const int WM_CLICK = 0x00F5;

private void button1_Click(object sender, EventArgs e)
{
// ...
SendMessage(hWnd6, WM_SETTEXT, (IntPtr)0, "abcdef");
SendMessage(hWnd7, WM_SETTEXT, (IntPtr)0, "123456");
}


freeboy827 2010-01-06
  • 打赏
  • 举报
回复
还有个问题
就是如何设置下拉框的值?
freeboy827 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lzsh0622 的回复:]
引用 8 楼 freeboy827 的回复:
只有类名,没有标题名,而且类名一样的有好几个控件,怎么分别控制?


数量是固定的,顺序是固定的,可以多查几次就都得到了。如:

IntPtr hWnd2= FindWindowEx(hWnd1, IntPtr.Zero,"控件类名",null); // 第1个
IntPtr hWnd3= FindWindowEx(hWnd1, hWnd2      ,"控件类名",null); // 第2个
IntPtr hWnd4= FindWindowEx(hWnd1, hWnd3      ,"控件类名",null); // 第3个
...
[/Quote]
好的,谢谢,我试试
用遍历也可以吧
lzsh0622 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 freeboy827 的回复:]
只有类名,没有标题名,而且类名一样的有好几个控件,怎么分别控制?
[/Quote]

数量是固定的,顺序是固定的,可以多查几次就都得到了。如:

IntPtr hWnd2= FindWindowEx(hWnd1, IntPtr.Zero,"控件类名",null); // 第1个
IntPtr hWnd3= FindWindowEx(hWnd1, hWnd2 ,"控件类名",null); // 第2个
IntPtr hWnd4= FindWindowEx(hWnd1, hWnd3 ,"控件类名",null); // 第3个
...
wartim 2010-01-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/spo22/archive/2009/11/16/4816811.aspx
freeboy827 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lzsh0622 的回复:]
下面这段代码 对TextBox有效,应该能用于下拉列表,你可以试试
C# code
[DllImport("User32.dll", EntryPoint="SendMessage")]privatestaticexternint SendMessage(IntPtr hWnd,int Msg, IntPtr wParam,string lParam);constint WM_GETTEXT=0x000D;constint WM_SETTEXT=0x000C;constint WM_CLICK=0x00F5;privatevoid button1_Click(object sender, EventArgs e)
{// ... SendMessage(hWnd6, WM_SETTEXT, (IntPtr)0,"abcdef");
SendMessage(hWnd7, WM_SETTEXT, (IntPtr)0,"123456");
}
[/Quote]
谢谢,我试了,还是不行
freeboy827 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lzsh0622 的回复:]
根据SPY++中取得的类名(或标题名)及层次关系,按照下面用法套用就行了.
C# code
[DllImport("user32.dll", EntryPoint="FindWindow")]privateexternstatic IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("user32.dll")]staticextern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter,string lpszClass,string lpszWindow);privatevoid button1_Click(object sender, EventArgs e)
{
IntPtr hWnd1= FindWindow(null,"主窗口标题");
SetForegroundWindow(hWnd1);

IntPtr hWnd2= FindWindowEx(hWnd1, IntPtr.Zero,null,"控件文本");// 用法1
IntPtr hWnd3= FindWindowEx(hWnd1, IntPtr.Zero,"控件类名",null);// 用法2}
[/Quote]
谢谢回答,问题是只有类名,没有标题名,
而且类名一样的有好几个控件,怎么分别控制?
lzsh0622 2010-01-05
  • 打赏
  • 举报
回复
根据SPY++中取得的类名(或标题名)及层次关系,按照下面用法套用就行了.

[DllImport("user32.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

private void button1_Click(object sender, EventArgs e)
{
IntPtr hWnd1 = FindWindow(null, "主窗口标题");
SetForegroundWindow(hWnd1);

IntPtr hWnd2 = FindWindowEx(hWnd1, IntPtr.Zero, null, "控件文本"); // 用法1

IntPtr hWnd3 = FindWindowEx(hWnd1, IntPtr.Zero, "控件类名", null); // 用法2
}
healer_kx 2010-01-05
  • 打赏
  • 举报
回复
哇~
好熟悉的Win32 API啊。
linekery 2010-01-05
  • 打赏
  • 举报
回复
lz 说的下拉框是什么意思

findwindow 是根据 title 来获取 窗口的句柄
starseeker7 2010-01-05
  • 打赏
  • 举报
回复
嘛,,,当然别人程序提供了返回当前状态接口除外= - =
不过楼主似乎是对未知的程序做扫描一样- -
starseeker7 2010-01-05
  • 打赏
  • 举报
回复
前排围观- -
不过俺这个菜觉得无法实现吧?
网页还可能,,,
windows下就,,,
freeboy827 2010-01-05
  • 打赏
  • 举报
回复
如梦大哥,我没有说清楚,
我的意思是我写一个程序来查找别人写好的程序,
我用SPY++查到了句柄,还有类名,没有标题,
请问如何用那个函数来查每个下拉框
wuyq11 2010-01-05
  • 打赏
  • 举报
回复
遍历控件
public void FindControl(Control.ControlCollection c)
{
foreach (System.Windows.Forms.Control control in c)
{
if (control.HasChildren)
{
FindControl(control.Controls);
}
else
{
if (control is ComboBox)
{
ComboBoxc= control as ComboBox;
}
}
}
}

110,580

社区成员

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

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

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