Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 我可以用手柄检查第三方应用程序中的数据吗?_Delphi - Fatal编程技术网

Delphi 我可以用手柄检查第三方应用程序中的数据吗?

Delphi 我可以用手柄检查第三方应用程序中的数据吗?,delphi,Delphi,我有一个第三方应用程序。我有一个到TMainDlg的手柄,还有它的子文件箱。如何查找是否选择了项目2?现在我(毫不奇怪)遇到了一个“地址处的EAccessViolation”错误 有什么提示、技巧或建议吗 h2 := 0; h2 := FindWindowEx(otherApp, h2, 'TListBox', ''); lb := TListBox(h2); ShowMessage( IntToStr( lb.Items.Count) ); 错误出现在显示消息上。h2是另一进程中窗口的窗口句

我有一个第三方应用程序。我有一个到TMainDlg的手柄,还有它的子文件箱。如何查找是否选择了项目2?现在我(毫不奇怪)遇到了一个“地址处的EAccessViolation”错误

有什么提示、技巧或建议吗

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
返回一个无法强制转换到对象的句柄。