var
lSI:tStartupInfo;
lPI:tProcessInformation;
h:Cardinal;
begin
  ZeroMemory(@lSI,sizeof(lSI))  ;
  lSI.cb := SizeOf(lSI);
  lSI.dwFlags := STARTF_USESHOWWINDOW;
  lSI.wShowWindow := SW_SHOWNORMAL;
  CreateProcess(nil,PChar('c:\func\project1.exe'),nil,nil,false,0,nil,nil,lSI,lPI);
  h:=OpenProcess(PROCESS_QUERY_INFORMATION,true,lpi.dwProcessId);
end;
进程已经创建成功了,可为什么OpenProcess返回给h的值为0呀即调用失败,
我将h:=OpenProcess(PROCESS_QUERY_INFORMATION,true,lpi.dwProcessId)改
为h:=OpenProcess(PROCESS_QUERY_INFORMATION,true,lpi.hProcess);仍然返回
0即失败,请高手指点,谢谢!!!

解决方案 »

  1.   

    兄弟,我这里可以用的呀。而且上面的代码运行是正常的,环境:w2kServer+sp4,你先调试一下看看lpi.dwProcessId的值是不是0.再试试看。上面代码应该没有问题,
      

  2.   

    楼上哥们:
        调试lpi.dwProcessId的值不是0,但OpenProcess(PROCESS_QUERY_INFORMATION,true,lpi.dwProcessId)返回值为0,我的环境是W2kPro+sp3,
    真是很怪,但把CreateProcess(nil,PChar('c:\func\project1.exe'),nil,nil,false,0,nil,nil,lSI,lPI);换成CreateProcess(nil,PChar('notepad.exe'),nil,nil,false,0,nil,nil,lSI,lPI);则OpenProcess(PROCESS_QUERY_INFORMATION,true,lpi.dwProcessId)又能返回值128.这是为什么呢?