0

我正在做一个通过 Real VNC 客户端自动登录的项目。我有一个局域网,并且在许多电脑上用这个客户端做这样的程序很无聊。所以我决定自动化这个过程。我用我的程序(使用 CreateProcess)打开 VNC 客户端,并将用于连接的 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;

此过程中,搜索要求 vnc auth 的窗口。所以我在窗口内搜索编辑并发送我的密码。问题是:这个窗口有 2 个编辑,一个用于用户(禁用)和一个用于通行证(这是我的焦点),但我只能将我的通行证写入用户的编辑。如何获得正确编辑的句柄?它们在同一个窗口中,并且来自同一个“编辑”类......下面是所发生情况的屏幕截图: 在此处输入图像描述

4

2 回答 2

2

你让它变得比它需要的困难得多。RealVNC 已经配备了允许您无需交互即可连接的功能。您需要做的就是创建一个包含必要选项的文本文件,并在启动时将其传递给 RealVNC 查看器程序。

文本文件可能如下所示:

[联系]
主机=myhost.com::666
加密=永远在线
用户名=域\用户
密码=********
[选项]
……

您可以让 RealVNC 为您创建文件,方法是打开连接,调出 RealVNC 菜单(即使用 F8),然后选择Save Connection。这将保存一个 .vnc 文件,其中包含该连接的所有设置。只需在启动时将该 .vnc 文件传递​​给查看器程序就可以了。

因此,您需要做的就是:

  1. 创建 .vnc 连接文件。
  2. 将命令行更改为'vnc.exe connection.vnc'.
  3. 调用后删除所有代码CreateProcess
  4. 调用CloseHandle返回的两个句柄CreateProcess

对于您的需要,我建议调用ShellExecute可能比CreateProcess.

于 2012-11-19T19:45:29.440 回答
1

我为服务器和客户端制作了一个 UltraVnc dll(来自原始 c++ 源)。也许这可以帮助你? http://code.google.com/p/asmprofiler/source/browse/trunk/-Other-/UltraVnc+As+Dll/?r=294

于 2012-11-20T06:56:15.743 回答