SlideShare a Scribd company logo
1 of 24
Chrome-eject が
この先生きのこるには
Who am I ?
はせがわようすけ
• http://utf-8.jp/
• 顔文字でJavaScript書いたり
• 顔文字で86バイナリ書いたり

@hasegawayosuke http://utf-8.jp/
Chrome-eject ?

@hasegawayosuke http://utf-8.jp/
Chrome-eject ?

@hasegawayosuke http://utf-8.jp/
Chrome-eject uses NPAPI
NPAPI plugin
• Netscape Plugin API
• DLL形式でブラウザの機能を拡張
• Flash Player, Silverlight, ...
• http://www.slideshare.net/TNaruto/npapi-26722229
NPAPI plugin in Chrome Extension
• JavaScriptだけで出来ないことを実現
• Chrome拡張の制約を超えて何でも可能
• でもDLL書かないと…
@hasegawayosuke http://utf-8.jp/
NPWIN32
• 何度もDLL書くのイヤだ
• 何でもできるNPAPI DLLを書いた
• JSから任意のWin32APIを呼び出せる
• PerlのWin32::APIみたいなもの

@hasegawayosuke http://utf-8.jp/
Chrome-eject uses NPAPI
// manifest.json
"plugins" : [ { "path" : "win32api.dll", "public" : false } ]
// background.html
<embed type="application/x-win32api-dynamic-call" id="p" hidden="true" />
var npwin32;
var mciSendString;
document.addEventListener( "DOMContentLoaded", function (){
chrome.browserAction.onClicked.addListener( function( tab ){
if( npwin32 === undefined ){
npwin32 = document.getElementById( "p" );
}
if( mciSendString === undefined ){
mciSendString = npwin32.import( "winmm.dll",
"DWORD mciSendStringW( LPCWSTR, DWORD, UINT, DWORD )"
);
}
if( mciSendString){
var r = mciSendString( "set cdaudio door open", 0, 0, 0 );
}
} );
} );

@hasegawayosuke http://utf-8.jp/
NPWIN32 - callback
// import DLL functions
var EnumWindows = npwin32.import(
"user32.dll", "BOOL EnumWindows( CALLBACK, DWORD )" );
var GetWindowText = npwin32.import(
"user32.dll", "INT GetWindowTextW( DWORD, LPWSTR, INT )" );
// create CALLBACK object
var func = npwin32.callback(
function ( hwnd, lparam ){
var buf = new Array( 257 ).join( " " ); // space * 256
if( GetWindowText( hwnd, buf, 256 ) ){
alert( hwnd + " : " + GetwindowText.arg( 1 ) );
}
},
"BOOL (DWORD, DWORD)"
);
EnumWindows( func, 0 );

@hasegawayosuke http://utf-8.jp/
“Goodbye to Our Friend NPAPI”

@hasegawayosuke http://utf-8.jp/
NPAPI
plugins

N
P
A
P
I
告
別
式
How do I eject without NPAPI?
Native Messaging API

@hasegawayosuke http://utf-8.jp/
How do I eject without NPAPI?
Native Messaging API
• http://developer.chrome.com/extensions
/messaging.html#native-messaging
• Chrome拡張と実行ファイル間でstdioを通じて
通信できる
• 事前にmanifestファイルをレジストリに登録
する必要がある
• しかもHKLM!

(☝ ՞

՞)☝気軽にejectできない!
@hasegawayosuke http://utf-8.jp/
おっ?
なんかAPI追加されてる!?
How do I eject without NPAPI?

キタ━━━━(゚∀゚)━━━━ !!!!!
@hasegawayosuke http://utf-8.jp/
chrome.system.storage
• ストレージデバイスの情報を取得
chrome.system.storage.getInfo(
function( devices ){
console.log( devices );
}
);
DVD-ROMデバイス

え? fixed?

@hasegawayosuke http://utf-8.jp/
chrome.system.storage
• とりあえずejectしてみる
chrome.system.storage.getInfo(
function( devices ){
devices.forEach( function( device ){
if( device.capacity == 0 ){
chrome.system.storage.ejectDevice(
device.id,
function ( result ){
console.log( result );
}
);
}
} );
}
result === "failure"
);
@hasegawayosuke http://utf-8.jp/
chrome.system.storage
• Chrome 30+ で使える(はず)
• CD-ROMドライブでも ”removable” ではなく
“fixed” が返ってくる
• ejectDevice 失敗する

(☝ ՞

՞)☝やっぱりejectできない!
@hasegawayosuke http://utf-8.jp/
なんとか eject したい!

拡張に実行ファイル入れておいて、
ダウンロードさせてそれを実行だ!
How do I eject ?
• 拡張のなかにejectするWSHファイル(*.vbs)を
含めておく
• chrome.downloads.download APIを使ってvbs
をローカルにダウンロードさせる
• chrome.downloads.open APIを使ってダウン
ロードしたvbsファイルを実行する
• うまくいけば eject 完了!

@hasegawayosuke http://utf-8.jp/
chrome.downloads

@hasegawayosuke http://utf-8.jp/
chrome.downloads
var url = chrome.extension.getURL( "eject.vbs" );
chrome.downloads.download( {
url : url,
filename : "./" +
url.replace( /^chrome-extension:///, "" ),
conflictAction : "overwrite"
}, function( id ){
if( id === undefined ) return;
setTimeout( function(){
chrome.downloads.open( id );
chrome.downloads.erase( { id : id } );
}, 2000 );
} );
いまいち動きがおかしい。donloadのcallbackが呼ばれてすぐだとファ
イルを開けないので2秒待ちを入れている

@hasegawayosuke http://utf-8.jp/
eject.vbs
Dim
Dim
Dim
Set
Set

wmp
drives
i
wmp = CreateObject( "WMPlayer.OCX" )
drives = wmp.cdromCollection

For i = 0 To drives.Count - 1
drives.Item( i ).Eject
Next

@hasegawayosuke http://utf-8.jp/
DEMO
Conclusion - how to eject from Chrome Extension
• NPAPIは今後使えない
• Native MessagingはNPAPIほど気軽には使いに
くい
• chrome.system.storageはいまいちおかしい
• chrome.downloadsはZoneIdつけてくれる
• もう少し待てばもっとejectしやすくなるは
ず!

(☝ ՞

՞)☝ウイーン

Special Thanks to @Akkiesoft and Eject-command Users Group
@hasegawayosuke http://utf-8.jp/

More Related Content

What's hot

WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪
WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪
WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪Chieko Aihara
 
BuddyPressで街のポータルサイトを作ろう
BuddyPressで街のポータルサイトを作ろうBuddyPressで街のポータルサイトを作ろう
BuddyPressで街のポータルサイトを作ろう松田 千尋
 
SWF LOVE (ASを使わないFlash勉強会 #1)
SWF LOVE (ASを使わないFlash勉強会 #1)SWF LOVE (ASを使わないFlash勉強会 #1)
SWF LOVE (ASを使わないFlash勉強会 #1)ken39arg
 
SWF LOVE (ASを使わないFlash勉強会)
SWF LOVE (ASを使わないFlash勉強会)SWF LOVE (ASを使わないFlash勉強会)
SWF LOVE (ASを使わないFlash勉強会)ken39arg
 
Wp プラグインapiから理解するword press.share
Wp プラグインapiから理解するword press.shareWp プラグインapiから理解するword press.share
Wp プラグインapiから理解するword press.shareYuji Nojima
 
WordPressプラグイン Jetpack って何だ?!
WordPressプラグイン Jetpack って何だ?!WordPressプラグイン Jetpack って何だ?!
WordPressプラグイン Jetpack って何だ?!Yuji Nojima
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeomantomo_masakura
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るYoshio Hanawa
 
WordPress 多言語化プラグインqTranslateの紹介
WordPress 多言語化プラグインqTranslateの紹介WordPress 多言語化プラグインqTranslateの紹介
WordPress 多言語化プラグインqTranslateの紹介Takashi Uemura
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようcharsbar
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するYoshio Hanawa
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansaiHisateru Tanaka
 
WordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみたWordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみたYuji Nojima
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由Kenichi Mukai
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSTomoki Hasegawa
 
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜Keisuke Utsumi
 
〜laravel で学ぶ MVC
 〜laravel で学ぶ MVC 〜laravel で学ぶ MVC
〜laravel で学ぶ MVCmikakane
 
PHP7はなぜ速いのか
PHP7はなぜ速いのかPHP7はなぜ速いのか
PHP7はなぜ速いのかYoshio Hanawa
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るinfinite_loop
 

What's hot (20)

WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪
WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪
WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪
 
BuddyPressで街のポータルサイトを作ろう
BuddyPressで街のポータルサイトを作ろうBuddyPressで街のポータルサイトを作ろう
BuddyPressで街のポータルサイトを作ろう
 
SWF LOVE (ASを使わないFlash勉強会 #1)
SWF LOVE (ASを使わないFlash勉強会 #1)SWF LOVE (ASを使わないFlash勉強会 #1)
SWF LOVE (ASを使わないFlash勉強会 #1)
 
SWF LOVE (ASを使わないFlash勉強会)
SWF LOVE (ASを使わないFlash勉強会)SWF LOVE (ASを使わないFlash勉強会)
SWF LOVE (ASを使わないFlash勉強会)
 
Wp プラグインapiから理解するword press.share
Wp プラグインapiから理解するword press.shareWp プラグインapiから理解するword press.share
Wp プラグインapiから理解するword press.share
 
WordPressプラグイン Jetpack って何だ?!
WordPressプラグイン Jetpack って何だ?!WordPressプラグイン Jetpack って何だ?!
WordPressプラグイン Jetpack って何だ?!
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
 
WordPress 多言語化プラグインqTranslateの紹介
WordPress 多言語化プラグインqTranslateの紹介WordPress 多言語化プラグインqTranslateの紹介
WordPress 多言語化プラグインqTranslateの紹介
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみよう
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
WordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみたWordPress プラグイン Infinite Scroll を試してみた
WordPress プラグイン Infinite Scroll を試してみた
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
 
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
 
〜laravel で学ぶ MVC
 〜laravel で学ぶ MVC 〜laravel で学ぶ MVC
〜laravel で学ぶ MVC
 
PHP7はなぜ速いのか
PHP7はなぜ速いのかPHP7はなぜ速いのか
PHP7はなぜ速いのか
 
PHPNGの動向
PHPNGの動向PHPNGの動向
PHPNGの動向
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作る
 

Viewers also liked

Go言語
Go言語Go言語
Go言語na_o_ys
 
Ne the god_of_religion_of_islam
Ne the god_of_religion_of_islamNe the god_of_religion_of_islam
Ne the god_of_religion_of_islamLoveofpeople
 
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēmaValsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēmaPārresoru kordinācijas centrs (PKC)
 
這一打‧好貴
這一打‧好貴這一打‧好貴
這一打‧好貴fudy9015
 
Trabajo colaborativo list
Trabajo colaborativo listTrabajo colaborativo list
Trabajo colaborativo listKaterin Colcha
 
The Monthly Lekhapara, July 2015
The Monthly Lekhapara, July 2015The Monthly Lekhapara, July 2015
The Monthly Lekhapara, July 2015Shahida Akhter
 
جای خالی مدیر ارشد برند در شرکت های ایرانی
جای خالی مدیر ارشد برند در شرکت های ایرانیجای خالی مدیر ارشد برند در شرکت های ایرانی
جای خالی مدیر ارشد برند در شرکت های ایرانیrezamahdavi1980
 
Unit 2: NUTRITION
Unit 2: NUTRITIONUnit 2: NUTRITION
Unit 2: NUTRITIONalfonsodios
 
Plan clases ingles orinson valenciano
Plan clases ingles orinson valencianoPlan clases ingles orinson valenciano
Plan clases ingles orinson valencianoorinsonvalenciano11c
 
Presentación de Servicios Prevengest
Presentación de Servicios PrevengestPresentación de Servicios Prevengest
Presentación de Servicios PrevengestXavier Fillol de Blas
 
Kauno miesto savivaldybės 100 dienų ataskaita
Kauno miesto savivaldybės 100 dienų ataskaitaKauno miesto savivaldybės 100 dienų ataskaita
Kauno miesto savivaldybės 100 dienų ataskaitaKauno_miesto_savivaldybe
 
[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in China[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in ChinaSeungmin Shin
 
Barometro kayak-2013
Barometro kayak-2013Barometro kayak-2013
Barometro kayak-2013David Mora
 
Php basics
Php basicsPhp basics
Php basicshamfu
 

Viewers also liked (19)

מחדד 05.03
מחדד 05.03מחדד 05.03
מחדד 05.03
 
Go言語
Go言語Go言語
Go言語
 
Ne the god_of_religion_of_islam
Ne the god_of_religion_of_islamNe the god_of_religion_of_islam
Ne the god_of_religion_of_islam
 
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēmaValsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma
 
這一打‧好貴
這一打‧好貴這一打‧好貴
這一打‧好貴
 
Trabajo colaborativo list
Trabajo colaborativo listTrabajo colaborativo list
Trabajo colaborativo list
 
The Monthly Lekhapara, July 2015
The Monthly Lekhapara, July 2015The Monthly Lekhapara, July 2015
The Monthly Lekhapara, July 2015
 
جای خالی مدیر ارشد برند در شرکت های ایرانی
جای خالی مدیر ارشد برند در شرکت های ایرانیجای خالی مدیر ارشد برند در شرکت های ایرانی
جای خالی مدیر ارشد برند در شرکت های ایرانی
 
Unit 2: NUTRITION
Unit 2: NUTRITIONUnit 2: NUTRITION
Unit 2: NUTRITION
 
Plan clases ingles orinson valenciano
Plan clases ingles orinson valencianoPlan clases ingles orinson valenciano
Plan clases ingles orinson valenciano
 
Presentación de Servicios Prevengest
Presentación de Servicios PrevengestPresentación de Servicios Prevengest
Presentación de Servicios Prevengest
 
Kauno miesto savivaldybės 100 dienų ataskaita
Kauno miesto savivaldybės 100 dienų ataskaitaKauno miesto savivaldybės 100 dienų ataskaita
Kauno miesto savivaldybės 100 dienų ataskaita
 
Philomena Detailed CV
Philomena Detailed CVPhilomena Detailed CV
Philomena Detailed CV
 
[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in China[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in China
 
Retallos 2008
Retallos 2008Retallos 2008
Retallos 2008
 
20120319 aws meister-reloaded-s3
20120319 aws meister-reloaded-s320120319 aws meister-reloaded-s3
20120319 aws meister-reloaded-s3
 
Barometro kayak-2013
Barometro kayak-2013Barometro kayak-2013
Barometro kayak-2013
 
Decalogue 1st Day
Decalogue 1st DayDecalogue 1st Day
Decalogue 1st Day
 
Php basics
Php basicsPhp basics
Php basics
 

Similar to Chrome-eject がこの先生きのこるには

Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersTakeshi Arabiki
 
AmazonElasticBeanstalk
AmazonElasticBeanstalkAmazonElasticBeanstalk
AmazonElasticBeanstalkTaisuke Oe
 
Pinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiPinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiHisateru Tanaka
 
Cake Matsuri Nanapi
Cake Matsuri NanapiCake Matsuri Nanapi
Cake Matsuri NanapiShuichi Wada
 
自分用プラグインのススメ
自分用プラグインのススメ自分用プラグインのススメ
自分用プラグインのススメHidetaka Okamoto
 
HTML5ハイブリッド アプリ開発実践編
HTML5ハイブリッド アプリ開発実践編HTML5ハイブリッド アプリ開発実践編
HTML5ハイブリッド アプリ開発実践編Monaca
 
レンタルサーバで今すぐ始めるWEB開発
レンタルサーバで今すぐ始めるWEB開発レンタルサーバで今すぐ始めるWEB開発
レンタルサーバで今すぐ始めるWEB開発Naoyuki Kataoka
 
せっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜせっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜNaruto TAKAHASHI
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-Masashi Shinbara
 
coma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworkscoma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworksAtsushi Tadokoro
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール WeinerをつかってみたMasakazu Muraoka
 
smartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用についてsmartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用について剛志 森田
 
Arduino を PHP で制御する
Arduino を PHP で制御するArduino を PHP で制御する
Arduino を PHP で制御するKenichi Ahagon
 
なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇Kenta USAMI
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Yusuke Wada
 
あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)Hiroyuki Ishiyama
 
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools KnowledgeShinobu Okano
 

Similar to Chrome-eject がこの先生きのこるには (20)

Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
 
AmazonElasticBeanstalk
AmazonElasticBeanstalkAmazonElasticBeanstalk
AmazonElasticBeanstalk
 
Pinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiPinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansai
 
Gopenflow demo v1
Gopenflow demo v1Gopenflow demo v1
Gopenflow demo v1
 
Cake Matsuri Nanapi
Cake Matsuri NanapiCake Matsuri Nanapi
Cake Matsuri Nanapi
 
自分用プラグインのススメ
自分用プラグインのススメ自分用プラグインのススメ
自分用プラグインのススメ
 
HTML5ハイブリッド アプリ開発実践編
HTML5ハイブリッド アプリ開発実践編HTML5ハイブリッド アプリ開発実践編
HTML5ハイブリッド アプリ開発実践編
 
レンタルサーバで今すぐ始めるWEB開発
レンタルサーバで今すぐ始めるWEB開発レンタルサーバで今すぐ始めるWEB開発
レンタルサーバで今すぐ始めるWEB開発
 
せっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜせっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜ
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
coma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworkscoma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworks
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
 
smartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用についてsmartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用について
 
Arduino を PHP で制御する
Arduino を PHP で制御するArduino を PHP で制御する
Arduino を PHP で制御する
 
なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
 
Word bench7月号
Word bench7月号Word bench7月号
Word bench7月号
 
あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)
 
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools Knowledge
 

More from Yosuke HASEGAWA

次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)Yosuke HASEGAWA
 
JavaScript難読化読経
JavaScript難読化読経JavaScript難読化読経
JavaScript難読化読経Yosuke HASEGAWA
 
ES6時代におけるWeb開発者とセキュリティ業界の乖離
ES6時代におけるWeb開発者とセキュリティ業界の乖離ES6時代におけるWeb開発者とセキュリティ業界の乖離
ES6時代におけるWeb開発者とセキュリティ業界の乖離Yosuke HASEGAWA
 
他人事ではないWebセキュリティ
他人事ではないWebセキュリティ他人事ではないWebセキュリティ
他人事ではないWebセキュリティYosuke HASEGAWA
 
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript APIHTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript APIYosuke HASEGAWA
 
Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014
Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014
Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014Yosuke HASEGAWA
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見Yosuke HASEGAWA
 
WindowsユーザのためのはじめてのPerlプログラミング
WindowsユーザのためのはじめてのPerlプログラミングWindowsユーザのためのはじめてのPerlプログラミング
WindowsユーザのためのはじめてのPerlプログラミングYosuke HASEGAWA
 

More from Yosuke HASEGAWA (8)

次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)
 
JavaScript難読化読経
JavaScript難読化読経JavaScript難読化読経
JavaScript難読化読経
 
ES6時代におけるWeb開発者とセキュリティ業界の乖離
ES6時代におけるWeb開発者とセキュリティ業界の乖離ES6時代におけるWeb開発者とセキュリティ業界の乖離
ES6時代におけるWeb開発者とセキュリティ業界の乖離
 
他人事ではないWebセキュリティ
他人事ではないWebセキュリティ他人事ではないWebセキュリティ
他人事ではないWebセキュリティ
 
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript APIHTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
 
Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014
Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014
Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
 
WindowsユーザのためのはじめてのPerlプログラミング
WindowsユーザのためのはじめてのPerlプログラミングWindowsユーザのためのはじめてのPerlプログラミング
WindowsユーザのためのはじめてのPerlプログラミング
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

Chrome-eject がこの先生きのこるには

  • 2. Who am I ? はせがわようすけ • http://utf-8.jp/ • 顔文字でJavaScript書いたり • 顔文字で86バイナリ書いたり @hasegawayosuke http://utf-8.jp/
  • 5. Chrome-eject uses NPAPI NPAPI plugin • Netscape Plugin API • DLL形式でブラウザの機能を拡張 • Flash Player, Silverlight, ... • http://www.slideshare.net/TNaruto/npapi-26722229 NPAPI plugin in Chrome Extension • JavaScriptだけで出来ないことを実現 • Chrome拡張の制約を超えて何でも可能 • でもDLL書かないと… @hasegawayosuke http://utf-8.jp/
  • 6. NPWIN32 • 何度もDLL書くのイヤだ • 何でもできるNPAPI DLLを書いた • JSから任意のWin32APIを呼び出せる • PerlのWin32::APIみたいなもの @hasegawayosuke http://utf-8.jp/
  • 7. Chrome-eject uses NPAPI // manifest.json "plugins" : [ { "path" : "win32api.dll", "public" : false } ] // background.html <embed type="application/x-win32api-dynamic-call" id="p" hidden="true" /> var npwin32; var mciSendString; document.addEventListener( "DOMContentLoaded", function (){ chrome.browserAction.onClicked.addListener( function( tab ){ if( npwin32 === undefined ){ npwin32 = document.getElementById( "p" ); } if( mciSendString === undefined ){ mciSendString = npwin32.import( "winmm.dll", "DWORD mciSendStringW( LPCWSTR, DWORD, UINT, DWORD )" ); } if( mciSendString){ var r = mciSendString( "set cdaudio door open", 0, 0, 0 ); } } ); } ); @hasegawayosuke http://utf-8.jp/
  • 8. NPWIN32 - callback // import DLL functions var EnumWindows = npwin32.import( "user32.dll", "BOOL EnumWindows( CALLBACK, DWORD )" ); var GetWindowText = npwin32.import( "user32.dll", "INT GetWindowTextW( DWORD, LPWSTR, INT )" ); // create CALLBACK object var func = npwin32.callback( function ( hwnd, lparam ){ var buf = new Array( 257 ).join( " " ); // space * 256 if( GetWindowText( hwnd, buf, 256 ) ){ alert( hwnd + " : " + GetwindowText.arg( 1 ) ); } }, "BOOL (DWORD, DWORD)" ); EnumWindows( func, 0 ); @hasegawayosuke http://utf-8.jp/
  • 9. “Goodbye to Our Friend NPAPI” @hasegawayosuke http://utf-8.jp/
  • 11. How do I eject without NPAPI? Native Messaging API @hasegawayosuke http://utf-8.jp/
  • 12. How do I eject without NPAPI? Native Messaging API • http://developer.chrome.com/extensions /messaging.html#native-messaging • Chrome拡張と実行ファイル間でstdioを通じて 通信できる • 事前にmanifestファイルをレジストリに登録 する必要がある • しかもHKLM! (☝ ՞ ՞)☝気軽にejectできない! @hasegawayosuke http://utf-8.jp/
  • 14. How do I eject without NPAPI? キタ━━━━(゚∀゚)━━━━ !!!!! @hasegawayosuke http://utf-8.jp/
  • 15. chrome.system.storage • ストレージデバイスの情報を取得 chrome.system.storage.getInfo( function( devices ){ console.log( devices ); } ); DVD-ROMデバイス え? fixed? @hasegawayosuke http://utf-8.jp/
  • 16. chrome.system.storage • とりあえずejectしてみる chrome.system.storage.getInfo( function( devices ){ devices.forEach( function( device ){ if( device.capacity == 0 ){ chrome.system.storage.ejectDevice( device.id, function ( result ){ console.log( result ); } ); } } ); } result === "failure" ); @hasegawayosuke http://utf-8.jp/
  • 17. chrome.system.storage • Chrome 30+ で使える(はず) • CD-ROMドライブでも ”removable” ではなく “fixed” が返ってくる • ejectDevice 失敗する (☝ ՞ ՞)☝やっぱりejectできない! @hasegawayosuke http://utf-8.jp/
  • 19. How do I eject ? • 拡張のなかにejectするWSHファイル(*.vbs)を 含めておく • chrome.downloads.download APIを使ってvbs をローカルにダウンロードさせる • chrome.downloads.open APIを使ってダウン ロードしたvbsファイルを実行する • うまくいけば eject 完了! @hasegawayosuke http://utf-8.jp/
  • 21. chrome.downloads var url = chrome.extension.getURL( "eject.vbs" ); chrome.downloads.download( { url : url, filename : "./" + url.replace( /^chrome-extension:///, "" ), conflictAction : "overwrite" }, function( id ){ if( id === undefined ) return; setTimeout( function(){ chrome.downloads.open( id ); chrome.downloads.erase( { id : id } ); }, 2000 ); } ); いまいち動きがおかしい。donloadのcallbackが呼ばれてすぐだとファ イルを開けないので2秒待ちを入れている @hasegawayosuke http://utf-8.jp/
  • 22. eject.vbs Dim Dim Dim Set Set wmp drives i wmp = CreateObject( "WMPlayer.OCX" ) drives = wmp.cdromCollection For i = 0 To drives.Count - 1 drives.Item( i ).Eject Next @hasegawayosuke http://utf-8.jp/
  • 23. DEMO
  • 24. Conclusion - how to eject from Chrome Extension • NPAPIは今後使えない • Native MessagingはNPAPIほど気軽には使いに くい • chrome.system.storageはいまいちおかしい • chrome.downloadsはZoneIdつけてくれる • もう少し待てばもっとejectしやすくなるは ず! (☝ ՞ ՞)☝ウイーン Special Thanks to @Akkiesoft and Eject-command Users Group @hasegawayosuke http://utf-8.jp/