Delphi 我可以用手柄检查第三方应用程序中的数据吗?
我有一个第三方应用程序。我有一个到TMainDlg的手柄,还有它的子文件箱。如何查找是否选择了项目2?现在我(毫不奇怪)遇到了一个“地址处的EAccessViolation”错误 有什么提示、技巧或建议吗Delphi 我可以用手柄检查第三方应用程序中的数据吗?,delphi,Delphi,我有一个第三方应用程序。我有一个到TMainDlg的手柄,还有它的子文件箱。如何查找是否选择了项目2?现在我(毫不奇怪)遇到了一个“地址处的EAccessViolation”错误 有什么提示、技巧或建议吗 h2 := 0; h2 := FindWindowEx(otherApp, h2, 'TListBox', ''); lb := TListBox(h2); ShowMessage( IntToStr( lb.Items.Count) ); 错误出现在显示消息上。h2是另一进程中窗口的窗口句
h2 := 0;
h2 := FindWindowEx(otherApp, h2, 'TListBox', '');
lb := TListBox(h2);
ShowMessage( IntToStr( lb.Items.Count) );
错误出现在显示消息上。
h2
是另一进程中窗口的窗口句柄。您可以像以前那样将其强制转换为TListBox
,但这并不意味着h2
实际上是一个列表框。因此出现了运行时错误。实际上,您向编译器撒谎,声称h2
不是
你需要使用一些自动化。您可以通过这种方式发送其他窗口句柄列表框消息并检索数据。请注意,列表框窗口处于不同的进程中。因此,您必须注意使用的所有消息都会封送任何数据
在这里,您试图找出列表中有多少项。这样做:
Count := SendMessage(h2, LB_GETCOUNT, 0, 0);
谨慎的做法是执行一些错误检查。你怎么知道h2
实际上不是0
也许最好使用平台自动化API,即UI自动化 您能否提供完全访问权限冲突消息?在调试此类问题时,这些地址非常重要。我猜
lb
是nil
。TListBox是一个列表框,请使用lb_GETSEL。@Jerry,这里不重要FindWindowEx
返回一个无法强制转换到对象的句柄。