我做了一个自定义控件,如果我想在控件中获得程序所在目录怎么办呢,例如我的控件放在c:/system32下,我的程序放在d:\progoram\soft下,现在我要在控件中获得程序地址:即d:\progoram\soft 。怎么获得呢,如果直接用app.path获得的是c:/system32,也就是控件所在目录

解决方案 »

  1.   

    定义一个属性如path,然后把程序的路径赋给它就可以了。
      

  2.   

    在控件中获取绝对父窗口的窗口句柄,然后再通过窗口句柄获得进程句柄
    然后再通过进程句柄获得进程的文件地址,结果就可以出来了。说明:绝对父窗口
    比如你的ActiveX控件被放入窗口的如下位置:
    Form1>Picture1>Picture2>你的控件
    这时,因为你的控件处于Picture2的容器中,所以获取的父窗口句柄将是
    Picture2.hwnd,而你想取得的是Form1的句柄,所以必须用 Do...Loop While ...
    来找出Form1的句柄,当判断父窗口为0的句柄时,那个句柄就是你要的绝对父窗口
    的窗口句柄。然后你就可以通过这个句柄获得进程及进程文件地址了。
      

  3.   

    同意添加属性的方案。简单有效。
    如果要使用"人类"的方案,则获得绝对父窗口句柄个人认为没那么复杂,使用UserControl.Parent.hWnd 就是了,而UserControl.ContainerHwnd才是控件容器的句柄,要用循环向上找,没必要。