首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

求:CreateProcess和TerminateProcess的用法实例,用于打开和关闭外部程序?该怎么解决

2012-02-26 
求:CreateProcess和TerminateProcess的用法实例,用于打开和关闭外部程序?如题,我的程序如下:procedureTFor

求:CreateProcess和TerminateProcess的用法实例,用于打开和关闭外部程序?
如题,我的程序如下:
procedure   TForm1.btnCreateProcessOpenClick(Sender:   TObject);
 begin
  FillChar(SI,sizeof(SI),#0);
  with   SI   do
  begin
   cb:=sizeof(SI);
   dwFlags:=StartF_UsesTDHandles   or   STARTF_USESHOWWINDOW;
   lptitle:=nil;
   wShowWindow:=SW_Show;
  end;
  CreateProcess(PChar(’C:\WINNT\Notepad.exe’),nil,nil,nil,true,DETACHED_PROCESS,nil,nil,SI,PI);
 end;

编译通过但执行不成功,没有反映;将nil都改为null,编译时又通不过。请高手指点指点!


[解决办法]
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
BytesRead, Module, Process, Size: dword;
Path: array [0..MAX_PATH] of char;
Data: pointer;

begin
//create process to inject into
ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
StartInfo.cb := SizeOf(TStartupInfo);
CreateProcess(nil, 'notepad.exe ', nil, nil, False, 0, nil, nil, StartInfo, ProcInfo);

//get the dll data to inject
Process := ProcInfo.hProcess;
GetCurrentDirectory(MAX_PATH, Path);
Module := CreateFile(pchar(Path + '\test.dll '), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Size := GetFileSize(Module, nil);
GetMem(Data, Size);
ReadFile(Module, Data^, Size, BytesRead, nil);
CloseHandle(Module);

//inject the DLL using the Ex method
InjectLibrary(Process, Data);
FreeMem(Data);

Sleep(3000);

//kill the process
TerminateProcess(Process, 0);
end.

热点排行