-1

我试图执行下面的 perl 脚本并锁定用户会话......

$n=15;
while($n>0)
{
  print "$n,";
  $n--;
  sleep(1);
}

它像往常一样工作,没有任何额外的代码......,当我锁定会话时没有输出,因为我在下一秒之前锁定了会话。我解锁会话时看到的输出:

C:\Pradeep>perl test.pl
15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,
C:\Pradeep>

当我运行下面的脚本时,我使用 Win32::GuiTest 函数(如 SetForegroundWindow($_); 连接到服务器);SendKeys("密码01"); 等等...它连接没有任何问题,服务器登录成功。但是,当我在执行过程中锁定会话并解锁会话时,脚本的执行完成了,但服务器登录没有完成。

use Win32::GuiTest qw(FindWindowLike GetWindowText SetForegroundWindow SendKeys);
system('"start %windir%\system32\mstsc.exe"');    
$Win32::GuiTest::debug = 0;    
$max_Sleep_time=3;
$Cur_Sleep_time=0;
do
{
  sleep(1);    
  @windows = FindWindowLike(0, "Remote Desktop Connection");
 $number_of_windows_opend = scalar(@windows);        
  $Cur_Sleep_time++;
}while ($number_of_windows_opend==0&&$Cur_Sleep_time!=$max_Sleep_time);
for (@windows) {
  SetForegroundWindow($_);         
  SendKeys("server_name");    
  SendKeys("{ENTER}"); 
  sleep(10);
  @windows_seq = FindWindowLike(0, "Windows Security");
     for (@windows_seq)    {
      SetForegroundWindow($_);
          SendKeys("Password01");
          SendKeys("{ENTER}");
    }
@windows={};
exit;
  }

据我说,我使用活动窗口来完成我的功能。所以它不起作用。如果用户会话在执行过程中被锁定,有没有其他方法可以成功完成上述功能。还是我必须更改我的代码?

4

2 回答 2

0

您已经多次被告知答案:

  1. http://perlmonks.org/?node_id=1073507
  2. http://perlmonks.org/?node_id=1073302
  3. http://perlmonks.org/?node_id=1073530

这在Win32::GuiTest的文档中进行了解释。出于明显的安全原因,您不能在屏幕锁定时将密钥发送到应用程序,也不能将密钥发送到未激活的应用程序。

于 2014-02-05T10:43:52.757 回答
0

而不是使用发送键使用 WMSetText(); 功能。它将窗口/控件 HWND 和文本作为输入,并将文本设置为指定的对象。

注意:使用 WMSetText(); 您可以只设置文本,不能发送 {ENTER}、{F1} 等键...

于 2014-02-20T09:58:41.583 回答