DWORD pid;
GetWindowThreadProcessId(hWnd,&pid); //获取hWnd对应的进程ID
//获取进程句柄。。
hProcess_1 = OpenProcess(PROCESS_ALL_ACCESS,true,pid);
hProcess_2 = OpenProcess(PROCESS_ALL_ACCESS,true,pid);
//上边两次调用返回值不同。hProcess_1和hProcess_2不一样
//我用的Windows 2000 Server
是不是我理解错了OpenProcess的意思?
谢谢,~:)

解决方案 »

  1.   

    OpenProcess 返回的句柄并不是该进程的唯一标示
    进程的唯一标示是进程ID
      

  2.   

    因为OpenProcess 返回的句柄并不是该进程的唯一标示
    所以两次得到的会不一样象下:
    hProcess_1 = OpenProcess(PROCESS_ALL_ACCESS,true,pid);
    CloseHandle(hProcess_1);
    hProcess_2 = OpenProcess(PROCESS_ALL_ACCESS,true,pid);可能会一样
      

  3.   

    我想,进程句柄核心对象,是进程内有效的,你在另一个进程中利用OpenProcess来打开一个进程的话,每次返回的句柄应该都是不同的!如果你在进程本身中取得句柄的话,应该每次取得的结果都相同!我想区别就在这里!这是个人的理解,听听其他人的意见
    :)
      

  4.   

    对OpenProcess中第一个参数中两个取值的解释在MSDN中和在microsoft.com下载的PLATFORM SDK中的解释分别是这样的:
    ----------------MSDN 中是这样解释的: 
    PROCESS_CREATE_PROCESS Used internally. 
    PROCESS_CREATE_THREAD Enables using the process handle in the CreateRemoteThread function to create a thread in the process. 
    -----------------Platform SDK 中的解释:
    PROCESS_CREATE_PROCESS Required to create a process. 
    PROCESS_CREATE_THREAD Required to create a thread. 
    ----------------
    -_-" 为什么不一样呢? 给个理由先? O.O