那么我如何通过这一句柄简单、快捷的得到该控件所在的程序(不一定获得焦点)的句柄呢?大家帮帮忙忙!

解决方案 »

  1.   

    //参考如下代码~~
    uses PsAPI;procedure TForm1.Button2Click(Sender: TObject);
    var
      vBuffer: array[0..MAX_PATH] of Char;  vProcessId: DWORD;
      vProcess: THandle;
      vHandle: THandle;
    begin
      vHandle := WindowFromPoint(Mouse.CursorPos);
      GetWindowThreadProcessId(vHandle, @vProcessId);
      vProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
        False, vProcessId);
      try
        GetModuleFileNameEx(vProcess, 0, vBuffer, SizeOf(vBuffer));
      finally
        CloseHandle(vProcess);
      end;
      Caption := vBuffer;
    end;
      

  2.   

    把鼠标放在这个程序的标题栏上,就用WindowFormPoint就可以了。
      

  3.   

    用GetParent取得他的父窗口的句柄了(或者使用EnumWindows,EnumChildWindows函数自己去判断了),然后使用getwindowtext获取应用程序的标题就行了,如你要知道这个程序在硬盘上的具体位置,可以参考2楼的代码
      

  4.   

    晕,我只要句柄!!比如有一个应用程序(可能没有焦点),上面有一个按钮。如果我们用WindowFormPoint指向那个按钮的时候,得到的是按钮的句柄而不是该应用程序的句柄!我的问题就是如何通过该按钮的句柄简单、快捷的得到该程序的句柄。
      

  5.   

    晕,我只要句柄!!比如有一个应用程序(可能没有焦点),上面有一个按钮。如果我们用WindowFormPoint指向那个按钮的时候,得到的是按钮的句柄而不是该应用程序的句柄!我的问题就是如何通过该按钮的句柄简单、快捷的得到该程序的句柄。===========================================================================
    zswang(伴水清清)(专家门诊清洁工)  的代码已经说得很清楚了,用WindowFromPoint得到窗口句柄,由GetWindowThreadProcessId得到窗口所属的PID,再OpenProcess就是进程句柄了!