1

CreateProcess API を使用して RealVNC を exe に統合しています...作成した vnc クライアントのハンドルを処理する必要があるだけですが、これまでのところ成功していません。コードは非常に単純です。

procedure TForm1.VncAuth;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
  title: string;
  ProcHandle: THandle;
begin
  FillChar(StartInfo,SizeOf(TStartupInfo),#0);
  FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
  StartInfo.cb := SizeOf(TStartupInfo);
  CmdLine:= 'vnc.exe';
  UniqueString(CmdLine);
  CreateProcess(NIL ,PChar(CmdLine), NIL, NIL, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
                                  , NIL, NIL, StartInfo, ProcInfo);
  ProcHandle:= ProcInfo.hProcess;
  GetWindowText(ProcHandle, PChar(title), 255);
  ShowMessage(title);
end;

タイトル変数には何も返されません... GetWindowText 関数は、正しいハンドルがあるかどうかを確認するための単なるテストです。はいの場合、vnc クライアントのタイトルの権利が表示されますか? ありがとうございました!

4

1 に答える 1

6

ウィンドウ ハンドルとプロセス ハンドルは同じものではありません。GetWindowTextウィンドウハンドルが必要です。

  1. プロセス呼び出しWaitForInputIdleを作成した後、プロセスを起動してメイン ウィンドウを作成できるようにします。
  2. EnumWindowsトップ レベル ウィンドウを列挙するために呼び出します。
  3. 最上位ウィンドウごとに呼び出しGetWindowThreadProcessIdて、そのウィンドウを作成したプロセスのプロセス ID を調べます。作成したプロセスのプロセス ID は ですProcInfo.dwProcessId
  4. 作成したばかりのプロセスのプロセス ID と一致するプロセス ID を持つウィンドウを見つけたら、そのウィンドウがあなたの番です!
于 2012-11-19T13:59:25.090 に答える