4月
24
2013

PHPでWinアプリを終了させるテスト。

MOVIE-LOG2013/04/16のエントリ2013/04/17のエントリで、プレイヤーの
起動について記述しましたが、実装して使ってみたところ、
ある問題に気付きまして。

実験ではaviやmp4等の動画は「GOM Player」で、DVD(ISOファイル)は
DAEMON Tools Liteにマウント後Power DVDで閲覧しているのですが、
DVDばかり若しくは動画ばかり(つまり同じプレイヤーを使うもの)を
観ている分には問題ないものの、例えば動画を再生したが途中で
DVDを観ようとすると、GOM Playerが起動したままDVDが再生して
しまう訳でして。これは、せめて停止するボタンが欲しいな…と
ちょっと調べてみたら、PHPの関数にwin32_ps_list_procsなるものが
あるのを発見。これを使って実装してみました。
 

 



 
 
【下ごしらえ】
まず、php_win32psを有効にします。調らべていたら、pecl4winからwin32_ps_list_procsを
ダウンロードして…と書いてあるサイトが多かったのだが、サーバダウンしているのか
サイトにアクセスできず。改めて自分の環境(C:\xampp\php\ext\下)をみてみたら、
win版XAMPPを入れたからか既に「php_win32ps.dll」が存在してたので、これを使えるように
再設定するだけで済みました。

「C:\xampp\php\php.ini」の中にある「;extension=php_win32ps.dll」を探して
文頭の「;」を削除後、apacheを再起動すれば完了です。
 
 
【作り方】

前述の通り、今回はaviやmp4等の動画はGOM Playerを、DVDはPower DVDを使って
閲覧している前提で説明します。その他の前提条件や環境等は、2013/04/16のエントリ
2013/04/17のエントリと同じとします。

「C:\xampp\htdocs\localmenu\」の下に、以下のファイルを作成してください。
(引数が入ってなかったり、1or2以外が入ってた場合は無言で終わってしまうので、
 それが嫌な方はメッセージを表示させるなりしてください。)

作成ファイル:movieStop.php

<?php
	if(isset($_GET['mode'])) {
		switch ( $_GET['mode'] ) {
			case 1:
				$processName = 'PowerDVD.exe';
				break;
			case 2:
				$processName = 'GOM.exe';
				break;
			default:
				exit;
		}
		@$processList = win32_ps_list_procs();
		foreach ($processList as $processArray) {
			$pid = $processArray['pid'];
			if (basename($processArray['exe']) == $processName) {
				`taskkill /f /PID $pid 2>&1`;
			}
		}
	}
?>

あとは、メニュー用のHTMLに以下のように記述すれば完了です。
 
 
・Power DVDを停止させるボタンを設置する場合

<a href="./movieStop.php?mode=1" target="_blank">Power DVD 停止</a>

・GOM Playerを停止させるボタンを設置する場合

<a href="./movieStop.php?mode=2" target="_blank">GOM Player 停止</a>

 
細君からもツッコミが入ったのですが、何だかもうリモコンみたくなってきましたね;
 

【参考サイト】
》PHP Manual – win32_ps_list_procs
》PHP マニュアル – win32ps 関数
》PHP WELT.NET – win32ps関数

 
 

 


2024年4月
1234567
891011121314
15161718192021
22232425262728
2930  

Archives

Recommended