读书人

* 看是delphi板块 和 VC板块 哪个先解

发布时间: 2012-03-26 15:46:56 作者: rapoo

*** 看是delphi板块 和 VC板块 哪个先解决: 用VC读取别人的delphi程序的控件的name属性.
delphi 控件属性有个.name属性,代表了这个控件的名称.

1. 现在已经使用 EnumProps 获取到控件的 controlofsxxxxxx这个属性的HANDLE hData.

2. 然后通过句柄得到delphi的对象. 但是由于是用VC编程, 没有这个类(结构体),所以直接转换是不行的

3. 另外是跨进程获取, 所以必须使用 hook dll, 进入他的进程, 再使用这个办法获取.

某个n人用C++bulid 编了一个获取的.
代码如下:
BOOL CALLBACK MyPropEnumProc(
HWND hwnd,// handle to window whose property list is being enumerated
LPCTSTR lpszString,// string component of property
HANDLE hData // data handle component of property
)
{
//Form1-> Memo1-> Lines-> Add( "Prop: "+AnsiString(lpszString)+ ": "+AnsiString((int)hData));
AnsiString str=AnsiString(lpszString);
if(str.Pos( "ControlOfs ")> 0){
char* t=(char*)hData;
t=t+8;
ShowMessage((char*)(*(int*)(t)));
}
return true;
}

showmessage就把控件.name属性显示出来了, 但是我用vc
BOOL CALLBACK PropEnumProc(
HWND hwnd, // handle to window
LPCTSTR lpszString, // string component
HANDLE hData // data handle component
)
{
char *pdest= strstr(lpszString, "ControlOfs ");
if (pdest)
{

char strheihei[200];
long dwRead=0;
char *t=(char*)hData;

char *pAddr= NULL;

memset(strheihei, 0, 200);

t+= 8;
memcpy(strheihei, (char*)(*(int*)(t)), 100);
}
}
却得不到 .name属性, 现在不知道是我的hook没有进入哪个进程,还是上面的代码写错了, 谁能帮我看看, 感激不尽!!!!!!



[解决办法]
可以获得了ClassName也可以获取得到Caption(如果有的话),但是Name的获取,除非直接读取内存,否则相当麻烦。

读书人网 >.NET

热点推荐