监控并获取Bushound中的数据导入到aar的listview中
By
admin
at 2017-12-10 • 0人收藏 • 1276人看过
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
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();登录后方可回帖

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();