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

By admin at 2017-12-10 • 0人收藏 • 1192人看过
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

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...