// バージョン:1.05 // 公開日 :2004.12.28 // 連絡先 :siteCTS // 動作に必要なもの:田楽DLL $mac = macrodir + "\\Nepo105.mac"; //本体ファイルのパス $ini = macrodir + "\\Nepo105.ini"; //設定ファイルのパス //パス設定を変更する時は、本体マクロも同時に修正する必要があります。 //マクロ開始 call initialize; //マクロ終了 ////// &0 ■ メイン関数群 ■ ////// 基本的に上から下へ実行 // &I initialize 初期化と設定の取得 // initialize: #version = 105; enabledraw; //田楽DLLロード loaddll hidemarudir + "\\DengakuDLL.dll"; if (!result) call error "田楽DLLのロードに失敗しました。\n" + hidemarudir +" に DengakuDLL.dll があるか確認してください。"; else if (val(leftstr(dllfuncstr("GETVERSION"), 1)) < 2) call error "このマクロの実行には Ver.2.00 以降の田楽DLLが必要です。\n最新版の田楽DLLは http://www.ceres.dti.ne.jp/~sugiura/ から入手できます。"; else if (!existfile($mac)) { message $mac + " が見つかりません。\n環境設定マクロを編集して修正してください。"; goto exit; } else if (existfile($ini)) #fastContact = 0; else #fastContact = 1; //初回起動 //ダイアログタイトル $title = "文字列からファイルを開くマクロの設定"; //ダイアログの横幅 #width = 100; //通知コード #notifyGeneral = 100; #notifyExtension = #notifyGeneral +100; #notifyApps = #notifyExtension +100; #notifyReplacePath = #notifyApps +100; #notifyReplaceWebPath = #notifyReplacePath +100; #notifyAbout = #notifyReplaceWebPath +100; #notifyAppendix = #notifyAbout +100; #notifyHelp = 1000; //通知コードの初期値 #notifyHelpBegin = #notifyHelp; //ダイアログループ用に初期値を保存 goto helpDifinition; return; //initialize.end // &H helpDifinition ヘルプ定義 // helpDifinition: ##i = 0; $help[##i] = "■環境変数を展開する\n\n"+ "%windir% などの環境変数を展開します。展開できない時はそのままにしておきます。\n"+ "弊害として、 ./index.cgi?query=%20%2C%5C などで、たまたま合致するものがあると展開してしまいます。\n\n"+ "ちなみに環境変数は、マイコンピュータのプロパティ→詳細設定→環境変数みたいな手順で設定します。(2000/XPの場合)"; ##i = ##i +1; $help[##i] = "■パスを強制認識する\n\n"+ "この設定を有効にすると、\n"+ " ・取得文字列に http:// https:// ftp:// か、C:\\ などのドライブ名が含まれている\n"+ " ・または ./ か ../ が含まれている\n"+ " ・それらの文字が先頭にない(途中に混じっている)\n"+ "上記の条件を満たした時、\n"+ " ・パスを強制認識する\n"+ " ・取得したままのパスで認識する\n"+ "を選ぶメニューが出ます。\n\n"+ "前者は、たとえば箇条書きで ◎http://〜 とあった場合など、先頭の記号まで拾っちゃってる時に選びます。\n"+ "後者は、 ./index.cgi?url=http://〜 みたいなパスの時に選びます。\n\n"+ "※強制認識のプロセスは単純なので、間違えるケースがあるかも。"; ##i = ##i +1; $help[##i] = "■フォルダを開くメニューを追加\n\n"+ "この設定を有効にすると、メニューに「フォルダを開く」が現れます。\n"+ "取得したパスをフォルダのパスに整形して、ファイラのメニューを出します。"; ##i = ##i +1; $help[##i] = "■他のファイルを選ぶメニューを追加\n\n"+ "この設定を有効にすると、メニューに「他のファイルを開く」が現れます。\n"+ "ファイル選択ダイアログから選ぶと、拡張子に応じたメニューが再表示されます。\n\n"+ "用途としては、たとえば \"../folder/file.txt\" から ../folder/ にある他のファイルを開いたりできます。\n"+ "また、 から ../folder/index.html を開いたりもできます。\n\n"+ "※キーボードから使う時は Shift+Tab でファイル一覧にフォーカスが移るので参考までに。"; ##i = ##i +1; $help[##i] = "■取得文字列がない時はカレントフォルダを対象にする\n\n"+ "空の行で実行した時など、取得文字列がゼロだった場合は、現在編集中のファイルがあるフォルダを対象にします。\n"+ "この設定が適用されても特にメッセージが出てくるわけではないので、混乱しないようご注意を。"; ##i = ##i +1; $help[##i] = "■ログファイルを出力する\n\n"+ "最後に実行された回のログを指定ファイルへ出力します。\n"+ "基本的に自分のデバッグ用ですが、うまく動かない時は見てみてると解決の参考にもなる…かも。\n"+ "同じファイル名があると強制上書きするので注意してください。\n"+ "ちなみに、ファイル生成は writeinistr を使った擬似的なものです。"; ##i = ##i +1; $help[##i] = "■環境設定の起動キーワード\n\n"+ "取得した文字がキーワードと一致すると、この設定ダイアログを開きます。\n"+ "この環境設定マクロにマクロの登録数を費やさずにすみます。\n"+ "この機能を使わない時は欄を空にしてください。初期値は envset です。\n\n"+ "キーワードは、前後に半角スペース・タブ・改行を置くか、\" \" で囲んでおくと確実に取得できます。"; ##i = ##i +1; $help[##i] = "■パスではなかった時に指定したマクロを実行する\n\n"+ "取得した文字列がパスではなかった時に、指定したマクロを実行します。\n"+ "たとえば関数検索マクロ等を設定しておいて、わざとパス以外のところで実行する…といった用途に使えます。\n\n"+ "マクロファイルが秀丸指定のマクロフォルダにある場合は、ファイル名だけでOKです。\n"+ "パスはマクロフォルダである必要はありません。どこにあるファイルでも(マクロであれば)登録できます。\n"+ "また、選択範囲の扱いは左の設定が適用されます。範囲選択が影響するマクロの場合は設定を調整してください。\n\n"+ "※処理が正常終了した時・処理を中止した時は、この設定は無視されます。"; ##i = ##i +1; $help[##i] = "■処理が正常終了した時も左の設定に従う\n\n"+ "パスからファイルを開くなりして、処理が正常終了した時も左の選択範囲設定に従います。\n"+ "チェックを外すと「選択範囲を解除する」になります。\n\n"+ "※「パスではなかった時に指定したマクロを実行する」の設定は無視されます。"; ##i = ##i +1; $help[##i] = "■処理を中止した時も左の設定に従う\n\n"+ "メニューのキャンセルなど、処理が中止された時も左の選択範囲設定に従います。\n"+ "チェックを外すと「選択範囲を解除する」になります。\n\n"+ "※「パスではなかった時に指定したマクロを実行する」の設定は無視されます。"; ##i = ##i +1; //拡張子 $help[##i] = "取得したパスの拡張子を判別し、それぞれのアプリケーションで開きます。\n"+ "拡張子は半角スペースで区切って列挙してください。(ピリオドを入れちゃダメ)\n"+ "「関連付けに従う拡張子」は、システムの関連付けに従います。\n\n"+ "設定が重複してる時は、上のものほど優先されます。\n"+ "欄を空にすると初期設定になります。\n\n"+ "※欄には改行が入力できますが、改行以降は無視されます。"; ##i = ##i +1; $help[##i] = "■すべてのファイルで関連付けに従う\n\n"+ "この設定を有効にすると、アプリケーションごとのメニューが出なくなります。(Webパス変換も無効になります)\n"+ "関連付けに従う追加メニューはデフォルトで出るので、通常はONにする必要はありません。\n\n\n"+ "■関連付けに従う時は追加メニューを出さない\n\n"+ "この設定を有効にすると、関連付けに従う時に\n"+ " ・拡張子があり、実際にそのファイルが存在する\n"+ " ・http:// https:// ftp:// で始まるネットワークパス\n"+ "のいずれかを満たすと、メニューを出さずに直で実行します。DLLだろうとEXEだろうとお構いなしです。\n"+ "ただし、[全般] タブの「パスを強制認識する」が適用された時など、メニューが出る時もあります。\n\n"+ "※このふたつの設定を同時に有効にすると手っ取り早くファイルを開けますが、このマクロの多くの機能が無効になります。"; ##i = ##i +1; $help[##i] = "■登録されてない拡張子は関連付けに従わせる\n\n"+ "上のリストにない拡張子だった時はシステムの関連付けに従うようにします。"; ##i = ##i +1; //アプリケーション $help[##i] = "ファイラ・エディタ・ブラウザ・画像ビューア・再生プレイヤーをそれぞれ10個まで登録できます。\n"+ // "登録をひとつだけにしておくと、メニューを出さずに直で実行します。(設定によって他の選択メニューが出ることもあります)\n"+ "アプリケーションと拡張子の関連付けは [拡張子] タブで設定してください。\n\n"+ "表示名の欄では「&英数字」でニモニック(ショートカットキー)を指定できます。\n"+ "パスの欄では環境変数が使えます。これは [全般] タブの「環境変数を展開する」の設定を無視します。\n"+ "■重要\n"+ " 起動オプションを指定する時は、空白の有無を問わずパスを \" \" でくくってください。\n"+ "  例:\"C:\\Apps\\ViX\\ViX.exe\" /v\n\n"+ "パスを渡して起動できるアプリケーションなら、色々応用できます。たとえば画像ビューアに Photoshop を登録とか。\n\n"+ "※途中に空欄を作っても構いません。ただし表示名とパスは必ずセットで。\n"+ "※パスの欄では改行が入力できますが、改行以降は無視されます。"; ##i = ##i +1; $help[##i] = "■メールアドレスを認識する\n\n"+ "なんでわざわざ有効にしないといけないかっつと、認識精度があまりよろしくないからです。\n"+ "マクロのもつ命令文では、文字列がメールアドレスか判別するのが難しいんです。(変数内で正規表現を使えれば…)\n"+ "でも \@ には対応してる変なマクロ。\n\n"+ "「プログラムのパス」にはメールソフトのパスを入れます。環境変数使用可で、\" \" でくくる必要もありません。(くくってもOK)\n"+ "「オプション」は、メールソフトに渡すコマンドラインを指定します。\n\n"+ "◆重要:\t$address$ は取得したメールアドレスに変換されます。\n"+ "\tmailto: が含まれる場合はは取り除かれますが、後ろに付いてる ?Subject=title 等はそのまま渡されます。\n\n"+ "※この設定を有効にすると、\n"+ " ・@ と . が含まれる\n"+ " ・半角空白と \\ と / が含まれない\n"+ " ・最後の . が @ より後ろにある\n"+ " が全部揃った時に、パスをメールアドレスと誤認識します。\n"+ " 誤認識する例 : \n\n"+ "※ \@ は、HTMLに書いてブラウザで表示してみるとわかります。( @ に化けます)"; ##i = ##i +1; //パス変換 $help[##i] = "■パス変換を適用する\n\n"+ "書式 : 変換対象のパス>変換後のパス[改行]\n\n"+ "取得したパスを別のパスへ変換します。基本的に自宅サーバーなどでエイリアスを設定している人向けの機能ですが、色々応用できます。\n"+ "変換は先頭からのマッチングです。途中の部分だけを変換することはできません。また、変換は他のどの設定よりも優先されます。\n\n"+ " 例:エイリアスパスが /alias/ で、実際のパスが D:/My Documents/Web/エイリアス/ の時、\n"+ "   /alias/image/ を D:/My Documents/Web/エイリアス/image/ に変換します。\n\n"+ "これを使うことで、 などにも柔軟に対応させることができます。(メニューも変換後のパスに応じて変化します)\n\n"+ "設定は1行ごとに「変換対象のパス>変換後のパス」という書式で書きます。(「左のパスを右のパスへ変換」と解釈するとわかりやすいかも)\n"+ "パスの区切りは / でも \\ でも構わないし、空白が入っても大丈夫です。変換後のパスなら > が入ってもOKです。\n"+ " 例: /alias/folder/>D:/My Documents/Web/エイリアス/folder/\n"+ "また、複数にマッチする時は、上の方が優先されます。\n"+ "[全般] タブの「環境変数を展開する」を有効にすれば、変換後のパスに環境変数も使えます。\n\n"+ "応用1:D:/Web/>http://server.ne.jp/~user/ にすると、Webフォルダ以下の時はサーバーパスに変換。\n"+ "応用2:$mydoc$>D:\\My Documents にすれば、このマクロ専用の環境変数みたいな。( % を使うとDOS環境変数と間違われるので注意)"; ##i = ##i +1; //Webパス変換 $help[##i] = "■Webパス変換を適用する\n\n"+ "書式 : 変換対象のパス>変換後のパス[改行]\n\n"+ "自宅サーバーをやってる人向けの機能で、取得したローカルのパスをWebのパスへ変換します。\n"+ "機能としては「パス変換」とほぼ同じですが、違う部分として\n"+ " ・[拡張子] タブの「エディタかブラウザを選択する拡張子」のファイル\n"+ " ・パスに ? や # のクエリ文字列がある時\n"+ "のみに適用され、マッチするものがあるとメニューに「Webパスに変換してブラウザで開く」が追加されます。\n"+ "これを使うと、CGIやXHTMLのような「サーバーを通さないとブラウザでプレビューできないファイル」に対応できます。\n"+ " とかで引数が合ってるか確認する時に便利。\n\n"+ " 例:ローカルパスが D:/My Documents/Web/ で、変換パスが http://server.ne.jp/~user/ の時、\n"+ "   D:/My Documents/Web/folder/index.cgi を http://server.ne.jp/~user/folder/index.cgi に変換します。\n\n"+ "設定は1行ごとに「ローカルパス>Webパス」という書式で書きます。(「左のパスを右のパスへ変換」と解釈するとわかりやすいかも)\n"+ "パスの区切りは / でも \\ でも構わないし、空白が入っても大丈夫です。\n"+ " 例: D:/My Documents/Web/>http://server.ne.jp/~user/\n"+ "また、複数にマッチする時は、上の方が優先されます。\n\n"+ "応用として、D:/My Documents/Web/file.html>http://server.ne.jp/~user/folder/index.html なんてこともできます。\n\n"+ "※ [パス変換] タブの設定が先に適用されることに気をつけてください。"; ##i = ##i +1; //検索パターン $help[##i] = "■検索パターン\n\n"+ "パス認識のアルゴリズムパターンを選択します。\n\n"+ "文末→文頭\n"+ "  カーソル位置から文末へ向かって区切り文字を検索し、続いて文頭へ向かって区切り文字を検索します。\n"+ "文頭→文末\n"+ "  逆です。\n\n"+ "この設定を変更すると、空白を含む時の動作が微妙に変わります。お好みで選んでください。"; ##i = ##i +1; goto createDialog; //helpDifinition.end // createDialog ダイアログの作成 // createDialog: call newTab "GeneralTab", #width -2; call createGeneralTab; call newTab "ExtensionTab", #width -2; call createExtensionTab; call newTab "AppsTab", #width -2; call createAppsTab; call newTab "ReplacePathTab", #width -2; call createReplacePathTab; call newTab "ReplaceWebPathTab", #width -2; call createReplaceWebPathTab; call newTab "AboutTab", #width -2; call createAboutTab; call newTab "AppendixTab", #width -2; call createAppendixTab; ##r = dllfunc("NEWDIALOG", $title, #width, ""); call createTab "tab1"; call setTab "GeneralTab", "全般"; call setTab "ExtensionTab", "拡張子"; call setTab "AppsTab", "アプリケーション"; call setTab "ReplacePathTab", "パス変換"; call setTab "ReplaceWebPathTab", "Webパス変換"; call setTab "AboutTab", "About"; call setTab "AppendixTab", "おまけ"; call lf 2; call width #width /3; ##r = dllfunc("NEWCONTROL", "okcancel", "", ""); call width #width /3; call setActiveTab "tab1", getininum($ini, "Envset", "CurrentPage"); ##r = dllfunc("SHOWDIALOG", hidemaruhandle(0), 1); goto dialogControl; return; //createDialog.end // &C dialogControl ダイアログコントロール // dialogControl: while (1) { $$notify = ""; while (!strlen($$notify)) $$notify = dllfuncstr("WAITCTRLNOTIFY", 100); ##n = val($$notify); if (##n == 0 || ##n == 1) { break; //ファイル検索 } else if (##n == #notifyGeneral +50) { call checked "FileSearch", -1; call enabled "SearchExt,SearchExtDefault", ##return; } else if (##n == #notifyGeneral +51) { call checked "SearchExtDefault", -1; call enabled "SearchExt", 1 - ##return; //終了処理 } else if (##n >= #notifyGeneral && ##n <= #notifyGeneral +99) { if (##n == #notifyGeneral) { //ログファイルパス欄の有効/無効 n00 call checked "LogMode", -1; call enabled "LogFile,LogFileRefBtn", ##return; if (##return) call message "この設定を有効にすると、このマクロが実行されるたびにログファイルを出力します。\nすでに同じ名前のファイルが存在する場合、\n\n\t強制上書き\n\nしますので、充分に注意してください。"; } else if (##n == #notifyGeneral +1) { //参照 n01 call refInsert "LogFileRefBtn", "LogFile", "100"; } else if (##n == #notifyGeneral +2) { //ログファイルを開く call value "LogFile"; if (existfile($$return)) { ##r = dllfunc("ENDDIALOG"); freedll; openfile $$return; endmacro; } else call message "ログファイルが見つかりません。\nパスを確認してください。"; } else if (##n == #notifyGeneral +3) { //終了マクロパス欄の有効/無効 n03 call checked "ExitExecMacro", -1; call enabled "ExitExecMacroFile,ExitExecMacroRefBtn", ##return; } else if (##n == #notifyGeneral +4) { //参照 n04 call refInsert "ExitExecMacroRefBtn", "ExitExecMacroFile", "100"; call cutMacroFolderPath $$return; call value "ExitExecMacroFile", $$return; } //拡張子 } else if (##n == #notifyExtension || ##n == #notifyExtension +1) { call checked "AllCorrelation", -1; ##ac = ##return; call checked "CorrelationNoMenu", -1; if (##ac && ##return) call message "・すべてのファイルで関連付けに従う\n・関連付けに従う時は追加メニューを出さない\n上記の設定を同時に有効にすると、このマクロの多くの機能が無効になります。"; //すべてのファイルで関連付けに従う if (##n == #notifyExtension) { call enabled "SelectExt,EditorExt,BrowserExt,ViewerExt,PlayerExt,CorrelationExt,OtherCorrelation", 1 - ##ac; call checked "ReplaceWebPath", -1; ##web = ##return; if (##ac) { call enabled "ReplaceWebPath,WebList", 0; //チェックとエディットを無効 call value "AllCorrelationInfo", "■この設定を有効にしたい時は [拡張子] タブの「すべてのファイルで関連付けに従う」を無効にしてください。"; } else { if (##web == 1) call enabled "ReplaceWebPath,WebList", 1; //チェックとエディットを有効 else call enabled "ReplaceWebPath", 1; //チェックのみ有効 call value "AllCorrelationInfo", " "; } } } else if (##n == #notifyExtension +2) { call checked "OtherCorrelation", -1; call enabled "CorrelationExt", 1 - ##return; //Apps参照 } else if (##n >= #notifyApps && ##n < #notifyApps +99) { if (##n >= #notifyApps && ##n < #notifyApps +9) call appRefInsert "Filer", ##n; //ファイラ n00〜n09 else if (##n >= #notifyApps +10 && ##n < #notifyApps +19) call appRefInsert "Editor", ##n; //エディタ n10〜n19 else if (##n >= #notifyApps +20 && ##n < #notifyApps +29) call appRefInsert "Browser", ##n; //ブラウザ n20〜n29 else if (##n >= #notifyApps +30 && ##n < #notifyApps +39) call appRefInsert "Viewer", ##n; //ビューア n30〜n39 else if (##n >= #notifyApps +40 && ##n < #notifyApps +49) call appRefInsert "Player", ##n; //プレイヤー n40〜n49 else if (##n == #notifyApps +50) { //メール有効/無効 call checked "Mailer", -1; call enabled "MailerPath,MailerRefBtn,MailerOption", ##return; } else if (##n == #notifyApps +51) { //メーラー参照 call refInsert "MailerRefBtn", "MailerPath", "100"; } //パス変換の有効チェックボックス } else if (##n == #notifyReplacePath) { call checked "ReplacePath", -1; call enabled "PathList", ##return; //Webパス変換の有効チェックボックス } else if (##n == #notifyReplaceWebPath) { call checked "ReplaceWebPath", -1; call enabled "WebList", ##return; //マクロ編集ボタン } else if (##n >= #notifyAppendix && ##n <= #notifyAppendix +2) { ##r = dllfunc("ENDDIALOG"); freedll; if (##n == #notifyAppendix) openfile $mac; else if (##n == #notifyAppendix +1) openfile filename; else if (##n == #notifyAppendix +2) { message "設定ファイルはわかる人以外は編集しちゃダメですよ。"; openfile $ini; } endmacro; //Windows起動時間 } else if (##n == #notifyAppendix +3) { ##tick = tickcount /1000; $$tick = "Windowsが起動してから" + str(##tick /60 /60) + "時間" + str(##tick /60 %60) + "分" + str(##tick %60) + "秒が経ちました。"; call message $$tick; //ヘルプ(4桁) } else if (##n >= #notifyHelpBegin && ##n < #notifyHelpBegin +100) { call message $help[##n - #notifyHelpBegin]; } } call saveEnvset ##n; return; //dialogControl.end // &S saveEnvset ■保存 // saveEnvset: //iniがない時にキャンセルしたら作らない if (##1 == 0 && #fastContact) //なぜ (!##1 && #fastContact) だと真になる? goto exit; //キャンセルしても今開いてるダイアログページは保存する writeininum $ini, "Envset", "Version", #version; writeinistr $ini, "Envset", "CurrentPage", dllfuncstr("GETCTRLSTATE", "tab1"); if (##1 != 1) //OKを押した時以外は保存しない goto exit; ##r = dllfunc("SETDLGTITLE", "設定を保存中..."); // 全般タブ // $$EnvExpand = dllfuncstr("GETCTRLSTATE", "EnvExpand"); //環境変数展開 $$FolderOpen = dllfuncstr("GETCTRLSTATE", "FolderOpen"); //フォルダを開く $$FileSelect = dllfuncstr("GETCTRLSTATE", "FileSelect"); //他のファイルを開く $$AbsMatchForced = dllfuncstr("GETCTRLSTATE", "AbsMatchForced"); //パスを強制認識 $$AltCurrentFolder = dllfuncstr("GETCTRLSTATE", "AltCurrentFolder"); //現在のファイルを対象 $$SearchPattern = str(val(dllfuncstr("GETCTRLSTATE", "SearchPattern")) -1); //検索パターン(アバウトタブ) //デバッグモード $$LogMode = dllfuncstr("GETCTRLSTATE", "LogMode"); $$LogFile = dllfuncstr("GETCTRLSTRING", "LogFile"); //終了処理 $$ExitSelect = dllfuncstr("GETCTRLSTATE", "ExitSelect"); $$ExitExecMacro = dllfuncstr("GETCTRLSTATE", "ExitExecMacro"); call lfleft dllfuncstr("GETCTRLSTRING", "ExitExecMacroFile"); $$ExitExecMacroFile = $$return; if ($$ExitExecMacroFile != "") { if (strstr($$ExitExecMacroFile, "\\") == -1) $$ExitExecMacroFile = macrodir + "\\" + $$ExitExecMacroFile; if (!existfile($$ExitExecMacroFile)) { call message $$ExitExecMacroFile + " が見つかりません。\n[全般] タブの「パスではなかった時に指定したマクロを実行する」の項目を修正してください。"; call setActiveTab "tab1", 1; goto dialogControl; } } $$OkSelect = dllfuncstr("GETCTRLSTATE", "OkSelect"); $$CancelSelect = dllfuncstr("GETCTRLSTATE", "CancelSelect"); //環境設定起動キーワード $$EnvsetKeyWord = dllfuncstr("GETCTRLSTRING", "EnvsetKeyword"); if ($$EnvsetKeyWord == "") //空白キーワードを指定 $$EnvsetKeyWord = "__EnvsetKeywordDisabled__"; // 拡張子タブ // call saveExtList "Select"; $$SelectExt = $$return; call saveExtList "Editor"; $$EditorExt = $$return; call saveExtList "Browser"; $$BrowserExt = $$return; call saveExtList "Viewer"; $$ViewerExt = $$return; call saveExtList "Player"; $$PlayerExt = $$return; call saveExtList "Correlation"; $$CorrelationExt = $$return; $$OtherCorrelation = dllfuncstr("GETCTRLSTATE", "OtherCorrelation"); $$AllCorrelation = dllfuncstr("GETCTRLSTATE", "AllCorrelation"); $$CorrelationNoMenu = dllfuncstr("GETCTRLSTATE", "CorrelationNoMenu"); //メーラー $$Mailer = dllfuncstr("GETCTRLSTATE", "Mailer"); $$MailerPath = dllfuncstr("GETCTRLSTRING", "MailerPath"); $$MailerOption = dllfuncstr("GETCTRLSTRING", "MailerOption"); //設定書込 $$key = "General"; writeinistr $ini, $$key, "EnvExpand", $$EnvExpand; writeinistr $ini, $$key, "FolderOpen", $$FolderOpen; writeinistr $ini, $$key, "FileSelect", $$FileSelect; writeinistr $ini, $$key, "AbsMatchForced", $$AbsMatchForced; writeinistr $ini, $$key, "AltCurrentFolder", $$AltCurrentFolder; writeinistr $ini, $$key, "LogMode", $$LogMode; writeinistr $ini, $$key, "LogFile", $$LogFile; writeinistr $ini, $$key, "ExitSelect", $$ExitSelect; writeinistr $ini, $$key, "ExitExecMacro", $$ExitExecMacro; writeinistr $ini, $$key, "ExitExecMacroFile", $$ExitExecMacroFile; writeinistr $ini, $$key, "OkSelect", $$OkSelect; writeinistr $ini, $$key, "CancelSelect", $$CancelSelect; writeinistr $ini, $$key, "EnvsetKeyword", $$EnvsetKeyWord; writeinistr $ini, $$key, "SearchPattern", $$SearchPattern; $$key = "ExtensionList"; writeinistr $ini, $$key, "SelectExt", $$SelectExt; writeinistr $ini, $$key, "EditorExt", $$EditorExt; writeinistr $ini, $$key, "BrowserExt", $$BrowserExt; writeinistr $ini, $$key, "ViewerExt", $$ViewerExt; writeinistr $ini, $$key, "PlayerExt", $$PlayerExt; writeinistr $ini, $$key, "CorrelationExt", $$CorrelationExt; writeinistr $ini, $$key, "OtherCorrelation", $$OtherCorrelation; writeinistr $ini, $$key, "AllCorrelation", $$AllCorrelation; writeinistr $ini, $$key, "CorrelationNoMenu", $$CorrelationNoMenu; // アプリケーションタブ // call saveApps "Filer"; call saveApps "Editor"; call saveApps "Browser"; call saveApps "Viewer"; call saveApps "Player"; writeinistr $ini, "Mailer", "Use", $$Mailer; writeinistr $ini, "Mailer", "Path", $$MailerPath; writeinistr $ini, "Mailer", "Option", $$MailerOption; // パス変換タブ // call saveReplacePath "ReplacePath"; call saveReplacePath "ReplaceWebPath"; //ダイアログ終了 ##r = dllfunc("ENDDIALOG"); if (##restart) goto createDialog; else goto exit; return; //saveEnvset.end // &X exit 終了処理 // exit: freedll; endmacro; ////// &0 ■ サブ関数群 ■ ////// // ヘルプボタンの設置 helpButton: //##1=改行数 call button "", "?", 3; call notify #notifyHelp; #notifyHelp = #notifyHelp +1; call lf ##1; return; // タブの作成 全般タブ // createGeneralTab: ##EnvExpand = getininum($ini, "General", "EnvExpand"); ##AltCurrentFolder = getininum($ini, "General", "AltCurrentFolder"); ##FolderOpen = getininum($ini, "General", "FolderOpen"); ##FileSelect = getininum($ini, "General", "FileSelect"); ##AbsMatchForced = getininum($ini, "General", "AbsMatchForced"); ##OkSelect = getininum($ini, "General", "OkSelect"); ##CancelSelect = getininum($ini, "General", "CancelSelect"); ##ExitSelect = getininum($ini, "General", "ExitSelect"); ##ExitExecMacro = getininum($ini, "General", "ExitExecMacro"); call cutMacroFolderPath getinistr($ini, "General", "ExitExecMacroFile"); $$ExitExecMacroFile = $$return; ##LogMode = getininum($ini, "General", "LogMode"); $$LogFile = getinistr($ini, "General", "LogFile"); if ($$LogFile == "") $$LogFile = macrodir + "\\文字列からファイルを開く.log"; $$EnvsetKeyword = getinistr($ini, "General", "EnvsetKeyword"); if ($$EnvsetKeyword == "") $$EnvsetKeyword = "envset"; else if ($$EnvsetKeyword == "__EnvsetKeywordDisabled__") $$EnvsetKeyword = ""; //環境変数 call check "EnvExpand", "環境変数を展開する", ##EnvExpand, 18; call helpButton; //パス強制認識 call check "AbsMatchForced", "パスを強制認識する", ##AbsMatchForced, 18; call helpButton; //フォルダオープン call check "FolderOpen", "フォルダを開くメニューを追加", ##FolderOpen, 26; call helpButton; //ファイル検索 call check "FileSelect", "他のファイルを選ぶメニューを追加", ##FileSelect, 26; call helpButton; //現在のファイル call check "AltCurrentFolder", "取得文字列がない時はカレントフォルダを対象にする", ##AltCurrentFolder, 38; call helpButton; //ログモード call check "LogMode", "ログファイルを出力する", ##LogMode, 18; call notify #notifyGeneral; //n00 call text " : ", 2; call mledit "LogFile", $$LogFile, 50; call ref "LogFileRefBtn", $$LogFile, "'テキストファイル (*.txt;*.log)'", #notifyGeneral +1; //参照 n01 call button "LogFileOpen", "開く", 5, #notifyGeneral +2; //n02 call enabled "LogFile,LogFileRefBtn", ##LogMode; call helpButton 2; call createGroup "ExitSelectGroup", "取得した文字列がパスではなかった時の動作"; call lf; //環境設定起動キーワード call text "環境設定の起動キーワード : ", 20; call edit "EnvsetKeyword", $$EnvsetKeyword, 17; call helpButton; //終了処理 call setGroup "ExitSelectGroup", 25; call createRadio "ExitSelect", "選択範囲の扱い"; call radio "選択範囲はそのまま"; call radio "単語を選択する"; call radio "選択範囲を解除する"; if (!##ExitSelect) ##ExitSelect = 1; //1〜3 call checked "ExitSelect", ##ExitSelect; //該当ラジオボタンをON call column 80; //終了マクロ call check "ExitExecMacro", "パスではなかった時に指定したマクロを実行する", ##ExitExecMacro, 36; call notify #notifyGeneral +3; //n03 call helpButton; //パス欄 call text "", 3; call mledit "ExitExecMacroFile", $$ExitExecMacroFile, 50; call enabled "ExitExecMacroFile", ##ExitExecMacro; call ref "ExitExecMacroRefBtn", macrodir, "'マクロファイル (*.mac)'", #notifyGeneral +4; //参照 n04 call enabled "ExitExecMacroRefBtn", ##ExitExecMacro; call lf; call check "OkSelect", "処理が正常終了した時も左の設定に従う", ##OkSelect, 36; call helpButton; call check "CancelSelect", "処理を中止した時も左の設定に従う", ##CancelSelect, 36; call helpButton; return; //createGeneralTab1.end // 拡張子タブ // 300 createExtensionTab: $$SelectExt = getinistr($ini, "ExtensionList", "SelectExt"); $$EditorExt = getinistr($ini, "ExtensionList", "EditorExt"); $$BrowserExt = getinistr($ini, "ExtensionList", "BrowserExt"); $$ViewerExt = getinistr($ini, "ExtensionList", "ViewerExt"); $$PlayerExt = getinistr($ini, "ExtensionList", "PlayerExt"); $$CorrelationExt = getinistr($ini, "ExtensionList", "CorrelationExt"); if ($$SelectExt == "") $$SelectExt = "cgi htm html php"; if ($$EditorExt == "") $$EditorExt = "css hilight htaccess ini js log mac txt vbs"; if ($$BrowerExt == "") $$BrowserExt = "doc mht pdf swf xsl"; if ($$ViewerExt == "") $$ViewerExt = "bmp gif jpg png"; if ($$PlayerExt == "") $$PlayerExt = "asf avi cda m3u mid midi mp3 mpg mpeg wav wma wmv"; if ($$CorrelationExt == "") $$CorrelationExt = "exe scr"; ##OtherCorrelation = getininum($ini, "ExtensionList", "OtherCorrelation"); ##AllCorrelation = getininum($ini, "ExtensionList", "AllCorrelation"); ##CorrelationNoMenu = getininum($ini, "ExtensionList", "CorrelationNoMenu"); call text "拡張子をアプリケーションに関連付けます。"; call text "半角スペースで区切って列挙してください。(ピリオドを入れちゃダメ)", 45; call helpButton; call lf; call check "AllCorrelation", "すべてのファイルで関連付けに従う", ##AllCorrelation, 28; call notify #notifyExtension; //n00 call check "CorrelationNoMenu", "関連付けに従う時は追加メニューを出さない", ##CorrelationNoMenu, 33; call notify #notifyExtension +1; //n01 call helpButton; call text "エディタかブラウザを選択する拡張子(Webパス変換が適用される拡張子)"; call text "", 2; call mledit "SelectExt", $$SelectExt; call text "エディタのメニューを出す拡張子(テキストファイル)"; call text "", 2; call mledit "EditorExt", $$EditorExt; call text "ブラウザのメニューを出す拡張子(ブラウザで開けるバイナリファイル)"; call text "", 2; call mledit "BrowserExt", $$BrowserExt; call text "画像ビューアのメニューを出す拡張子"; call text "", 2; call mledit "ViewerExt", $$ViewerExt; call text "再生プレイヤーのメニューを出す拡張子"; call text "", 2; call mledit "PlayerExt", $$PlayerExt; call text "関連付けに従う拡張子", 18; call check "OtherCorrelation", "上に登録されてない拡張子は関連付けに従う", ##OtherCorrelation, 34; call notify #notifyExtension +2; //n02 call helpButton; call text "", 2; call mledit "CorrelationExt", $$CorrelationExt; if (##AllCorrelation) call enabled "SelectExt,EditorExt,BrowserExt,ViewerExt,PlayerExt,CorrelationExt,OtherCorrelation", 0; else if (##OtherCorrelation) call enabled "CorrelationExt", 0; return; //createExtensionTab.end // アプリケーションタブ // createAppsTab: call text "メニューに表示するアプリケーションを登録します。", 35; call helpButton; call lf; call createTab "apps"; call setTab "FilerTab", "ファイラ"; call setTab "EditorTab", "エディタ"; call setTab "BrowserTab", "ブラウザ"; call setTab "ViewerTab", "画像ビューア"; call setTab "PlayerTab", "再生プレイヤー"; call setTab "MailerTab", "メール"; $$n = leftstr(str(#notifyApps), 1); //Appsタブ通知コードの上1桁 //ファイラタブ call newTab "FilerTab", #width -2; call createAppTab "Filer", $$n + "0"; //n00〜n09 …1桁目+2桁目(3桁目はループで設定) //エディタタブ call newTab "EditorTab", #width -2; call createAppTab "Editor", $$n + "1"; //n10〜n19 //ブラウザタブ call newTab "BrowserTab", #width -2; call createAppTab "Browser", $$n + "2"; //n20〜n29 call text "秀丸エクスプローラを導入してる時は、秀丸もここに登録しておくと使えるようになります。FTPにも対応しているのでおすすめ。\n秀丸エクスプローラは秀丸の開発サイトから無償でダウンロードできます。"; //ビューアタブ call newTab "ViewerTab", #width -2; call createAppTab "Viewer", $$n + "3"; //n30〜n39 //プレイヤータブ call newTab "PlayerTab", #width -2; call createAppTab "Player", $$n + "4"; //n40〜n49 //メーラータブ ##Mailer = getininum($ini, "Mailer", "Use"); $$MailerPath = getinistr($ini, "Mailer", "Path"); if ($$MailerPath == "") //XPでは拡張文字列を使ってるのでレジストリから取得できない $$MailerPath = "%systemdrive%\\Program Files\\Outlook Express\\msimn.exe"; $$MailerOption = getinistr($ini, "Mailer", "Option"); if ($$MailerOption == "") $$MailerOption = "/mailurl:mailto:$address$"; call newTab "MailerTab", #width -2; call check "Mailer", "メールアドレスを認識する", ##Mailer, 20; call notify #notifyApps +50; //n50 call helpButton; call lf; call text "プログラムのパス : ", 12; call mledit "MailerPath", $$MailerPath, 50; call ref "MailerRefBtn", hidemarudir, "'実行ファイル (*.exe)'", #notifyApps +51; //n51 call lf; call text "コマンドライン : ", 12; call edit "MailerOption", $$MailerOption, 50; call enabled "MailerPath,MailerRefBtn,MailerOption", ##Mailer; call lf 2; call text "例1: Outlook Expressの場合の設定例\n"+ "  プログラムのパス :\t%ProgramFiles%\\Outlook Express\\msimn.exe\n"+ "  コマンドライン :\t/mailurl:mailto:$address$\n\n"+ "例2: nPOPの場合の設定例\n"+ "  プログラムのパス :\tC:\\Program Files\\nakka\\nPOP\\nPOP.exe\n"+ "  コマンドライン :\t/a:アカウント名 mailto:$address$\n"; return; //createAppsTab.end // アプリケーションタブの各コントロール // createAppTab: $$appKey = $$1; $$notify = $$2; ##i = 0; while (##i < 10) { $$i = str(##i); $$ii = str(##i +1); //表示用 $$name[##i] = getinistr($ini, $$appKey, "Name" + $$i); $$path[##i] = getinistr($ini, $$appKey, "Path" + $$i); call text "表示名" + $$ii, 8; call edit $$appKey + "Name" + $$i, $$name[##i], 20; call text " パス" + $$ii, 7; call mledit $$appKey + "Path" + $$i, $$path[##i], 55; call ref $$appKey + "Ref" + $$i, hidemarudir, "'実行ファイル (*.exe)'", val($$notify + $$i); call lf; ##i = ##i +1; } //初期値の挿入 if ($$name[0] == "" && $$path[0] == "") { if ($$appKey == "Filer") { $$name0 = "エクスプローラ"; $$path0 = "Explorer.exe"; } else if ($$appKey == "Editor") { $$name0 = "秀丸エディタ"; $$path0 = hidemarudir + "\\Hidemaru.exe"; } else if ($$appKey == "Browser" || $$appKey == "Viewer") { $$name0 = "Internet Explorer"; openreg "LOCALMACHINE", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE"; if (result) $$path0 = getregstr(""); closereg; } else if ($$appKey == "Player") { $$name0 = "Windows Media Player"; openreg "LOCALMACHINE", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\wmplayer.exe"; if (result) $$path0 = getregstr(""); closereg; } call value $$appKey + "Name0", $$name0; call value $$appKey + "Path0", $$path0; } return; //createAppTab.end // パス変換タブ // createReplacePathTab: ##ReplacePath = getininum($ini, "ReplacePath", "Use"); call getReplacePath "ReplacePath"; $$PathList = $$return; call check "ReplacePath", "パス変換を適用する", ##ReplacePath, 18; call notify #notifyReplacePath; call helpButton; call mledit "PathList", "", 0, 24; //最初に初期値を入れると動作が変(saveReplacePath参照) call enabled "PathList", ##ReplacePath; call text "※入力チェックはしてません。途中に空行を入れたりすると後ろ全部が消え去るのでご注意。"; call value "PathList", $$PathList; return; //createReplacePathTab.end // Webパス変換タブ // createReplaceWebPathTab: ##ReplaceWebPath = getininum($ini, "ReplaceWebPath", "Use"); call getReplacePath "ReplaceWebPath"; $$WebList = $$return; call check "ReplaceWebPath", "Webパス変換を適用する", ##ReplaceWebPath, 20; call notify #notifyReplaceWebPath; call helpButton; call mledit "WebList", "", 0, 23; //最初に初期値を入れると動作が変(saveReplacePath参照) call enabled "WebList", ##ReplaceWebPath; ##r = dllfunc("NEWCONTROL", "text", "AllCorrelationInfo", ""); call text "※入力チェックはしてません。途中に空行を入れたりすると後ろ全部が消え去るのでご注意。"; call value "WebList", $$WebList; if (getininum($ini, "ExtensionList", "AllCorrelation")) { //全関連付けの時は無効 call enabled "ReplaceWebPath,WebList", 0; call value "AllCorrelationInfo", "■この設定を有効にしたい時は [拡張子] タブの「すべてのファイルで関連付けに従う」を無効にしてください。"; } return; //createReplacePathTab.end // getReplacePath // getReplacePath: $$key = $$1; $$s = ""; if (getinistr($ini, $$key, "Befor0") != "") { ##i = 0; while (1) { //配列形式を before>after 形式へ整形 $$alias = getinistr($ini, $$key, "Befor" + str(##i)); $$local = getinistr($ini, $$key, "After" + str(##i)); if ($$alias != "" || $$local != "") $$s = $$s + $$alias + ">" + $$local + "\n"; else break; ##i = ##i +1; } } return $$s; //getReplacePath.end // アバウトタブ // createAboutTab: $$ver = leftstr(str(#version), 1) + "." + rightstr(str(#version), 2); call createGroup "AboutGroup1", "文字列からファイルを開くマクロ", 27; call text "", 3; //検索パターン call createRadio "SearchPattern", "検索パターン"; call width 20; call radio "文末→文頭"; call radio "文頭→文末"; call helpButton; call checked "SearchPattern", 1 + getininum($ini, "General", "SearchPattern"); call lf 2; call createGroup "AboutGroup2", "秀丸本体の設定について"; call lf; call createGroup "AboutGroup3", "バグ報告について"; call setGroup "AboutGroup1", 25; call text "バージョン : " + $$ver; call text "サイト : http://cts.creasus.net/"; call text "メール : cts@creasus.net"; call setGroup "AboutGroup2", #width -4; call text "このマクロをダブルクリックやトリプルクリックへ割り当てる場合、ファイルタイプ別の設定 → 表示とカラー の項目で、\n ・ホームページURL\n ・ファイル名と思わしき場所\n ・メールアドレス(メールアドレス認識の設定を有効にした場合)\nの設定を無効にする必要があります。(秀丸の方が優先なのでマクロが起動しません)\n色分けされないと不便な場合は、動作環境 → リンク の項目で「ホームページURL、Email、ファイル名のマウス操作」をOFFにしてください。"; call setGroup "AboutGroup3", #width -4; call text "バグの対処は「誤動作するパス文字列」と「設定ファイル(文字列からファイルを開く.ini)」があると解決が早いです。\n問い合わせ等をする時はよろしく。"; return; //createAboutTab.end // おまけタブ // createAppendixTab: call createGroup "AppendixGroup1", "マクロファイルを開く", 27; call lf 2; call button "time", "Windows起動時間", 25; call notify #notifyAppendix +3; call setGroup "AppendixGroup1", 25; call button "", "本体マクロを編集"; call notify #notifyAppendix; call button "", "設定ファイルを開く"; call notify #notifyAppendix +2; return; //createAppendixTab.end // マクロフォルダのパスをカット cutMacroFolderPath: $$path = dllfuncstr("GSUB", dllfuncstr("TOLOWER", $$1), macrodir + "\\", "", -1); if (strstr($$path, "\\") == -1) { call lastIndexOf $$1, "\\"; call substr $$1, ##return +1; $$1 = $$return; } return $$1; // &R appRefInsert 参照ボタンの実行 // appRefInsert: $$appKey = $$1; $$n = rightstr(str(##2), 1); //notifyの下1桁を抜く(参照ボタンが押されたコントロールを識別) call refInsert $$appKey + "Ref" + $$n, $$appKey + "Path" + $$n, "110"; return; // 拡張子タブの設定保存 // saveExtList: call lfleft dllfuncstr("GETCTRLSTRING", $$1 + "Ext"); $$ext = dllfuncstr("GETTOKEN", $$return, " "); $$exts = ""; while (1) { if ($$ext != "") $$exts = $$exts + $$ext + " "; if (!dllfunc("HASMORETOKENS")) break; $$ext = dllfuncstr("GETTOKEN", "", " "); } while (1) { //連続した空白はひとつにまとめる if (strstr($$exts, " ") == -1) break; call replace $$exts, " ", " "; $$exts = $$return; } call chop $$exts; return $$return; // &A saveApps アプリケーションの設定保存 // saveApps: $$appKey = $$1; ##i = 0; while (##i < 10) { $$i = str(##i); $$name = dllfuncstr("GETCTRLSTRING", $$appKey + "Name" + $$i); call lfleft dllfuncstr("GETCTRLSTRING", $$appKey + "Path" + $$i); $$path = $$return; if ($$name != "" && $$path != "") { writeinistr $ini, $$appKey, "Name" + $$i, $$name; writeinistr $ini, $$appKey, "Path" + $$i, $$path; } else { writeinistr $ini, $$appKey, "Name" + $$i, 0; writeinistr $ini, $$appKey, "Path" + $$i, 0; } ##i = ##i +1; } return; //saveApps.end // saveReplacePath // saveReplacePath: $$key = $$1; writeinistr $ini, $$key, 0, 0; //設定を減らした時にリストの最後尾が残るので一度セクションごと消す writeinistr $ini, $$key, "Use", dllfuncstr("GETCTRLSTATE", $$key); if ($$key == "ReplacePath") $$listKey = "PathList";//call value "PathList"; else $$listKey = "WebList"; //call value "WebList"; $$path = dllfuncstr("GETTOKEN", dllfuncstr("GETCTRLSTRING", $$listKey), "\n"); //call mledit で初期値を入れると、ここで $$path の末尾に \n がついてきてしまう不思議現象が起きる ##i = 0; while (1) { //before>after 形式を配列形式へ整形 call subleft $$path, ">"; $$before = $$return; call subright $$path, ">"; $$after = $$return; if ($$before == "" && $$after == "") //空行を見つけたら抜ける break; else if ($$before != "" || $$after != "") { writeinistr $ini, $$key, "Befor" + str(##i), $$before; writeinistr $ini, $$key, "After" + str(##i), $$after; } else if (!dllfunc("HASMORETOKENS")) break; $$path = dllfuncstr("GETTOKEN", "", "\n"); ##i = ##i +1; } return; //saveReplacePath.end ////// &0 ■ コントロールライブラリ ■ ////// message: //$$1=文字, $$2=OKを押した時の通知コード if ($$2 == "") $$2 = "65535"; ##r = dllfunc("SHOWMESSAGE", $$2, $$1); return; // タブ // createTab: //$$1=ID ##r = dllfunc("NEWCONTROL", "tab", $$1); return; newTab: //$$1=タブID, ##2=幅 ##r = dllfunc("NEWDLGPAGE", $$1, ##2); return; setTab: //$$1=ID, $$2=文字, $$3=タブID, $$4=追加場所 if ($$4 == "") $$4 = "-1"; ##r = dllfunc("SETCTRLITEM", $$3, $$1 + "," + $$2, $$4); return; setActiveTab: //$$1=ID, ##2=タブNo ##r = dllfunc("SETCTRLSTATE", $$1, str(##2)); return; // &G グループ // createGroup: //$$1=グループID, $$2=表示名, ##3=グループの幅, $$4=ID(不要), $$5=追加位置 ##r = dllfunc("NEWCONTROL", "group", $$4, $$2); if ($$5 == "") $$5 = "-1"; ##r = dllfunc("SETCTRLITEM", $$4, $$1, $$5); if (##3) call width ##3; return; setGroup: //$$1=グループID, ##2=グループ内コントロールの幅 ##r = dllfunc("NEWDLGPAGE", $$1, ##2); return; column: //##1=幅 ##r = dllfunc("NEWCOLUMN", ##1); return; // &T テキスト系 // lf: //##1=改行数 if (!##1) ##1 = 1; ##i = ##1; while (##i) { ##r = dllfunc("NEWCONTROL", "text", "", ""); ##i = ##i -1; } return; lfleft: //改行から左を取り出す $$1=文字 return dllfuncstr("GETTOKEN", $$1, "\n"); text: //$$1=初期値(\nごとに新規設置), ##2=幅 $$text = dllfuncstr("GETTOKEN", $$1, "\n"); while (1) { ##r = dllfunc("NEWCONTROL", "text", "", $$text); if (##2) call width ##2; if (!dllfunc("HASMORETOKENS")) break; $$text = dllfuncstr("GETTOKEN", "", "\n"); } return; edit: //$$1=ID, $$2=初期値, ##3=幅 ##r = dllfunc("NEWCONTROL", "edit", $$1, $$2); if (##3) call width ##3; return; mledit: //$$1=ID, $$2=初期値, ##3=幅, ##4=縦 ##r = dllfunc("NEWCONTROL", "mledit", $$1, $$2); if (##3) call width ##3; if (##4) call height ##4; return; value: //$$1=ID, $$2=テキスト if ($$2 != "") $$r = dllfuncstr("SETCTRLSTRING", $$1, $$2); else return dllfuncstr("GETCTRLSTRING", $$1); return; // &B ボタン系 // button: //$$1=ID, $$2=表示名, ##3=幅, ##4=通知コード ##r = dllfunc("NEWCONTROL", "button", $$1, $$2); if (##3) call width ##3; if (##4) call notify ##4; return; ref: //$$1=ID, $$2=初期フォルダ, $$3=フィルタ, ##4=通知コード ##r = dllfunc("NEWCONTROL", "reffilebutton", $$1, ""); ##r = dllfunc("SETCTRLITEM", "", ""); ##r = dllfunc("SETCTRLITEM", "", $$2); ##r = dllfunc("SETCTRLITEM", "", $$3); ##r = dllfunc("SETCTRLITEM", "", "1"); call width 6; call notify ##4; return; refInsert: //$$1=参照ボタンID, $$2=パス挿入先ID, $$3=ビットフラグ call value $$1; //参照で選ばれたパスを取得 $$p = $$return; if (leftstr($$3, 1) == "1") { //複数選択した時はひとつに削る(1ビットめ) if (strstr($$p, "|") != -1) { $$s = dllfuncstr("GETTOKEN", $$p, "|"); $$p = $$s; $$s = dllfuncstr("GETTOKEN", "", "|"); $$p = $$p + "\\" + $$s; } } if (midstr($$3, 1, 1) == "1") { //空白が含まれる時は " " でくくる(2ビットめ) if (strstr($$p, " ") != -1) $$p = "\"" + $$p + "\""; } if (midstr($$3, 2, 1) == "1") { //ファイル名のみ挿入(3ビットめ) call lastIndexOf $$p, "\\"; call substr $$p, ##return +1; $$p = $$return; } if ($$2 != "") call value $$2, $$p; //パス挿入 return $$p; // チェックボックス・ラジオボタン // rdbtn: //$$1=ID, $$2=表示名 ##r = dllfunc("NEWCONTROL", "rdbtn", $$1, $$2); return; createRadio: //$$1=ID, $$2=グループ表示名 ##r = dllfunc("NEWCONTROL", "radio", $$1, $$2); return; radio: //$$1=ラジオボタン表示名, $$2=createRadioのID(直後に設置すれば不要) ##r = dllfunc("SETCTRLITEM", $$2, $$1); return; check: //$$1=ID, $$2=テキスト, ##3=初期チェック状態, ##4=幅 ##r = dllfunc("NEWCONTROL", "check", $$1, $$2); if (##3) call checked $$1, 1; if (##4) call width ##4; return; checked: //$$1=ID, ##2=-1/0/1〜 if (##2 == -1) return val(dllfuncstr("GETCTRLSTATE", $$1)); //取得 else ##r = dllfunc("SETCTRLSTATE", $$1, str(##2)); //設定 return; rdchecked: //単発ラジオの取得 $$1=ID, ##2=ラジオボタンの数 ##i = 1; //インデックスは1から while (##i < ##2 +1) { if (dllfuncstr("GETCTRLSTATE", $$1 + str(##i)) == "1") return ##i; ##i = ##i +1; } return 0; // 通知コード・幅・有効切替 // notify: //##1=通知コード, $$2=ID ##r = dllfunc("SETCTRLNOTIFY", $$2, str(##1)); return; notifystr: //$$1=通知コード, $$2=ID ##r = dllfunc("SETCTRLNOTIFY", $$2, $$1); return; width: //##1=幅, $$2=ID ##r = dllfunc("SETCTRLWIDTH", $$2, ##1); return; height: //##1=幅, $$2=ID ##r = dllfunc("SETCTRLHEIGHT", $$2, ##1); return; enabled: //$$1=ID(コンマ区切りで複数指定可), ##2=0/1 ##r = dllfunc("ENABLECTRL", ##2, $$1); return; ////// &0 ■ 汎用関数群 ■ ////// replace: if (!##4) ##4 = -1; return dllfuncstr("GSUB", $$1, $$2, $$3, ##4); lastIndexOf: return dllfunc("STRRSTR2", $$1, $$2); substr: if (!##3) ##3 = dllfunc("STRLEN2", $$1) - ##2; return dllfuncstr("MIDSTR2", $$1, ##2, ##3); subleft: return dllfuncstr("LEFTSTR2", $$1, dllfunc("STRSTR2", $$1, $$2)); subright: ##n = dllfunc("STRSTR2", $$1, $$2); return dllfuncstr("MIDSTR2", $$1, ##n + dllfunc("STRLEN2", $$2), dllfunc("STRLEN2", $$1) - ##n); chop: return dllfuncstr("MIDSTR2", $$1, 0, dllfunc("STRLEN2", $$1) -1); error: message $$1; call exit; return;