通常使うプリンタを、一覧から番号で選択する。

ちょくちょく変更する必要があるときに,このPerlスクリプトをWindowus XPで使用していました。
Perlが動作する場所で実行してください。



#通常使うプリンタを、一覧から番号で選択する。
#2008.10.14



#@TPlist_tmp はプリンタ一覧が改行毎の配列で入っている
@TPlist_tmp = qx{ cscript.exe C:/WINDOWS/system32/prnmngr.vbs -l };
#print $TPlist_tmp[0]; #1行目が出る

#現在の通常使うプリンタを取得
#cscript.exe C:/WINDOWS/system32/prnmngr.vbs -g
#ここから、プリンタ名のみを $GEN_TP_name に代入する
@GEN_TP_name = qx{ cscript.exe C:/WINDOWS/system32/prnmngr.vbs -g };
$tmp_p = substr($GEN_TP_name[3], 18 ,length($GEN_TP_name[3])-19);
printf ("現在の通常使うプリンタ\n %s\n\n", $tmp_p );

# @TPlist_tmpから、【プリンタ名 ・・・】で、【プリンタ名 自動 】で始まらないものの一覧を
# $TPlist の配列に入れる
@TPlist = (); #配列として初期化

$count = @TPlist_tmp;
$printer_no = ($count - 5) / 16; #列挙されたプリンタの数
#print $printer_no;

for ($i = 0; $i < $printer_no ; $i++)
{
$tmp_p = substr($TPlist_tmp[3+$i*16+2], 11 ,length($TPlist_tmp[3+$i*16+2])-12);
push(@TPlist, $tmp_p);
}


########################################
# プリンタ一覧表示
########################################
# $TPlist に 1 から始まる番号を付して一覧表示する
# このとき、通常使うプリンタ($GEN_TP_name) の行は、わかるように表示する
print " 0. キャンセル\n";
$list_no = 1;
foreach (@TPlist)
{
printf( " %d. %s\n", $list_no, $_);
$list_no ++;
}
print "\n【通常使うプリンタ】にする番号を入力してください。 No. ";

# 入力待ち (通常使うプリンタにしたい)番号の入力を $no に
$no = <STDIN>;

# 未入力、無い番号、無効な番号なら終了
if( $no !~ /\d+/ || $no == 0)
{
print "\nキャンセルされました。";
exit();
}
if( $no == 0 || $no > $printer_no )
{
print "\n無効な番号です。";
exit();
}

# $noのプリンタ名をセット
$set_tp_name = @TPlist[$no-1];
#print $set_tp_name;

# 番号のプリンターを通常使うプリンタにセットする
$qx_command = "cscript.exe C:/WINDOWS/system32/prnmngr.vbs -t -p ".'"'.$set_tp_name.'"';
@GEN_TP_name = qx{ $qx_command };
$tmp_p = substr($GEN_TP_name[3], 24 ,length($GEN_TP_name[3])-25);
printf ("\n現在の通常使うプリンタは\n %s\nです。", $tmp_p );