如何在锁定用户会话时执行perl Win32 :: GuiTest函数

时间:2014-02-05 07:01:46

标签: windows perl session usersession

我尝试执行下面的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( “Password01”); 等等... 它连接没有任何问题,服务器登录成功。 但是,当我在执行过程中锁定会话并解锁会话时,脚本的执行已完成,但服务器登录未完成。

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;
  }

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

2 个答案:

答案 0 :(得分:0)

你已经多次被告知答案了:

  1. http://perlmonks.org/?node_id=1073507
  2. http://perlmonks.org/?node_id=1073302
  3. http://perlmonks.org/?node_id=1073530
  4. Win32::GuiTest的文档对此进行了解释。出于明显的安全原因,您无法在屏幕锁定时向应用程序发送密钥,您无法将密钥发送到未激活的应用程序。

答案 1 :(得分:0)

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

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

的键