楼上的这种方法前提是 AB两个软件都是自己开发的,这样才能定义好say的协议.....
但是我的应用是A是自己写的,但是B软件确是别人分享的软件,所以B软件里面接收不到我的say..
目前在官方论坛找到了一种解决办法: 就是创建线程后立马切换到虚拟桌面里,这样就可以了
//开启采集线程
thread.invoke(
function(mainForm,hDesktop){
::User32.SetThreadDesktop(hDesktop);//切换线程到新桌面,这样下面才能采集到句柄
import winex;
import winex.ctrl.listview;
var hwnd = 0;//此数据是编程助手抓到的list控件的句柄
var hwnd1,线程ID,进程ID = winex.find( ,"Bus Hound",,) //Form1 换为被抓数据的软件的父窗口标题。
for hwnd2,title,theadId,processId in winex.each( ,,hwnd1){
for hwnd3,title,theadId,processId in winex.each("", ,hwnd2) {
if(title == "List3"){
hwnd = hwnd3;
break;
}
}
}
if(hwnd == null){
return;
}
var 计数 = 0;
xxlistview = winex.ctrl.listview( hwnd );
wRirelist = function(start,number){
for(i=start;number;1 )
{
mainForm.listview.addItem();
mainForm.listview.setItemText(xxlistview.getItemText(i,1,1000),i,1);
mainForm.listview.setItemText(xxlistview.getItemText(i,3,1000),i,2);
mainForm.listview.setItemText(xxlistview.getItemText(i,4,1000),i,3);
mainForm.listview.setItemText(xxlistview.getItemText(i,5,1000),i,4);
mainForm.listview.setItemText(xxlistview.getItemText(i,6,1000),i,5);
mainForm.listview.setItemText(xxlistview.getItemText(i,9,1000),i,6);
mainForm.listview.setItemText(xxlistview.getItemText(i,10,1000),i,7);
mainForm.listview.scrollToBottom();
}
}
while(true){
var 获取到的外部行数 = xxlistview.count;
if(获取到的外部行数 != 计数){
if(计数 == 0){
wRirelist(1,获取到的外部行数);
计数 = 获取到的外部行数;
}else {
if(计数>获取到的外部行数){ //说明窗体清零过一次
mainForm.listview.clear();
wRirelist(1,获取到的外部行数);
计数 = 获取到的外部行数;
}else {
var 起始位置 = 计数+1;
wRirelist(起始位置,获取到的外部行数);
计数 = 获取到的外部行数;
}
}
}
}
},mainForm,virDesktp.desktop.myDesktop
)