使用Findwindow 得到窗口句柄 HW后,可以设置组件的标题信息(使用SetWindowText),可是如果要对其他属性进行设置,怎么操作?
例如:我在Public中定义了TSockAddrIn类型的一个组件addrP2P,如果要设置addrP2P的sin_family属性为AF_INET,addrP2P.sin_port:=iP2PUserInfoResp.port;addrP2P.sin_addr.S_addr:=iP2PUserInfoResp.ip;怎么办?
能办到不???????

解决方案 »

  1.   

    可以。使用SetWindowLong,SetWindowExtEx,等函数
      

  2.   

    to sizzg 
    说的细点行吗?这个等函数包括什么啊?都怎么用!
      

  3.   

    对不起,可能我没说明白!
    得到了窗口句柄HW,我想将这个窗体内的某个组件的属性进行修改,怎么做!例如:我在Public中定义了TSockAddrIn类型的一个组件addrP2P,如果要设置addrP2P的sin_family属性为AF_INET,addrP2P.sin_port:=iP2PUserInfoResp.port;addrP2P.sin_addr.S_addr:=iP2PUserInfoResp.ip;怎么办? 
      

  4.   


     var i: integer
    begin
      for i := 0 to findcontrol(self.Handle).ComponentCount - 1 do
        if findcontrol(self.Handle).Components[i] is TSockAddrIn then
          with TSockAddrIn(findcontrol(self.Handle).Components[i]) do
          begin
            sin_family:=ΪAF_INET ;
            ...      end;
      

  5.   

    哈哈,刚好看《Inside VCL》看到一个超酷的技巧,如何根据一个控件的Handle得到控件引用,试试下面这个函数
    function GetControl(Handle:HWnd):TWinControl;
    var
    ControlAtomString: string;
    RM_GetObjectInstance: DWORD;  
    begin
      ControlAtomString := Format('ControlOfs%.8X%.8X', [HInstance, GetCurrentThreadID]);
      RM_GetObjectInstance := RegisterWindowMessage(PChar(ControlAtomString));
      result:=Pointer(SendMessage(Handle,RM_GetObjectInstance,0,0));
    end;调用如上函数得到返回结果后再做强制类型转换为你的窗体
      

  6.   

      首先FindControl只能找到从TComponent继承下来的控件,保证你的addrP2P是从TComponent继承下来的。
      其次,FindControl在DLL中应用时就会有问题,具体的原因看看FindControl的实现代码。  如果你要设置外部程序中addrP2P的属性,那么,处理的思路就是DLL注入-〉找到目标控件-〉强制转换成 addrP2P类型。  代码示例(注入就不写了):
    var
      m_Ctrl: TWinControl;
    begin
      m_Ctrl:= FindControl(AHandle);  //这个函数可能需要修改  //遍历窗体上所有的控件,查找需要的控件
      for m_iTmp:= 0 to m_Ctrl.ComponentCount - 1 do
      begin
        if m_Ctrl.Components[m_iTmp] is addrP2P then
        begin
          addrP2P(m_Ctrl).sin_port:= '端口';
          //.....
        end;
      end;
    end;
      内部的话更简单了,上面的就够了。
      思路就是这样的,具体操作需要自己慢慢去调试,试验。
      

  7.   

    这个addrP2P是自定义的,不是TComponent继承下来的
      

  8.   

    addrP2P 是packed record型的