August 2008 Archives

iTunes にお仕事をしてもらうために書いた使い捨てツール

| 0 Comments | 0 TrackBacks

iTunes で CD をエンコードする場合、初めて突っ込む CD だと CDDB に問い合わせてくれるようになっています。だれかが入力してくれてて CDDB に曲名が存在すれば、楽を出来る仕組みですね。

ただ、1 つの CD に複数のデータが存在する場合、ダイアログが出てきて、どのデータを使うのか聞かれることになります。エンコードする枚数が多いと、問い詰められる回数も当然増えます。

こいつが今回の敵です。

何かダイアログが出てきたら OK を押すだけの簡単なお仕事をするアルバイトの子を雇うことにしました。

またこの子には、うちのマシンの CPU の処理速度に応じて、約 4 分を測定してもらうお仕事も兼ねてもらうことにしました。

一応、エンコード中なのかどうかは以下のようなコードで教えてもらえるっぽいことを、あとで知りました。次回大量エンコードする際は使おうと思います。

var	iTunesApp = WScript.CreateObject("iTunes.Application");
var objConversionstatus = iTunesApp.ConvertOperationStatus;
WScript.Echo(objConversionstatus.ProgressValue);

以下が今回雇ったアルバイトの子です。

// itunes-clicker.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <windows.h>
#include <shlobj.h>
#include <string.h>

#define strdup _strdup

#define MAX_NUM_ENUMWND  100
int  g_cnt = 0;                  // カウンタ
HWND targetWnd;
char *targetText;
char *targetClass;
BOOL CALLBACK MankoProc(HWND hWnd, LPARAM lParam)
{
	if (g_cnt >= MAX_NUM_ENUMWND) return FALSE;

	char buf[1024];
	char *tocmp;
	if (targetText != NULL) {
		tocmp = strdup(targetText);
		GetWindowText(hWnd, buf, 1024);
	} else {
		tocmp = strdup(targetClass);
		GetClassName(hWnd, buf, 1024);
	}
	if (strcmp(buf, tocmp) == 0) {
		targetWnd = hWnd;
		return FALSE;
	}
    g_cnt++;
    return TRUE;
}

HWND Manko(HWND hWnd, char *textName, char *className)
{
	targetWnd = NULL;
	if (textName != NULL) {
		targetText = strdup(textName);
		targetClass = NULL;
	} else {
		targetText = NULL;
		targetClass = strdup(className);
	}
	g_cnt = 0;
	EnumChildWindows(hWnd, MankoProc, 0);
	return targetWnd;
}

void dialog_clicker(void) {
  HWND hWnd = FindWindow("iTunesCustomModalDialog", NULL);
	HWND hdialog;
	if (hWnd != NULL) {
		hdialog = Manko(hWnd, "OK", NULL);
		if (hdialog != NULL) {
			PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(101, BN_CLICKED), 0);
		}
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
  int c;
	for (c = 0; c < 240; c++) {
	  dialog_clicker();
	  Sleep(1000);
	}
	return 0;
}
@rem encodeall.bat
@echo off
FOR /D %%x IN (???) DO CALL encode.bat %%x
@rem encode.bat
@echo off
echo run %1
set loc=0,X:\cds-wav\%1\CDImage.cue

echo %loc%
"c:\Program Files\D-Tools\daemon.exe" -mount %loc%
X:\itunes-clicker.exe
"c:\Program Files\D-Tools\daemon.exe" -unmount 0