我尝试执行下面的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;
}
据我说,我使用活动窗口来执行我的功能。所以它不起作用。 如果用户会话在执行过程中被锁定,我还能以其他方式成功完成上述功能。或者我必须在我的代码中进行更改吗?
答案 0 :(得分:0)
你已经多次被告知答案了:
Win32::GuiTest的文档对此进行了解释。出于明显的安全原因,您无法在屏幕锁定时向应用程序发送密钥,您无法将密钥发送到未激活的应用程序。
答案 1 :(得分:0)
使用WMSetText();而不是使用发送密钥;功能。它将窗口/控件HWND和文本作为输入,并将文本设置为指定的对象。
注意:使用WMSetText();你可以设置文本,你不能发送像{ENTER},{F1}等...
的键