监控并获取Bushound中的数据导入到aar的listview中
By
admin
at 2017-12-10 • 0人收藏 • 1218人看过
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做的监控软件,自动获取窗口中数据句柄,无需手动输入了.后台线程自动更新数据