获取控件的句柄为149744696200003584

时间:2021-07-07 14:41:13
      我用API获取别人程序里控件的句柄,返回值如题所示,不知道是怎么回事
获取控件的句柄为149744696200003584
获取控件的句柄为149744696200003584

11 个解决方案

#1


每一个返回值都要判断是否成功了

#2


引用 1 楼 jennyvenus 的回复:
每一个返回值都要判断是否成功了

怎么加呢

#3


引用 2 楼 u010928128 的回复:
Quote: 引用 1 楼 jennyvenus 的回复:

每一个返回值都要判断是否成功了

怎么加呢

Do循环 + Sleep() 
用Sleep的目的是使程序在找窗口的过程中(查找都已经加载完成的窗口不用考虑Sleep)不会太占CUP资源。
另外可以用一个变量计数,按Sleep()的时间+最大循环次数给定一个“最大等待时间”,
超过给定的时间没有找到目标窗口,也要强制退出循环(有效防止各种不确定因素造成程序死锁)。
(或“按最长等待时间”反算最大循环次数)

上面的这个“找窗口句柄的过程”最好是封装成一个函数,
这样可以“顺序调用”的形式实现查找多层嵌套的窗口、并且便于每一步查找的“验证”。


#4


另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

#5


引用 3 楼 Chen8013 的回复:
Quote: 引用 2 楼 u010928128 的回复:

Quote: 引用 1 楼 jennyvenus 的回复:

每一个返回值都要判断是否成功了

怎么加呢

Do循环 + Sleep() 
用Sleep的目的是使程序在找窗口的过程中(查找都已经加载完成的窗口不用考虑Sleep)不会太占CUP资源。
另外可以用一个变量计数,按Sleep()的时间+最大循环次数给定一个“最大等待时间”,
超过给定的时间没有找到目标窗口,也要强制退出循环(有效防止各种不确定因素造成程序死锁)。
(或“按最长等待时间”反算最大循环次数)

上面的这个“找窗口句柄的过程”最好是封装成一个函数,
这样可以“顺序调用”的形式实现查找多层嵌套的窗口、并且便于每一步查找的“验证”。



我就是不知道为什么这么长  我这个程序之前在WIN7 里面运行的时候没事,后来因为我要获取的软件需要xp系统,所以我就装了一个虚拟机,然后在虚拟机里运行这个程序就变成这样了

#6


引用 4 楼 Chen8013 的回复:
另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

#7


引用 6 楼 u010928128 的回复:
Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

#8


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

没有吧  第三个不是窗口类型,第四个我不是窗口标题吗

#9


引用 8 楼 u010928128 的回复:
Quote: 引用 7 楼 Chen8013 的回复:

Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

没有吧  第三个不是窗口类型,第四个我不是窗口标题吗

对的。你说“找不到”,我还以为是你把类名和窗口标题搞反了呢。 获取控件的句柄为149744696200003584
如果没错,就应该能找到窗口句柄呀。

#10


引用 9 楼 Chen8013 的回复:
Quote: 引用 8 楼 u010928128 的回复:

Quote: 引用 7 楼 Chen8013 的回复:

Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

没有吧  第三个不是窗口类型,第四个我不是窗口标题吗

对的。你说“找不到”,我还以为是你把类名和窗口标题搞反了呢。 获取控件的句柄为149744696200003584
如果没错,就应该能找到窗口句柄呀。

对啊  不知道为什么返回句柄为0

#11


引用 10 楼 u010928128 的回复:
Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 8 楼 u010928128 的回复:

Quote: 引用 7 楼 Chen8013 的回复:

Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

没有吧  第三个不是窗口类型,第四个我不是窗口标题吗

对的。你说“找不到”,我还以为是你把类名和窗口标题搞反了呢。 获取控件的句柄为149744696200003584
如果没错,就应该能找到窗口句柄呀。

对啊  不知道为什么返回句柄为0

你的 AgvHandle2 的值,跟用Spy++看到的值(它的是16进制)一致不?
如果一致的话,看看用
AgvLVHandle = FindWindowEx(AgvHandle2,0&,vbNullString, vbNullString)
有没有句柄值返回。

#1


每一个返回值都要判断是否成功了

#2


引用 1 楼 jennyvenus 的回复:
每一个返回值都要判断是否成功了

怎么加呢

#3


引用 2 楼 u010928128 的回复:
Quote: 引用 1 楼 jennyvenus 的回复:

每一个返回值都要判断是否成功了

怎么加呢

Do循环 + Sleep() 
用Sleep的目的是使程序在找窗口的过程中(查找都已经加载完成的窗口不用考虑Sleep)不会太占CUP资源。
另外可以用一个变量计数,按Sleep()的时间+最大循环次数给定一个“最大等待时间”,
超过给定的时间没有找到目标窗口,也要强制退出循环(有效防止各种不确定因素造成程序死锁)。
(或“按最长等待时间”反算最大循环次数)

上面的这个“找窗口句柄的过程”最好是封装成一个函数,
这样可以“顺序调用”的形式实现查找多层嵌套的窗口、并且便于每一步查找的“验证”。


#4


另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

#5


引用 3 楼 Chen8013 的回复:
Quote: 引用 2 楼 u010928128 的回复:

Quote: 引用 1 楼 jennyvenus 的回复:

每一个返回值都要判断是否成功了

怎么加呢

Do循环 + Sleep() 
用Sleep的目的是使程序在找窗口的过程中(查找都已经加载完成的窗口不用考虑Sleep)不会太占CUP资源。
另外可以用一个变量计数,按Sleep()的时间+最大循环次数给定一个“最大等待时间”,
超过给定的时间没有找到目标窗口,也要强制退出循环(有效防止各种不确定因素造成程序死锁)。
(或“按最长等待时间”反算最大循环次数)

上面的这个“找窗口句柄的过程”最好是封装成一个函数,
这样可以“顺序调用”的形式实现查找多层嵌套的窗口、并且便于每一步查找的“验证”。



我就是不知道为什么这么长  我这个程序之前在WIN7 里面运行的时候没事,后来因为我要获取的软件需要xp系统,所以我就装了一个虚拟机,然后在虚拟机里运行这个程序就变成这样了

#6


引用 4 楼 Chen8013 的回复:
另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

#7


引用 6 楼 u010928128 的回复:
Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

#8


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

没有吧  第三个不是窗口类型,第四个我不是窗口标题吗

#9


引用 8 楼 u010928128 的回复:
Quote: 引用 7 楼 Chen8013 的回复:

Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

没有吧  第三个不是窗口类型,第四个我不是窗口标题吗

对的。你说“找不到”,我还以为是你把类名和窗口标题搞反了呢。 获取控件的句柄为149744696200003584
如果没错,就应该能找到窗口句柄呀。

#10


引用 9 楼 Chen8013 的回复:
Quote: 引用 8 楼 u010928128 的回复:

Quote: 引用 7 楼 Chen8013 的回复:

Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

没有吧  第三个不是窗口类型,第四个我不是窗口标题吗

对的。你说“找不到”,我还以为是你把类名和窗口标题搞反了呢。 获取控件的句柄为149744696200003584
如果没错,就应该能找到窗口句柄呀。

对啊  不知道为什么返回句柄为0

#11


引用 10 楼 u010928128 的回复:
Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 8 楼 u010928128 的回复:

Quote: 引用 7 楼 Chen8013 的回复:

Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。


引用 7 楼 Chen8013 的回复:
Quote: 引用 6 楼 u010928128 的回复:

Quote: 引用 4 楼 Chen8013 的回复:

另外:
窗口句柄都是32位的整数,不知道你的结果怎么会是那么长一串数字?

你的保存查找结果的变量,是什么类型的?
又是习惯性的“变量不声明就使用”吧!
获取控件的句柄为149744696200003584

我现在可以获取前面几个窗口的句柄了  但是到SysListView32的时候就获取不了了,返回值为0

参数传错了。
第3个和第4个的值互换一下。

没有吧  第三个不是窗口类型,第四个我不是窗口标题吗

对的。你说“找不到”,我还以为是你把类名和窗口标题搞反了呢。 获取控件的句柄为149744696200003584
如果没错,就应该能找到窗口句柄呀。

对啊  不知道为什么返回句柄为0

你的 AgvHandle2 的值,跟用Spy++看到的值(它的是16进制)一致不?
如果一致的话,看看用
AgvLVHandle = FindWindowEx(AgvHandle2,0&,vbNullString, vbNullString)
有没有句柄值返回。