Perl控制windows进程

 1:Perl中的 "Win32" 模块提供了很多Win32的API。在windows上使用perl进行开发的时候是必不可少的模块。简单总结一下本人的使用心得。
   A:Win32::CopyFile(FROM, TO, OVERWRITE)   ---拷贝文件
      Win32::CopyFile("D:\\Test_Code\\Temp\\test.pl","D:\\Test_Code\\Temp\\test1.pl",0);
      注:OVERWRITE --- 0 :如果文件存在不覆盖  1 :如果文件覆盖
     目录要加 "\\" 双斜杠
   B:Win32::CreateDirectory(DIRECTORY)   --- 新建目录
   C:Win32::CreateFile(FILE)   ---- 新建文件
   D:Win32::FormatMessage(ERRORCODE)  --- 转换windows错误号为错误信息
      $error = Win32::FormatMessage(26); $error为26号错误的具体信息
   E:Win32::GetLastError()  ---- 获取调用win32 API 的最近错误号,和FormatMessage一起用于错误信息的打印
      print Win32::FormatMessage( Win32::GetLastError() );
   F:Win32::GetCwd()  ---- 获取当前目录
      $b = Win32::GetCwd();
   G:Win32::Sleep(TIME) ---- sleep指定时间
   H:Win32::GetCurrentProcessId() ---- 获取当前进程ID,类似与“$$”
   该模块还有很多其它功能,我只列出了一些我用过的功能,其它方法 search.cpan.ora 上都有详细的说明。

2:"Win32::Process" 模块用于打开和控制windows应用程序,例如打开和关闭金山词霸吧。这个在自动化测试中还是要经常使用的。
   A:Win32::Process::Create($obj,$appname,$cmdline,$iflags,$cflags,$curdir) ----打开一个程序
      例:使用UE打开文本文件vi.txt。
          my $result = Win32::Process::Create($ProcessObj,
                                                    "D:\\tools\\UltraEdit\\Uedit32.exe",
                                                    "Uedit32 C:\\Documents and Settings\\user\\Desktop\\vi.txt",
                                                    0,
                                                    NORMAL_PRIORITY_CLASS,
                                                    ".");
      参数说明:   $obj ---- 返回的进程对象 
                   $appname ---- 应用程序的执行文件,目录要加双斜杠 "\\" 。
                   $cmdline ---- 应用程序的命令参数。                                        
                   $iflags  ---- 0/1 继承父进程的进程值与否。
                   $cflags ---- 程序运行的方式。值可以为:
                           CREATE_DEFAULT_ERROR_MODE
                           CREATE_NEW_CONSOLE
                           CREATE_NEW_PROCESS_GROUP
                           CREATE_NO_WINDOW
                           CREATE_SEPARATE_WOW_VDM
                           CREATE_SUSPENDED
                           CREATE_UNICODE_ENVIRONMENT
                           DEBUG_ONLY_THIS_PROCESS
                           DEBUG_PROCESS
                           DETACHED_PROCESS
                           HIGH_PRIORITY_CLASS
                           IDLE_PRIORITY_CLASS
                           INFINITE
                           NORMAL_PRIORITY_CLASS
                           REALTIME_PRIORITY_CLASS
                           THREAD_PRIORITY_ABOVE_NORMAL
                           THREAD_PRIORITY_BELOW_NORMAL
                           THREAD_PRIORITY_ERROR_RETURN
                           THREAD_PRIORITY_HIGHEST
                           THREAD_PRIORITY_IDLE
                           THREAD_PRIORITY_LOWEST
                           THREAD_PRIORITY_NORMAL
                           THREAD_PRIORITY_TIME_CRITICAL
                           参数含义偶就不解释了,直接看参数变量的英文意思就明白了。
                   $curdir ----- 当前目录。"." 表示当前目录。和Unix下类似。 
   B:Win32::Process::KillProcess($pid, $exitcode) ---关闭指定进程,并设置进程的退出值。
   C:$ProcessObj->Suspend() ---- 挂起create打开的进程
   D:$ProcessObj->Resume()  ---- 恢复create打开的进程
   E:$ProcessObj->Kill($exitcode) ---- 关闭create打开的进程,并设置进程的退出值。
   F:$ProcessObj->Wait($timeout) --- 等待进程结束,无限期等待设置timeout值为“INFINITE”
   G:$ProcessObj->GetProcessID() --- 获取create打开的进程的进程ID。

3:"Win32::Process::Info" 模块用于获取进程的详细信息。这个模块偶用的不多,只使用了其中的一个方法GetProcInfo(),获取当前windows的进程列表。用的不多,偶就不多说了,大家自己看资料研究吧。

贴出偶写的一段代码,仅供参考:
#create a new process for YoDaoDict.exe
sub create_process {
     my $result = Win32::Process::Create($ProcessObj,
                                                    "D:\\tools\\UltraEdit\\Uedit32.exe",
                                                    "Uedit32 C:\\Documents and Settings\\user\\Desktop\\vi.txt",
                                                    0,
                                                    NORMAL_PRIORITY_CLASS,
                                                    ".");
    if (!$result) {
        die ErrorReport();
    }
    else {
        my $new_pid = $ProcessObj->GetProcessID();
        return $new_pid;
    }
}
#check the process YoDaoDict.exe is exist or not
sub check_process {
    my $pi = Win32::Process::Info->new() or die "Use Win32::Process::Info failed.$@";
    my @info = grep {
                      defined $_->{"Name"} && $_->{"Name"} =~ /YodaoDict.exe/
                    } $pi->GetProcInfo();
    if (defined @info) {
        return $info[0]->{"ProcessId"};
    }
    else {
        return 0;
    }
}

#kill the process
sub kill_process {
    my ($process_id) = @_;
    Win32::Process::KillProcess($process_id,0) or die "Kill the Process_ID:$process_id failed.$@";
}

sub ErrorReport{
        print Win32::FormatMessage( Win32::GetLastError() );
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值