[javascript]代码库
import com;
var oleaut = raw.loadDll("OleAut32.DLL");
var oleacc = raw.loadDll("OLEACC.DLL");
IID_IAccessible = '\xE0\x36\x87\x61\x3D\x3C\xCF\x11\x81\x0C\x00\xAA\x00\x38\x9B\x71';
var findAccessibleChildren;
findAccessibleChildren = function(accParent,name){
var variants = {
struct item[] ={ //这里没有声明数组长度
length = accParent.accChildCount; //使用length在运行时指定数组长度
{
WORD vt;
WORD r1;
WORD r2;
WORD r3;
ptr pdispVal;
ptr r4;
};//结构体数组至少要声明第一个结构体成员
}
}
var obtained = {int size};//用结构体给API提供int指针
var hr = oleacc.AccessibleChildren(accParent, 0,accParent.accChildCount, variants,obtained);
if( hr < 0 ) return;//COM中小于0的都是错误码
for(i=1;obtained.size;1){
var variant = variants.item[ i ]
if( variant.vt != 9/*_VT_DISPATCH*/ ) {
oleaut.VariantClear(variant);
continue;
}
var accChild = com.QueryObject( variant.pdispVal ); //转换为COM对象(COM.IDispatch)
oleaut.VariantClear(variant);//释放Variant对象
if( accChild.accName(0/*CHILDID_SELF*/) == name ){
var v = accChild.accValue(0/*CHILDID_SELF*/);
if(#v) return v;
}
var v = findAccessibleChildren(accChild,name);
if(#v) return v;
}
}
findAccessibleString = function(hwnd,name){
var pvObject = {ptr p}
if( 0 == oleacc.AccessibleObjectFromWindow(hwnd,0,IID_IAccessible,pvObject) ){
var accParent = com.QueryObject( pvObject.p ); //转换为COM对象(COM.IDispatch)
com.Release(pvObject.p);
return findAccessibleChildren( com.QueryObject( pvObject.p ),name );
}
}
import winex;
import console;
console.setTitle("读取QQ消息")
console.open()
var msg;
while(true){
var old = msg;
for hwnd in winex.each( "TXGuiFoundation") {
var qqMessage = findAccessibleString(hwnd,"test");
if(#qqMessage ) msg = qqMessage;
}
if(old!=msg)console.log( msg)
sleep(10000)
}
win.loopMessage()