首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

* 看是delphi板块 和 VC板块 哪个先解决: 用VC读取别人的delphi程序的控件的name属性.解决方法

2012-03-26 
*** 看是delphi板块 和 VC板块 哪个先解决: 用VC读取别人的delphi程序的控件的name属性.delphi控件属性有

*** 看是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的获取,除非直接读取内存,否则相当麻烦。

热点排行