2006年07月

2006年07月29日

CD曲リストと検索イメージを取ってくる

MoreInfoからは殆どイメージが取れないので,googleのイメージ検索で取ってくるように変更した。
文字コードの指定とか省いてるので環境に依存するかもしれないけど、とりあえず動いてる。

Set IE3 = CreateObject("InternetExplorer.Application")
IE3.Visible = True
url = "http://images.google.co.jp/images?q=" & Title & " " & Artist
IE3.Navigate2(url)


2006年07月26日

Windows Media PlayerのCD曲リストを得る vbs その2

CDの曲リストの他のアルバム情報も取得するように変更した。
ジャケットのjpegファイルを得るのが主目的だけど、日本のジャケットは登録されていないようだ。
表示はInternetExplorerを使うように変更して、CDのアクセスまで最大20秒待つようにもした。

rem CDドライブに挿入したCDのタイトル、曲リストを取得する 2006.7.26 yamama
rem CDのドライブレターを指定
DriveLetter = "F"

Set objPlayer = CreateObject("WMPlayer.OCX" )
Set objCdromCollection = objPlayer.cdromCollection
Set objCdrom = objCdromCollection.getByDriveSpecifier(DriveLetter)
for i = 0 to 20
	Set objPlaylists = objCdrom.playlist
	if objPlaylists.count > 0 then
		i = 20
	end if
	WScript.Sleep 1000
next

rem タイトル、アーティスト、曲名を取得する
Title =  objPlaylists.getItemInfo("Name")
Artist = objPlaylists.getItemInfo("Artist")
MoreInfo = objPlaylists.getItemInfo("MoreInfo")
objList = Title & vbNewLine & Artist & vbNewLine

For i = 0 to objPlaylists.count - 1
	Set objSong = objPlaylists.item(i)
	if i < 9 then
		idx = i+1 & ".  "
	else
		idx = i+1 & ". "
	end if
	objList = objList & idx  &  objSong.name & vbNewLine
Next

Set fso = CreateObject("Scripting.FilesystemObject")
Filename = "CDList.txt"
Set ListFile = fso.CreateTextFile(Filename, True)
ListFile.WriteLine(objList)
ListFile.Close

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate2(MoreInfo)

Set IE2 = CreateObject("InternetExplorer.Application")
IE2.Visible = True
IE2.Navigate2(fso.GetAbsolutePathName(Filename))

album cdlist

2006年07月25日

CDの曲リストを取得するVBS

CDドライブに挿入したCDのタイトル、曲リストをテキストにする.vbsを作ってみた。
ドライブレターを環境に合わせて変更してget.vbsを実行するとCDList.txtに曲名のリストを出力する。
但しWindowsMediaPlayerからアクセス出来るマイクロソフト版のCDデータベースに登録されていないCDでは曲名等は取れない。

以下のテキストをget.vbsとして保存して、マウスで実行すると同じディレクトリにテキストが作られます。

DriveLetter = "F"
rem デバッグ用
checkattribute = 0
outmsgbox = 0

Set objPlayer = CreateObject("WMPlayer.OCX" )
Set objCdromCollection = objPlayer.cdromCollection
Set objCdrom = objCdromCollection.getByDriveSpecifier(DriveLetter)
Set objPlaylists = objCdrom.playlist

rem 属性を取得
rem Name, Artist, Author, Genre, Provider, Style
if checkattribute then
	For i = 0 to objPlaylists.attributeCount - 1
		attrname = objPlaylists.attributeName(i)
		attribute = attribute & attrname 
		attribute = attribute & " = "  & objPlaylists.getItemInfo(attrname)
		attribute = attribute & vbNewLine
	Next
	Wscript.Echo attribute
end if

rem タイトル、アーティスト、曲名を取得する
Title = objPlaylists.getItemInfo("Name")
Artist = objPlaylists.getItemInfo("Artist")
objList = Title & vbNewLine & Artist & vbNewLine
For i = 0 to objPlaylists.count - 1
	Set objSong = objPlaylists.item(i)
	if i < 9 then
		idx = i+1 & ". "
	else
		idx = i+1 & "."
	end if
	objList = objList & idx  &  objSong.name & vbNewLine
Next
if outmsgbox then
	Wscript.Echo objList
else
	rem Dim fso, ListFile
	Set fso = CreateObject("Scripting.FilesystemObject")
	Filename = "CDList.txt"
	Set ListFile = fso.CreateTextFile(Filename, True)
	ListFile.WriteLine(objList)
	ListFile.Close
	Wscript.Echo objList
end if


2006年07月17日

休止モードと復帰タイマーの設定

外出中にプログラムを起動し、処理が終わって電源をオフにする場合に便利なAPIとして、
Windowsのプログラム内から、Windowsを休止モードに移行させるAPIと
電源休止モードから指定時刻に再起動させるタイマーのAPIがあります。

休止モードに移行させるAPIには SetSystemPowerState(BOOL, BOOL)を使用します。
HANDLE htoken;
TOKEN_PRIVILEGES tknPrvlgs;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &htoken); LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&(tknPrvlgs.Privileges[0].Luid));
tknPrvlgs.PrivilegeCount = 1;
tknPrvlgs.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(htoken, FALSE, &tknPrvlgs, 0, NULL, NULL);
SetSystemPowerState(TRUE, TRUE);

休止モードから指定時刻に再起動させるにはSetWaitableTimer(...)を使用します。
//タイマーハンドル
m_waketimer = CreateWaitableTimer(NULL, FALSE, NULL);
//指定時刻までのタイマー時間を100ns単位で取得
CTimeSpan wakespan = wake - now;
LARGE_INTEGER ltime;
ltime.QuadPart = -wakespan.GetTimeSpan() * (LONGLONG)1000*1000*10;
//再起動タイマーを設定
SetWaitableTimer(m_waketimer, <ime, 0, 0, 0, TRUE);
//
//プログラム終了時には終了
CancelWaitableTimer(m_waketimer);
CloseHandle(m_waketimer);