如上

解决方案 »

  1.   

     用這個試試:GetForegroundWindow
      

  2.   

    建立一个进程快照,process32next枚举Word进程,找到之后FindWindow获得句柄
      

  3.   


    var
      FSnapshotHandle, ProcessHndle: THandle;
      FProcessEntry32: TProcessEntry32;
      ContinueLoop: BOOL;
      ProcessID : integer;
      ItemName : String;
    begin
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
      Result := True;
      Try
        FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
        ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
        while integer(ContinueLoop)<>0 do
        begin
          ItemName := ExtractFileName(FProcessEntry32.szExeFile);
          ProcessID := FProcessEntry32.th32ProcessID;
          If UpperCase(ItemName) = 'aa.doc' Then//比較你打開的文件的名稱
          Begin
            ProcessHndle:=OpenProcess(PROCESS_ALL_ACCESS,BOOL(0),ProcessID);
            
          End;      ContinueLoop :=Process32Next(FSnapshotHandle,FProcessEntry32);
        end;
      Finally
        CloseHandle(FSnapshotHandle);
      End;
    end;你也可以用createProcess來打開文件
      

  4.   

    一般来说是进程不一定有窗体的,参考.NET中Process.MainWindow的实现,它是EnumWindows,然后使用GetWindowProcessThreadId查出窗体的进程进行对比。