//我写了个函数,拿去用吧
function GetAppName(const AWindowHandle: THandle): string;
var
  PI: DWORD;
  ContinueLoop:BOOL;
  SnapshotHandle:THandle;
  ProcessEntry32:TProcessEntry32;
begin
  GetWindowThreadProcessId(AWindowHandle, @PI);  SnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  ProcessEntry32.dwSize := Sizeof(ProcessEntry32);
  ContinueLoop := Process32First(SnapshotHandle,ProcessEntry32);
  while ContinueLoop do
  begin
    if ProcessEntry32.th32ProcessID = PI then
    begin
      Result := ProcessEntry32.szExeFile;
      exit;
    end;
    ContinueLoop:=Process32Next(SnapshotHandle, ProcessEntry32);
  end;
  Result := '';
end;

解决方案 »

  1.   

    //不好意思,刚才那个函数忘了释放掉快照的句柄,现更正如下。还有别忘了在 uses 部分加上TLHelp32单元
    function GetAppName(const AWindowHandle: THandle): string;
    var
      PI: DWORD;
      ContinueLoop:BOOL;
      SnapshotHandle:THandle;
      ProcessEntry32:TProcessEntry32;
    begin
      Result := '';
      GetWindowThreadProcessId(AWindowHandle, @PI);  SnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      ProcessEntry32.dwSize := Sizeof(ProcessEntry32);
      ContinueLoop := Process32First(SnapshotHandle,ProcessEntry32);
      while ContinueLoop do
      begin
        if ProcessEntry32.th32ProcessID = PI then
        begin
          Result := ProcessEntry32.szExeFile;
          break;
        end;
        ContinueLoop:=Process32Next(SnapshotHandle, ProcessEntry32);
      end;
      CloseHandle(SnapshotHandle);
    end;
      

  2.   

    CreateToolhelp32Snapshot()系列函数不能在NT4下运行。
      

  3.   

    用Visual Studio 的spy++查找窗口,可以找到窗口基类,据此看看标题栏
    就知道了。根据该思想可以写些代码处理,先FindWindow找到想要的窗口句柄,然后
    GetClassLong找想要的东西。 
      

  4.   

    用以上的方法找到窗口HANDLE和PROCESSID后,用GETWINDOWTHREADPROCESS这个API函数可以得到创建窗口的PROCESSID,再和PROCESSID比较一下,可以找到!