监控并获取Bushound中的数据导入到aar的listview中

By admin at 2017-12-10 • 0人收藏 • 462人看过
import win.ui;
import console;
/*DSG{{*/
mainForm = win.form(text="获取BUShound数据";right=1299;bottom=434)
mainForm.add(
listview={cls="listview";left=13;top=9;right=1289;bottom=424;ah=1;asel=false;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;fullRow=1;gridLines=1;hscroll=1;msel=false;vscroll=1;z=1}
)
/*}}*/
 
mainForm.threadCallable();
 
//console.open();
 
import win.imageList;
var imagelist = win.imageList(1,30);
mainForm.listview.setImageList(imagelist, 1/*_LVSIL_NORMAL*/);
 
mainForm.listview.insertColumn("Device",50);
mainForm.listview.insertColumn("Length",100);
mainForm.listview.insertColumn("Phase");
mainForm.listview.insertColumn("Data",500);
mainForm.listview.insertColumn("Description",200);
mainForm.listview.insertColumn("Data");
mainForm.listview.insertColumn("Time",-1);
 
thread.invoke( 
    function(mainForm){
     
        import winex;
        import winex.ctrl.listview;
        var 计数 = 0;
         
        hwnd = 1313058;//此数据是编程助手抓到的list控件的句柄
        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
)
 
//listbox的纵向滚动条显示最下方,消息方式
mainForm.listview.scrollToBottom = function () {
  
    return ::SendMessageInt(owner.hwnd, 0x115/*_WM_VSCROLL*/, 0x7/*_SB_BOTTOM*/, 0);
  
}
mainForm.enableDpiScaling();
mainForm.show();
 
return win.loopMessage();


3 个回复 | 最后更新于 2017-12-10
2017-12-10   #1

bushound数据获取:

更新: 打开bushound后,打开aar做的监控软件,自动获取窗口中数据句柄,无需手动输入了.后台线程自动更新数据

import win.ui;
import console;
/*DSG{{*/
mainForm = win.form(text="获取BUShound数据";right=1299;bottom=501)
mainForm.add(
listview={cls="listview";left=13;top=9;right=1289;bottom=424;ah=1;asel=false;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;font=LOGFONT(h=-16);fullRow=1;gridLines=1;hscroll=1;msel=false;vscroll=1;z=1}
)
/*}}*/
 
mainForm.threadCallable();
 
//console.open();
 
import win.imageList;
var imagelist = win.imageList(1,30);
mainForm.listview.setImageList(imagelist, 1/*_LVSIL_NORMAL*/);
 
mainForm.listview.insertColumn("Device",50);
mainForm.listview.insertColumn("Length",100);
mainForm.listview.insertColumn("Phase");
mainForm.listview.insertColumn("Data",500);
mainForm.listview.insertColumn("Description",200);
mainForm.listview.insertColumn("Data");
mainForm.listview.insertColumn("Time",-1);
 
 
 
thread.invoke( 
    function(mainForm){
     
        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;
                }
            }
 
        }
 
        var 计数 = 0;
         
        //hwnd = 1313058;//此数据是编程助手抓到的list控件的句柄
        xxlistview = winex.ctrl.listview( hwnd ); //通过获取到的句柄取得listview数据列表
        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
)
 
//listbox的纵向滚动条显示最下方,消息方式
mainForm.listview.scrollToBottom = function () {
  
    return ::SendMessageInt(owner.hwnd, 0x115/*_WM_VSCROLL*/, 0x7/*_SB_BOTTOM*/, 0);
  
}
mainForm.enableDpiScaling();
mainForm.show();
 
return win.loopMessage();


2017-12-10   #2

bushound数据采集更新: 增加虚拟桌面 使用

先前的程序使用的前提必须先手动打开bushound软件,然后打开这个采集软件,这样就出现了个问题,桌面上即要显示bushound软件也要现世采集软件,桌面不干净.

于是先前想了一种办法: 点击采集软件自动后台线程process打开bushound,然后瞬间将bushound的窗口最小化并隐藏到进程中.

但是这个导致了一个问题,打开采集软件的同时会突然发现桌面上闪现了一下bushound的窗口然后消失了..

闪现的这下怎么看都不舒服,

于是我想了另外一种办法:

通过 虚拟桌面 来在虚拟桌面里面打开bushound,然后主桌面里采集程序通过线程来采集bushound的数据.

虚拟桌面的好处是他专门开辟一个内存来存放打开的程序,在主桌面里面是看不到这个程序运行的.而且也不会有任何能使人感受不好的现象发生.

额,接上面 虚拟桌面 方式采集数据:

忘了记录一个功能: 虚拟桌面中

virDesktopMgr.execute("桌面名字","程序路径","参数") = 在虚拟桌面运行程序

这个可以直接在新虚拟桌面中打开一个exe

import win.ui;
import win.util.desktop;//虚拟桌面
/*DSG{{*/
mainForm = win.form(text="获取BUShound数据";right=1299;bottom=501)
mainForm.add(
button={cls="button";text="开启桌面";left=26;top=441;right=222;bottom=484;z=2};
button2={cls="button";text="切换桌面";left=237;top=439;right=433;bottom=482;z=3};
button3={cls="button";text="关闭桌面";left=458;top=441;right=654;bottom=484;z=4};
button4={cls="button";text="采集";left=688;top=438;right=884;bottom=481;z=5};
listview={cls="listview";left=13;top=9;right=1289;bottom=424;ah=1;asel=false;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;font=LOGFONT(h=-16);fullRow=1;gridLines=1;hscroll=1;msel=false;vscroll=1;z=1}
)
/*}}桌面*/
 
var virDesktp = win.util.desktop();
//注册热键 Ctrl+D快捷键来切换桌面
hkid = mainForm.reghotkey(function(id,mod,vk){
    virDesktp.switch( ) //切换桌面   
},2/*_MOD_CONTROL*/,'D'#); 
 
mainForm.button.oncommand = function(id,event){
    //mainForm.msgbox( mainForm.button.text );
     
    virDesktp.create("myDesktop") //创建桌面
}
mainForm.button3.oncommand = function(id,event){
    //mainForm.msgbox( mainForm.button3.text );
    virDesktp.close();  //关闭桌面
     
}
mainForm.button2.oncommand = function(id,event){
    //mainForm.msgbox( mainForm.button2.text );
     virDesktp.switch( ) //切换桌面  
     
}
//使主界面控件线程控制
mainForm.threadCallable();
 
//console.open();
//使用image属性来重设listview行高
import win.imageList;
var imagelist = win.imageList(1,30);
mainForm.listview.setImageList(imagelist, 1/*_LVSIL_NORMAL*/);
//设置所有需要的列名
mainForm.listview.insertColumn("Device",50);
mainForm.listview.insertColumn("Length",100);
mainForm.listview.insertColumn("Phase",50);
mainForm.listview.insertColumn("Data",500);
mainForm.listview.insertColumn("Description",200);
mainForm.listview.insertColumn("Data",50);
mainForm.listview.insertColumn("Time",-1);
//
mainForm.button4.oncommand = function(id,event){
    //开启采集线程
    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
    )  
     
}
 
 
//listbox的纵向滚动条显示最下方,消息方式
mainForm.listview.scrollToBottom = function () {
  
    return ::SendMessageInt(owner.hwnd, 0x115/*_WM_VSCROLL*/, 0x7/*_SB_BOTTOM*/, 0);
  
}
mainForm.enableDpiScaling();
mainForm.show();
 
return win.loopMessage();


2017-12-10   #3

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
Sciter中文在线文档Sciter在线学习文档
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
C大Aardio论坛:Aar爱好者论坛
简码教程网:简码编程
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...