RealVNCクライアントを介した自動ログインのプロジェクトを行っています。私はLANを持っていて、多くのPCでこのクライアントを使ってそのような手順を実行するのは退屈です。そこで、プロセスを自動化することにしました。プログラムでVNCクライアントを開き(CreateProcessを使用)、接続用のIPをパラメーターとして渡します。私の意図は、そのマシンのパスワードを送信して[Enter]をシミュレートすることであり、このステップに固執しています。以下のコードでよりよく説明します:
procedure TForm1.VncAuth;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);
CmdLine:= 'vnc.exe 192.168.1.14';
UniqueString(CmdLine);
CreateProcess(NIL ,PChar(CmdLine), NIL, NIL, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
, NIL, NIL, StartInfo, ProcInfo);
WaitForInputIdle(ProcInfo.hProcess, INFINITE);
Timer:= TTimer.Create(Nil);
Timer.Interval:= 5000;
Timer.OnTimer:= DoVNCAuth;
Timer.Enabled:= true;
end;
上記の手順でvnc.exeを開き、接続用のIPを渡します。したがって、5秒待ってからIPに接続し、vncがパスワードを要求します。5秒後、手順DoVNCAuthに進みます。こんな感じです:
procedure TForm1.DoVNCAuth(Sender: TObject);
var
pass: string;
begin
pass:= 'password';
VNCChild:= FindWindowEx(0, 0, Nil, 'VNC Viewer - Authentication');
if VNCChild > 0 then
begin
VNCHandle:= FindWindowEx(VNCChild, 0, 'Edit', 0);
SendMessage(VNCHandle, WM_SETTEXT, 0, Integer(PChar(pass)));
end;
end;
この手順では、vncauthを要求するウィンドウを検索します。そこで、ウィンドウ内で[編集]を検索して、パスワードを送信します。問題は、このウィンドウには2つの編集があります。1つはユーザー用(無効)、もう1つはパス用(これが私の焦点です)ですが、パスはユーザーの編集にしか書き込むことができません。正しい編集のハンドルを取得するにはどうすればよいですか?それらは同じウィンドウにあり、同じクラスの「編集」からのものです...何が起こるかのスクリーンショットの下に: