2014-02-05 5 views
-1

Я попытался выполнить сильфон PERL скрипта и запер сеанс пользователя ...Как выполнить Perl Win32 :: функцию GuiTest, когда сеанс пользователя заблокирован

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

Согласно мне, я использовал активные окна для выполнения своих функций. Так что это не работает. есть ли какой-либо другой способ, я могу успешно выполнить вышеуказанную функциональность, если пользовательский сеанс заблокирован в середине процесса выполнения. или я должен внести изменения в свой код?

ответ

0

Вместо использования клавиш отправки используйте WMSetText(); функция. Он принимает окно/управление HWND и текст в качестве входных данных и устанавливает текст для указанного объекта.

Примечание: Использование WMSetText(); вы можете просто установить текст, вы не можете отправлять такие клавиши, как {ENTER}, {F1} и т. д.

0

Вы уже сказали ответ несколько раз:

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

Это объясняется в документации Win32::GuiTest. По очевидным соображениям безопасности вы не можете отправлять ключи приложениям, когда экран заблокирован, вы не можете отправлять ключи к неактивным приложениям.

Смежные вопросы