2008/07/02
php: スクリーンショットはブラウザだけじゃない
パワポとかのスクリーンショット。完動させるのがちょっと先になりそうなので、メモとして書いておきます。
windows 上の php では imagegrabwindow というスクリーンショット用の関数が使えます。これにはウインドウハンドルが必要なので、DynamicWrapper ごしに WindowsAPI をたたいて取得します。以下は COMオブジェクトから、パワポと、DynamicWrapper を使ってスクリーンショットを得るサンプルです。
1. DynaWrap (DynaCall) をダウンロード→解凍して MAKE.BAT 実行。
2. Windows を設定 (phpがスクリーンショットするのを許可させる)
サービス > Apache > プロパティ > ログオン > 「デスクトップとの対話をサービスに許可」をチェック
↓
Apache > 再起動
<?
$f = 'C:\xampp\htdocs\www\Garage\test.ppt';
$title = "Microsoft PowerPoint - [test.ppt]";
$app = new COM("Powerpoint.Application");
$app->Visible = True;
$app->Presentations->Open($f);
$app->Left = 0;
$app->Top = 0;
$app->Width = 800;
$app->Height = 600;
sleep(5);
$wrap = new COM("DynamicWrapper");
$wrap->Register("USER32.DLL", "FindWindow", "i=ss", "f=s", "r=h");
$handle = $wrap->FindWindow(null,$title);
$im = imagegrabwindow($handle,0);
imagepng($im, "shot.png");
$app->Quit();
?>
先にいっとかないと、と思ったんだけど、パワポ、エクセル、ワードでドキュメントの開き方をはじめコントロール方法が違います。詳しくはそれぞれアプリケーションを開いて「Alt+F11」→「F2」。見てもらえばわかると思いますがスクリーンショットじゃなくてもいろいろできそうな感じです。
追記:書いている最中にみつけたんだけど、W32api関数っていうのも使えそう