100分,如何找到多窗体外部程序的某一窗体的操作句柄!

sunny_show 2006-07-21 09:04:36
我用ShellExecute打开了一个外部程序,该程序像Winamp一样有多个窗体,请问我怎么样才能找到其中某一个窗体的操作句柄,并且将键盘的输入焦点始终定在这个窗体上?
最好能提供一个示例程序,能说清楚大概过程就行,问题解决立即给分,请大家帮帮忙,谢谢!!!
...全文
187 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunny_show 2006-07-25
  • 打赏
  • 举报
回复
问题解决了,我用枚举的方式把窗体找出来了,用的是EnumWindow函数。结贴!!!!谢谢大家帮忙!!
xjjrocker 2006-07-21
  • 打赏
  • 举报
回复
如果知道窗口的类名,通过FindWindow函数就可以获得窗口的句柄。你返回值一直不对的话一定是调用不对,类名不对。
可以用GetWindow函数来枚举窗口,用Findwindow函数来查找制定的窗口
xixuemao 2006-07-21
  • 打赏
  • 举报
回复
你用spy++看看你这个窗口信息先,看看标题、句柄、类型等等
SonicX 2006-07-21
  • 打赏
  • 举报
回复
ShellExecute以后略微停顿下比如用sleep再使用findwindow,程序运行也要时间,可能还没初始化完成
sunny_show 2006-07-21
  • 打赏
  • 举报
回复
我在findwindow返回值为0的时候也调用getlasterror函数查看出错消息,结果是函数执行成功,是不是用findwindow根本就不可能找到呢,有没有什么其他方法可以找到呀?拜托,大家帮帮忙吧!!
sunny_show 2006-07-21
  • 打赏
  • 举报
回复
我用ShellExecute打开外部程序之后,在findwindow中无论是用窗体类还是窗体的标题,我都无法获得窗体的句柄,返回值总是零,难道是我的方法不对吗?
sunny_show 2006-07-21
  • 打赏
  • 举报
回复
我用findwindow试过,可是窗体的标题是'当前打开的文件名'+'程序名称',打开不同的文件,窗体标题也不相同,这该怎么处理?用窗体的类吗?该怎么找到窗体的类呢?还有就是怎么将键盘的输入焦点强行限制在我指定的窗体上呢,用setfocus好像不行!!
xjjrocker 2006-07-21
  • 打赏
  • 举报
回复
function FindWin():Cardinal;
var
hHwnd : Cardinal;
begin
hHwnd:=FindWindow(nil,'Player');
if hhwnd=0 then
hHwnd := FindWindow(nil,'InterVideo WinDVD 5');
if hhwnd=0 then begin
Result := 0;
exit;
end else
Result := hHwnd;
end;
sunny_show 2006-07-21
  • 打赏
  • 举报
回复
这个窗体的类名让我非常困惑,他是“Afx:400000:b:10011:6:xxxxxxx”,其中xxxxxxx每次打开都不同,我以前没有见过这样的类名,不知道谁可以告诉我这究竟是什么类名呀

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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