Batファイルをスタートアップに登録してみる→やっぱりPARでexe化した→けどUACで死んだ→最後はVB...
batファイルのスタートアップ登録の方法とか知らなかったので、とりあえず試してみた
pl2batコマンドで「iTunesで最近聞いた曲をブログに表示する(Perl使用)」で作ったファイルをbatファイルに
$ pl2bat itunes.pl
batファイル作成(itunes.bat)
@rem = '--*-Perl-*-- @echo off if "%OS%" == "Windows_NT" goto WinNT perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9 goto endofperl :WinNT perl -x -S %0 %* if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl if %errorlevel% == 9009 echo You do not have Perl in your PATH. if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul goto endofperl @rem '; #!perl #line 15 use utf8; use strict; use Dumpvalue; use File::Spec; use File::HomeDir::Windows; use LWP::Simple; my $path = File::HomeDir::Windows->my_music; my $file = File::Spec->catfile($path, 'iTunes', 'iTunes Music Library.xml'); my @recent_playlist; my %track_list; my $last_id = -1; while (1) { # ファイル操作 open my $data, $file; while (my $line = <$data>) { # 処理の開始 if ($line =~ /^<dict>$/) { while (my $line = <$data>) { # 楽曲の取得 if ($line =~ /^\t<key>Tracks<\/key>$/) { get_music($data); } # プレイリストの取得 # デフォルトのとか,Geniusとか,最近再生〜とか,最近追加〜など,左メニューに表示してるやつら if ($line =~ /^\t<key>Playlists<\/key>$/) { get_playlist($data); } } } } close $data; undef($data); if ($recent_playlist[0] != $last_id) { print $track_list{$recent_playlist[0]}->{Name}, $/; my $result = get("表示するファイル出力させる"); #if (is_error($result)) { # die('oops'); #} $last_id = $recent_playlist[0]; } else { #print "-\n"; } undef(@recent_playlist); #undef(%track_list); sleep(10); } # リスト表示 #foreach my $track_id(@recent_playlist) { # print $track_list{$track_id}->{Name}, " by ", $track_list{$track_id}->{Artist}, $/; #} exit; sub get_music { my $data = shift; # <dict>の部分を省略 my $line = <$data>; # 楽曲の取得開始 while (my $line = <$data>) { # 楽曲の取得終了か? if ($line =~ /^\t<\/dict>$/) { last; } #my $id = -1; ## key #if ($line =~ /^\t\t\t<key>([0-9]*?)<\/key>$/) { # $id = $1; #} # <dict>の部分を省略 $line = <$data>; # dictの中身 my $track_id; while (!((my $line = <$data>) =~ /^\t\t<\/dict>$/)) { my($key, $val) = ($line =~ /<key>(.*?)<\/key><[\w]+?>(.*?)<\/[\w]+?>/); if ($key eq 'Track ID') { $track_id = $val; $track_list{$val} = {}; } elsif($key eq 'Artist' || $key eq 'Name') { $track_list{$track_id}->{$key} = $val; } } } } sub get_playlist { my $data = shift; # <array>の部分を省略 my $line = <$data>; while (my $line = <$data>) { # ライブラリ、Genius、Alternative Plan、トップ25、最近追加した項目、などは無視 my $str = "\t\t\t<key>Name<\/key><string>最近再生した項目<\/string>"; utf8::encode($str); if ($line =~ /^$str$/) { # Playlist Itemsまでの行は無視 while (my $line = <$data>) { if ($line =~ /^\t\t\t<key>Playlist Items<\/key>$/) { # <array>は無視 $line = <$data>; # 最近再生したアイテムの取得開始 while (my $line = <$data>) { # リストの取得終了か? if ($line =~ /^\t\t\t<\/array>$/) { last; } unless ($line =~ /dict>$/) { my($track_id) = ($line =~ /\t\t\t\t\t<key>Track ID<\/key><integer>([\d]*?)<\/integer>$/); push(@recent_playlist, $track_id); } } last; } } } } } 1; __END__ :endofperl
スタートアップファイル用bat作成
start /b c:\service\itunes.bat
■ PAR化
でやったんだけど、なんか上手くいかなかった(起動はするんだけどデータの更新ができてないみたい?)
なのでPARでexe化してみることにした
詳細はこちら(http://supee.blog121.fc2.com/blog-entry-187.html)みてね!
Perl5.8.9でもできるようになっててびびた。
・・・したのはいいんだけど、スタートアップにexeのショートカットつっこんだらUACでひっかかった。
Windows Defender、恐ろしい子・・・!
もう厭になってきたので放棄してbatをiTunes起動した時に一緒に起動するようにした
■ 最後はVB
Dim WShell Set WShell = WSCript.CreateObject("WScript.Shell") WShell.Run "C:\\service\\startup_itunes.bat",0
なんか負けた気が凄いする
...なんかiTunes起動してない状態でitunes_updater.batが起動してダメダメになってるだけか
なるほど
でももうめんどくさい...