「スクリプト集」の編集履歴(バックアップ)一覧に戻る
スクリプト集 - (2007/10/14 (日) 08:24:18) のソース
&topicpath(top=トップ) #contents(fromhere=true) **hyperqm QMAIL3の全文検索をちょっぴりGmail風にするツール QMAIL3はHyper Estraierと組み合わせて使用することで、高速な全文検索を行うことができます。 大変便利で強力な機能なのですが、メール本文に対しての検索しか行うことができません。 メールの属性(送信者、宛先、日時、etc)を対象とした条件も使用できれば・・・。 そんな思いから、このツールを作ってみました。(Musee d'Dimanche より引用) Musee d'Dimanche http://freemind.s57.xrea.com/hyperqm/ **hyperqm.js hyperqm.exeをちょっぴり使いやすくするツール -hyperqm.exeのソースをJScriptに移植したもの。 -hyperqm.exeと同じフォルダにhyperqm.jsというファイル名でソースを保存して使ってください。 -QMAIL3検索オプションでカスタムにして検索のところを「cscript hyperqm.js "$index" "$condition" $encoding」とする。 -検索式もhyperqm.exeと同じでそれに加えて下記が可能。 +属性のOR:「from,cc:hoge,foo」とすれば「hoge」または「foo」が「fromまたはcc」にあるメールを検索。→「"from,cc:hoge foo"」と「"」で括って検索対象を「半角空白」で区切っても可。 +属性の否定:「hoge -from:foo」とすれば、本文に「hoge」を含み「from」が「foo」を含まないメールを検索。 >main(); >function main(){ > var WshShell = new ActiveXObject('WScript.Shell'); > var ARGV = WScript.Arguments; > var index = ARGV(0); > var char_code = ARGV(ARGV.length-1); > var tmp = ARGV(1); > for(var i=2;i<ARGV.length-1;i++){tmp+=" " + ARGV(i)} > if(ARGV.length>=3){ > tmp=tmp.replace(/\\(\S+?( \S+?)+?)\\/g,"\"$1\""); > } > var parser = new StringParser(tmp); > var attr_str = parser.attr_str; > var search_phrase = parser.search_phrase; > >if(debug){ > var fso, f; > var ForReading = 1, ForWriting = 2; > fso = new ActiveXObject("Scripting.FileSystemObject"); > f = fso.OpenTextFile("C:\\Program Files\\QMAIL3\\testfile.txt", ForWriting, true); > tmp+= "\n---------\n"; > tmp+= attr_str; > tmp+= "\n---------\n"; > tmp+= search_phrase; > tmp+= "\n---------\n"; > for(i=0;i<ARGV.length;i++){tmp+=ARGV(i) + "\n"} > f.Write(tmp); > f.Close(); >} > >//attr_str = ' -attr "' + ARGV(1) + '"'; >//search_phrase = '[UVSET]'; > var objExec = WshShell.Exec('estcmd search -nl -ic ' + char_code + ' -vu -aux 99 -max -1' + attr_str + ' "' + index + '" "' + search_phrase + '"'); > while(!objExec.StdOut.AtEndOfStream) { > WScript.StdOut.WriteLine(objExec.StdOut.ReadLine()); > } >} > >function StringParser(arg){ > var inputted_str = arg > var search_phrase = ''; > var attribute_condition_ary = new Array(); > var r, str; > while(r=inputted_str.match(/\"(.*?)\"/)){ > str = inputted_str.slice(r.index + 1, r.lastIndex - 1); > if(str.indexOf(':') != -1){ > attribute_condition_ary = attribute_condition_ary.concat(attribute(str)); > }else{ > if(search_phrase.length > 0){ > search_phrase += ' AND '; > } > search_phrase += str; > } > inputted_str = inputted_str.slice(0,r.index) + inputted_str.slice(r.lastIndex); > } > > var strs = inputted_str.split(/ | /); > for(var key in strs){ > str = strs[key]; > if(!str){continue;} > if(str.indexOf(':') != -1){ > attribute_condition_ary = attribute_condition_ary.concat(attribute(str)); > continue; > } > if(search_phrase.length > 0){ > if(str == 'OR'){ > search_phrase += ' OR'; > continue; > }else if(search_phrase.match(/.+ OR$/)){ > search_phrase += ' '; > }else if(str.charAt(0) == '-'){ > search_phrase += ' ANDNOT '; > str = str.slice(1); > }else{ > search_phrase += ' AND '; > } > } > search_phrase += str; > } > if(search_phrase.length == 0){ > search_phrase = '[UVSET]'; > } > > var attr_str = ''; > if(attribute_condition_ary && attribute_condition_ary.length > 0){ > for(key in attribute_condition_ary){ > attr_str += ' -attr "' + attribute_condition_ary[key] + '"'; > } > } > this.source = arg; > this.attr_str = attr_str; > this.search_phrase = search_phrase; >} >function attribute(str){ > var str_ary = str.split(':'); > if(!str_ary){return} > if(str_ary[0] == 'after'){ > return "@cdate NUMGE " + Math.round(Date.parse(str_ary[1])/1000); > }else if(str_ary[0] == 'before'){ > return "@cdate NUMLT " + (Math.round(Date.parse(str_ary[1])/1000) + 60*60*24); > }else if(str_ary[0].charAt(0) == '-'){ > var ary = str_ary[0].slice(1).split(','); > var a = new Array(); > for(var key in ary){ > if(!str_ary[1]){ > continue; > }else{ > a=a.concat(ary[key] + " !ISTRRX " + escapeReg(str_ary[1])); > } > } > return a; > }else if(str_ary[1].match(/,| |\|/)){ > return str_ary[0] + " ISTRRX " + escapeReg(str_ary[1]); > }else if(!str_ary[1]){ > return str_ary[0]; > }else{ > return str_ary[0] + " ISTRINC " + str_ary[1]; > } >} >function escapeReg(str){ > var tmp=str; > tmp = str.replace(/(\\|\$|\*|\+|\?|\^|\(|\))/g,"\\$1");//.のエスケープ不要? > return tmp.replace(/,| |\|/g,'|'); >} **Browser.js 標準ブラウザ以外で開くスクリプト。 Browser.jsという名前でQmail3のscriptsフォルダに保存。 メールのurlを範囲指定してから「ツール」-「スクリプト」で選択。 >var browser = "iexplore.exe"; > //var browser = "opera.exe"; > //var browser = "firefox.exe"; > //var browser = "Netscp.exe"; > >actionTarget.invokeAction("EditCopy"); >var macro = macroParser.parse("@Clipboard()"); >var url = macro.evaluate(application.nothing, application.nothing); > >var shell = new ActiveXObject("WScript.Shell"); >shell.Run(browser + " " + url); 起動したいブラウザのコメント(//)はずしてください。 上記ではIEが起動してます。 **EditByEditor.js EmEditorでメール編集するためのスクリプト。 テンポラリファイルをUTF-8にしているので、Shift-JIS以外の言語でも問題ありません。 下記のスクリプトをEditByEmeditor.jsとしてscriptsフォルダに保存してください。 また、最初の二行はそれぞれの環境に合わせてパスを変更する必要があります。テンポラリファイルの拡張子はお好みで適当に変えてください。 >var editor = "\"C:\\Program Files\\EmEditor\\emeditor.exe\" /sp "; >var tempFile = "C:\\Windows\\temp\\spellcheck.qhtml"; > >var adTypeText = 2; >var adSaveCreateOverWrite = 2; >function SaveText(filename, text, charset) >{ > var stm = new ActiveXObject("ADODB.Stream"); > stm.Type = adTypeText; > stm.Charset = charset; > stm.Open(); > stm.WriteText(text); > stm.SaveToFile(filename, adSaveCreateOverWrite); > stm.Close(); >} > >// テキスト ファイル入力 >function LoadText(filename, charset) >{ > var stm = new ActiveXObject("ADODB.Stream"); > stm.Type = adTypeText; > stm.Charset = charset; > stm.Open(); > stm.LoadFromFile(filename); > var text = stm.ReadText(); > stm.Close(); > return text; >} > > >// テキストをすべて選択してクリップボードにいれ、 >// クリップボード経由でテキストを取得する >editFrameWindow.invokeAction("EditSelectAll"); >editFrameWindow.invokeAction("EditCopy"); >var getClipboardMacro = macroParser.parse("@Clipboard()"); >var inText = getClipboardMacro.evaluate(application.nothing, document.accounts(0)); > >// 取得したテキストを一時ファイルに書き込む > SaveText(tempFile, inText, "UTF-8"); > > // Editorを起動して終了するまで待つ > var shell = new ActiveXObject("WScript.Shell"); > var flag=shell.Run(editor + tempFile, 5, true); > > macroParser.parse("@MessageBox(\"Editor編集後のファイルを読み込みます\")").evaluate(application.nothing, application.nothing); > > // Editorが修正したファイルを読み込む > var outText = null; > outText = LoadText(tempFile, "UTF-8"); > > // クリップボードを経由してエディットビューに貼り付け > var setClipboardMacro = macroParser.parse("@Clipboard($value)"); > setClipboardMacro.setVariable("value", outText); > setClipboardMacro.evaluate(application.nothing, document.accounts(0)); > editFrameWindow.invokeAction("EditSelectAll"); > editFrameWindow.invokeAction("EditPaste"); > editFrameWindow.invokeAction("EditMoveDocStart"); >try { > var fs = new ActiveXObject("Scripting.FileSystemObject"); > fs.DeleteFile(tempFile); >} >finally { >} **Googleで検索 本家メモにあります。 http://snak.tdiary.net/20050927.html#p01 **AddSama.js メールに「様」をつけるスクリプト。 付けたいときに付ける事が出来ます。 AddSama.jsという名前でQmail3のscriptsフォルダに保存。 メールのurlを範囲指定してから「ツール」-「スクリプト」で選択。 >addSAMA(0);//To >addSAMA(1);//Cc >addSAMA(2);//Bcc >function addSAMA(n){ >var address=getText(n).replace(/(?!様)("?) </g,"様$1 <"); >var setClipboardMacro = macroParser.parse("@Clipboard($value)"); >setClipboardMacro.setVariable("value", address); >setClipboardMacro.evaluate(application.nothing, document.accounts(0)); >editFrameWindow.invokeAction("EditPaste"); >} >function getText(n){ >var putClipboardMacro = macroParser.parse("@Clipboard('')"); >putClipboardMacro.evaluate(application.nothing, application.nothing); >editFrameWindow.invokeAction("ViewFocusEditItem","@" + n); >editFrameWindow.invokeAction("EditSelectAll"); >editFrameWindow.invokeAction("EditCopy"); >var getClipboardMacro = macroParser.parse("@Clipboard()"); >var inText = getClipboardMacro.evaluate(application.nothing, application.nothing); >return inText; >} >