lep 2013-07-23

55

Click here to load reader

Upload: kmiyako

Post on 12-Nov-2014

4.855 views

Category:

Documents


0 download

DESCRIPTION

sample database posted on GitHub: https://github.com/miyako/4d-training-lep

TRANSCRIPT

Page 1: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS

Page 2: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS

Page 3: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS

4Dから別アプリケーションを起動するコマンド

Page 4: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS

C_TEXT($command)LAUNCH EXTERNAL PROCESS($command)

C_TEXT($in;$out;$err)LAUNCH EXTERNAL PROCESS($command;$in;$out;$err)

C_BLOB($in;$out;$err)LAUNCH EXTERNAL PROCESS($command;$in;$out;$err)

4Dから別アプリケーションを起動するコマンド同期モード 同期モード 同期モード

テキスト バイナリ

Page 5: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS

C_TEXT($command)LAUNCH EXTERNAL PROCESS($command)

C_TEXT($in;$out;$err)LAUNCH EXTERNAL PROCESS($command;$in;$out;$err)

C_BLOB($in;$out;$err)LAUNCH EXTERNAL PROCESS($command;$in;$out;$err)

4Dから別アプリケーションを起動するコマンド同期モード 同期モード 同期モード

TEXT バイナリ

Page 6: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS

C_TEXT($command)LAUNCH EXTERNAL PROCESS($command)

C_TEXT($in;$out;$err)LAUNCH EXTERNAL PROCESS($command;$in;$out;$err)

C_BLOB($in;$out;$err)LAUNCH EXTERNAL PROCESS($command;$in;$out;$err)

4Dから別アプリケーションを起動するコマンド同期モード 同期モード 同期モード

TEXT BLOB

Page 7: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS

C_TEXT($command)LAUNCH EXTERNAL PROCESS($command)

C_TEXT($in;$out;$err)LAUNCH EXTERNAL PROCESS($command;$in;$out;$err)

C_BLOB($in;$out;$err)LAUNCH EXTERNAL PROCESS($command;$in;$out;$err)

4Dから別アプリケーションを起動するコマンド同期モード 同期モード 同期モード

TEXT BLOB

Page 8: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

LAUNCH EXTERNAL PROCESS("C:\\WINDOWS\\notepad.exe")

Page 9: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

LAUNCH EXTERNAL PROCESS("C:\\WINDOWS\\notepad.exe")NG!!

Page 10: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

LAUNCH EXTERNAL PROCESS("C:\\WINDOWS\\notepad.exe")NG!!

LAUNCH EXTERNAL PROCESS("cmd.exe /C start \"\" "+\"C:\\WINDOWS\\notepad.exe")

OK!!

Page 11: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

LAUNCH EXTERNAL PROCESS("C:\\WINDOWS\\notepad.exe")NG!!

LAUNCH EXTERNAL PROCESS("cmd.exe /C start \"\" "+\"C:\\WINDOWS\\notepad.exe")

OK!!

http://technet.microsoft.com/en-us/library/bb491005.aspx

Page 12: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

$path:=System folder(Applications or Program Files)+"Calculator.app"$path:=Convert path system to POSIX($path)+/"Contents/MacOS/Calculator"

LAUNCH EXTERNAL PROCESS($path)

Page 13: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

$path:=System folder(Applications or Program Files)+"Calculator.app"$path:=Convert path system to POSIX($path)+/"Contents/MacOS/Calculator"

LAUNCH EXTERNAL PROCESS($path)

NG!!

Page 14: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/open.1.html

LAUNCH EXTERNAL PROCESS("open "+\"/Applications/Calculator.app")

Page 15: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/open.1.html

LAUNCH EXTERNAL PROCESS("open "+\"/Applications/Calculator.app")

POSIX path

Page 16: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/open.1.html

LAUNCH EXTERNAL PROCESS("open "+\"/Applications/Calculator.app")

LAUNCH EXTERNAL PROCESS("open -a "+\"Calculator")

POSIX path

Page 17: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/open.1.html

LAUNCH EXTERNAL PROCESS("open "+\"/Applications/Calculator.app")

LAUNCH EXTERNAL PROCESS("open -a "+\"Calculator")

LAUNCH EXTERNAL PROCESS("open -b "+\"com.apple.calculator")

POSIX path

Page 18: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

$path:=Convert path system to POSIX($path)OK!!

Page 19: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

$path:=Convert path system to POSIX($path)OK!!

$path:=Convert path system to POSIX($path;*)NG!!

Page 20: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSプログラム起動

$path:=Convert path system to POSIX($path)OK!!

$path:=Convert path system to POSIX($path;*)NG!!

パーセントエンコーディング(URL)

Page 21: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSエスケープ

$argument:=Convert path system to POSIX($path)

Page 22: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSエスケープ

$argument:=Convert path system to POSIX($path)

$metacharacters:="\\!\"#$%&'()=~|<>?;*`[] "

For ($i;1;Length($metacharacters)) $metacharacter:=Substring($metacharacters;$i;1) $argument:=Replace string($argument;$metacharacter;"\\"+\ $metacharacter;*)End for

Page 23: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSエスケープ

$shoudQuote:=False

$metacharacters:="&|<>()%^\" "

$len:=Length($metacharacters)

For ($i;1;$len) $metacharacter:=Substring($metacharacters;$i;1) $shoudQuote:=$shoudQuote|(Position($metacharacter;\ $argument;*)#0) If ($shoudQuote) $i:=$len End if End for

Page 24: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSエスケープ

If ($shoudQuote) If (Substring($argument;Length($argument))="\\") $argument:="\""+$argument+"\\\"" Else $argument:="\""+$argument+"\"" End if End if

Page 25: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSエスケープ

If ($shoudQuote) If (Substring($argument;Length($argument))="\\") $argument:="\""+$argument+"\\\"" Else $argument:="\""+$argument+"\"" End if End if

最後の文字が\だった場合(例: パス)エスケープをエスケープしないようにその文字をエスケープする

Page 26: Lep 2013-07-23

環境変数

• _4D_OPTION_CURRENT_DIRECTORY

• _4D_OPTION_HIDE_CONSOLE

• _4D_OPTION_BLOCKING_EXTERNAL_PROCESS

SET ENVIRONMENT VARIABLE

PHP Execute, _o_SET CGI EXECUTABLE

Page 27: Lep 2013-07-23

環境変数

• _4D_OPTION_CURRENT_DIRECTORY

• _4D_OPTION_HIDE_CONSOLE

• _4D_OPTION_BLOCKING_EXTERNAL_PROCESS

SET ENVIRONMENT VARIABLE

システムパスでカレントディレクトリを指定一部のプログラムは長いパスや空白が含まれるパスに対応していない

Page 28: Lep 2013-07-23

環境変数

• _4D_OPTION_CURRENT_DIRECTORY

• _4D_OPTION_HIDE_CONSOLE

• _4D_OPTION_BLOCKING_EXTERNAL_PROCESS

SET ENVIRONMENT VARIABLE

DOSのコンソールウィンドウを表示せずにコマンドを実行する

Page 29: Lep 2013-07-23

環境変数

• _4D_OPTION_CURRENT_DIRECTORY

• _4D_OPTION_HIDE_CONSOLE

• _4D_OPTION_BLOCKING_EXTERNAL_PROCESS

SET ENVIRONMENT VARIABLE

非同期モードで外部プログラムを起動したいとき

Page 30: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSバッチファイル起動

Page 31: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSバッチファイル起動

LAUNCH EXTERNAL PROCESS("cmd.exe /C start /B "+\"toto.bat")

Page 32: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSショートカット起動

LAUNCH EXTERNAL PROCESS("cmd.exe /C "+\"toto.lnk")

LAUNCH EXTERNAL PROCESS("cmd.exe /C start /B "+\"toto.bat")

Page 33: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSコンソールアプリケーション起動

LAUNCH EXTERNAL PROCESS("cmd.exe /C start "+\"toto.exe")

LAUNCH EXTERNAL PROCESS("cmd.exe /C "+\"toto.lnk")

LAUNCH EXTERNAL PROCESS("cmd.exe /C start /B "+\"toto.bat")

Page 34: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSコンソールアプリケーション起動

LAUNCH EXTERNAL PROCESS("cmd.exe /C start "+\"toto.exe")

LAUNCH EXTERNAL PROCESS("cmd.exe /C start \"\" "+\"C:\\WINDOWS\\notepad.exe")

比較

LAUNCH EXTERNAL PROCESS("cmd.exe /C "+\"toto.lnk")

LAUNCH EXTERNAL PROCESS("cmd.exe /C start /B "+\"toto.bat")

Page 35: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSシェルスクリプト起動

Page 36: Lep 2013-07-23

LAUNCH EXTERNAL PROCESSシェルスクリプト起動

LAUNCH EXTERNAL PROCESS("/bin/sh "+\"toto.sh")

Page 37: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS

http://sources.4d.com/trac/4d_keisuke/wiki/Components

Open JTalk 日本語テキスト音声合成

7-Zip ファイルの圧縮・展開

cURL ネットワーク・クライアント

NKF 漢字コード変換

Page 38: Lep 2013-07-23

osascript

https://developer.apple.com/library/mac/#documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html

オープン・スクリプティング・アーキテクチャ

ファイルコンパイルされたスクリプト(.scpt)

ファイル標準テキスト(.as, .applescript)

Page 39: Lep 2013-07-23

osascript

https://developer.apple.com/library/mac/#documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html

オープン・スクリプティング・アーキテクチャ

ファイルコンパイルされたスクリプト(.scpt)

ファイル標準テキスト(.as, .applescript)

Page 40: Lep 2013-07-23

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/osascript.1.html#//apple_ref/doc/man/1/osascript

-e 1行のステートメント

-l 標準テキストをコンパイルするときのスクリプト言語

- 標準入力(stdIn)からスクリプトを受け取る

-s 出力スタイル(e, h, o, s)

osascript

Page 41: Lep 2013-07-23

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/osascript.1.html#//apple_ref/doc/man/1/osascript

-e 1行のステートメント

-l 標準テキストをコンパイルするときのスクリプト言語

- 標準入力(stdIn)からスクリプトを受け取る

-s 出力スタイル(e, h, o, s)

osascript

Page 42: Lep 2013-07-23

Convert to text

CONVERT FROM TEXT

UTF-8

エンコーディング

AppleScript

Page 43: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS("osascript "+$path;\$in;$out;$err)

AppleScript

Page 44: Lep 2013-07-23

script parameters! to argument(variableName)! ! return do shell script ("iconv -f UTF-8 -t UTF-16|echo " & "$" & variableName)! end argumentend script

環境変数

AppleScript

Page 45: Lep 2013-07-23

cscript

http://technet.microsoft.com/ja-jp/library/bb490887.aspx

コマンドライン・スクリプティング・ホスト

言語

VBScript(.vbs)

言語 JScript(.js)言語

Windows Scripting File(.wsf)

Page 46: Lep 2013-07-23

cscript

http://technet.microsoft.com/ja-jp/library/bb490887.aspx

コマンドライン・スクリプティング・ホスト

言語

VBScript(.vbs)

言語 JScript(.js)言語

Windows Scripting File(.wsf)

Page 47: Lep 2013-07-23

cscript

http://technet.microsoft.com/ja-jp/library/bb490816.aspx

//B バッチ・モードで開始する

//D デバッガを起動する

//E: engine スクリプト言語を指定する

//H:cscript cscriptをデフォルトのホストに設定する

//H:wscript wscriptをデフォルトのホストに設定する

//I インタラクティブ・モードで開始する

//Job: xxxx .wsfファイル内の指定したジョブを実行する

//Logo 起動時のバナー・メッセージを表示する

//Nologo 起動時のバナー・メッセージを表示しない

//S コマンドプロンプト・オプションをセーブする

//T: nnnnn タイムアウトを設定する(単位: 秒)

//U Unicodeで入出力する

//X デバッガで開始する

//? ヘルプを表示する

Page 48: Lep 2013-07-23

cscript

http://technet.microsoft.com/ja-jp/library/bb490816.aspx

//B バッチ・モードで開始する

//D デバッガを起動する

//E: engine スクリプト言語を指定する

//H:cscript cscriptをデフォルトのホストに設定する

//H:wscript wscriptをデフォルトのホストに設定する

//I インタラクティブ・モードで開始する

//Job: xxxx .wsfファイル内の指定したジョブを実行する

//Logo 起動時のバナー・メッセージを表示する

//Nologo 起動時のバナー・メッセージを表示しない

//S コマンドプロンプト・オプションをセーブする

//T: nnnnn タイムアウトを設定する(単位: 秒)

//U Unicodeで入出力する

//X デバッガで開始する

//? ヘルプを表示する

Page 49: Lep 2013-07-23

SET ENVIRONMENT VARIABLE("_4D_OPTION_HIDE_CONSOLE";"true")LAUNCH EXTERNAL PROCESS("cscript //Nologo //U "+$path;\$in;$out;$err)

cscript

Page 50: Lep 2013-07-23

Convert to text

CONVERT FROM TEXT

UTF-16LEリトルエンディアン

エンコーディング

VBScript

Page 51: Lep 2013-07-23

VBScript

Function GETENV(variableName)!! Set objWshShell = WScript.CreateObject("WScript.Shell")! Set WshSysEnv = objWshShell.Environment("PROCESS")! GETENV = WshSysEnv(variableName)! Set objWshShell = Nothing

end Function

環境変数

Page 52: Lep 2013-07-23

VBScript

明示的に型変換CBool ブール型

CByte バイト型

CCur 通貨型

CDate 日付型

CDbl 倍精度浮動小数点実数型

CInt 整数型

CLng 長整数型

CSng 単精度浮動小数点実数型

CStr 文字列型

環境変数

Page 53: Lep 2013-07-23

VBScript

明示的に型変換CBool ブール型

CByte バイト型

CCur 通貨型

CDate 日付型

CDbl 倍精度浮動小数点実数型

CInt 整数型

CLng 長整数型

CSng 単精度浮動小数点実数型

CStr 文字列型

環境変数

Page 54: Lep 2013-07-23

VBScript

Set ObjSpVoice!! ! ! = CreateObject("SAPI.SpVoice")ObjSpVoice.Rate ! ! ! = CLng(GETENV("SPEAK_RATE"))ObjSpVoice.Volume ! ! = CLng(GETENV("SPEAK_VOLUME"))

ObjSpVoice.Speak GETENV("SPEAK_MESSAGE")

環境変数

Page 55: Lep 2013-07-23

LAUNCH EXTERNAL PROCESS