最近MSのツイートで知ったのですが、Windowsのメモ帳でファイルを開いた際に、現在日時を自動入力する方法があるんですね。
テキストファイルの先頭に「.LOG」と書いておけばOKです。あとはメモ帳でファイルを開く毎に
こんな感じでファイルを開いた日時が自動的に付与されます。
Windows 7及びWindows 8のメモ帳で確認しました。
2015年3月13日金曜日
2014年10月19日日曜日
jQueryでTABLE内のラジオボタン選択行の背景色を変更するサンプル
最近jQueryを使う機会があり勉強中です。
本記事では、選択行の背景色を変えるjQueryのコードについてメモしておきます。
ソースコード例はこんな感じ。
var $radioButton= $("input[name='aaaa']");
$radioButton.click(function(){
$radioButton.parents('table').find('td').css('background', 'white');
$("input[name='aaaa']:checked").parent().parent().children().css('background', 'blue');
});
基本的にはラジオボタンがクリックされると、まずテーブル全体のセルの背景色を塗りつぶして、変更前の行の色を元に戻してから、新たに選択された行の色を変更するというロジックです。
悩んだのがラジオボタンが存在するテーブルやテーブル列全体の背景色を変更する方法でした。単純にTABLEタグやTRタグの背景色を変更するだけでは上手くいかず、上記処理のようにTDタグ全体を取得したり、選択行についてはparentとchildrenを並べて対応しています。
もっとスマートな方法もあるかもしれませんが、参考になれば。
本記事では、選択行の背景色を変えるjQueryのコードについてメモしておきます。
ソースコード例はこんな感じ。
var $radioButton= $("input[name='aaaa']");
$radioButton.click(function(){
$radioButton.parents('table').find('td').css('background', 'white');
$("input[name='aaaa']:checked").parent().parent().children().css('background', 'blue');
});
基本的にはラジオボタンがクリックされると、まずテーブル全体のセルの背景色を塗りつぶして、変更前の行の色を元に戻してから、新たに選択された行の色を変更するというロジックです。
悩んだのがラジオボタンが存在するテーブルやテーブル列全体の背景色を変更する方法でした。単純にTABLEタグやTRタグの背景色を変更するだけでは上手くいかず、上記処理のようにTDタグ全体を取得したり、選択行についてはparentとchildrenを並べて対応しています。
もっとスマートな方法もあるかもしれませんが、参考になれば。
2014年7月27日日曜日
VBScriptでUTF-8等の文字コード変換を行うためのポイント
VBScriptやClassic ASPでUTF-8等のShift_JIS以外の文字コードを扱いたい場合があります。
ただVBScriptはShift_JISを前提として作られているため、それ以外の文字コードを扱うにはADODB.Streamオブジェクト等を使う必要がありますが、その際のつまづきやすいポイントを紹介します。
例えば、UTF-8の文字コードをデコードするには以下の様な処理が必要です。
Dim oUTF8
Set oUTF8 = CreateObject("ADODB.stream")
With oUTF8
.Open
.Type = 1 'adTypeBinary
.Write(baUTF8)
.Position = 0
.Type = 2 'adTypeText
.Charset = "UTF-8"
strUTF8 = .ReadText()
.Close
End With
ここでポイントになるのはStream.Writeメソッドです。
上記のとおり、Writeメソッドの引数としてバリアント型にbyte配列を格納して渡して上げる必要がありますが、そもそもVBScriptでは明示的にbyte配列を記述することはできません。
VBScriptでbyte配列を作り出す方法は以下を参考にして下さい。
ただVBScriptはShift_JISを前提として作られているため、それ以外の文字コードを扱うにはADODB.Streamオブジェクト等を使う必要がありますが、その際のつまづきやすいポイントを紹介します。
■UTF-8の文字コードをデコードする例
例えば、UTF-8の文字コードをデコードするには以下の様な処理が必要です。
Dim oUTF8
Set oUTF8 = CreateObject("ADODB.stream")
With oUTF8
.Open
.Type = 1 'adTypeBinary
.Write(baUTF8)
.Position = 0
.Type = 2 'adTypeText
.Charset = "UTF-8"
strUTF8 = .ReadText()
.Close
End With
ここでポイントになるのはStream.Writeメソッドです。
上記のとおり、Writeメソッドの引数としてバリアント型にbyte配列を格納して渡して上げる必要がありますが、そもそもVBScriptでは明示的にbyte配列を記述することはできません。
VBScriptでbyte配列を作り出す方法は以下を参考にして下さい。
2014年7月23日水曜日
VBScriptでbyte配列を扱う方法
ADODB.streamをVBScriptから呼び出す場合等、VBScript(あるいはClassic ASP)内でbyte配列を扱いたい場合があります。
例えば、上記記事で紹介しているのADOのWriteメソッドの場合、引数としてバリアント型にbyte配列を格納して渡して上げる必要がありますが、そもそもVBScriptでは明示的にbyte配列を記述することはできないため、工夫が必要になります。
■Microsoft.XMLDOMを使ってbyte配列を作る
方法はいくつかあると思いますが、一番手っ取り早いのはMicrosoft.XMLDOMを使う方法です。
Microsoft.XMLDOMのHex形式の文字列("1A0FB3"のような形式)をバイト配列に変換する機能を使って、例えば以下のように関数化します。
Function HexToBArray(Hex)
With CreateObject("Microsoft.XMLDOM").createElement("aaaa")
.DataType = "bin.hex"
.Text = Hex
HexToBArray= .NodeTypedValue
End With
End Function
あとは、この関数の戻り値をVBScriptのバリアント型の変数に格納しておけば、別の関数の引数として使うことが出来ます。
2014年7月19日土曜日
IEアドオン(ブラウザ ヘルパ オブジェクト・BHO) をIE11拡張保護モードで動作させる情報源まとめ
Windows8及びIE11は更にセキュリティが強化され、拡張保護モードという概念が追加されています。
そのためブラウザ ヘルパ オブジェクト(BHO)で実装されたIEアドオンは、拡張保護モード有効時では動作しません。正確に言うと、IEから読み込まれることすらしません。
既存のIEアドオンを拡張保護モード有効時に動作させるための情報源をまとめておきます。
英語ですが、拡張保護モードについてはこの記事が一番網羅的でわかり易いと思います。
Understanding Enhanced Protected Mode - IEInternals - Site Home - MSDN Blogs
MSサポートチームの人がもう少し噛み砕いたのがこちらの記事。
Blogs - Japan IE Support Team Blog - Site Home - TechNet Blogs
そもそもIEアドオンをどのようにBHOで実装するかはこの記事が参考になります。
Visual Studio 2005 によるブラウザ ヘルパ オブジェクトのビルド
Microsoft Visual Studio 2005 と Active Template Library (ATL) を基に、C++ を使用して BHO を開発する内容になっていますが、Visual Studio 2008でも同様に作成できました。
Supporting enhanced protected mode (EPM) (Windows)
Loading ActiveX controls when EPM is active ...
にも記載されていますが、拡張保護モード有効時にIEアドオンを読み込ませるには、COM component categoryにAppContainer互換を示すGUID(59fb2056-d625-48d0-a944-1a85b5ab2640)を登録する必要があります。
具体的な登録方法(レジストリ操作)は
BUG: Component Category Registry Entries Not Removed in ATL Component
が参考になりました。
当然ですが、上記のCOM component categoryを正しく行ったとしても、アドオンがIEに読み込まれるようになるだけです。読み込まれたIEアドオンが、より制限された実行環境であるAppContainer内で正しく動作するかはまた別の問題であり、動作確認が必要です。想定通り動作しなかった場合はコード修正が必要になりますので注意して下さい。
そのためブラウザ ヘルパ オブジェクト(BHO)で実装されたIEアドオンは、拡張保護モード有効時では動作しません。正確に言うと、IEから読み込まれることすらしません。
既存のIEアドオンを拡張保護モード有効時に動作させるための情報源をまとめておきます。
■拡張保護モードについて
英語ですが、拡張保護モードについてはこの記事が一番網羅的でわかり易いと思います。
Understanding Enhanced Protected Mode - IEInternals - Site Home - MSDN Blogs
MSサポートチームの人がもう少し噛み砕いたのがこちらの記事。
Blogs - Japan IE Support Team Blog - Site Home - TechNet Blogs
■ ブラウザ ヘルパ オブジェクト(BHO)について
そもそもIEアドオンをどのようにBHOで実装するかはこの記事が参考になります。
Visual Studio 2005 によるブラウザ ヘルパ オブジェクトのビルド
Microsoft Visual Studio 2005 と Active Template Library (ATL) を基に、C++ を使用して BHO を開発する内容になっていますが、Visual Studio 2008でも同様に作成できました。
■拡張保護モード有効時に IEアドオンを読み込ませるには?
Supporting enhanced protected mode (EPM) (Windows)
Loading ActiveX controls when EPM is active ...
にも記載されていますが、拡張保護モード有効時にIEアドオンを読み込ませるには、COM component categoryにAppContainer互換を示すGUID(59fb2056-d625-48d0-a944-1a85b5ab2640)を登録する必要があります。
具体的な登録方法(レジストリ操作)は
BUG: Component Category Registry Entries Not Removed in ATL Component
が参考になりました。
■アドオンがIEに読み込まれることと正しく動作することは別問題です
当然ですが、上記のCOM component categoryを正しく行ったとしても、アドオンがIEに読み込まれるようになるだけです。読み込まれたIEアドオンが、より制限された実行環境であるAppContainer内で正しく動作するかはまた別の問題であり、動作確認が必要です。想定通り動作しなかった場合はコード修正が必要になりますので注意して下さい。
ラベル:
COM,
Internet Explorer,
Windows8,
ノウハウ
2014年7月16日水曜日
VBScriptフリーズ時にまず確認すべきポイント
VBScriptで記述したバッチ処理がフリーズするトラブルが発生することがあります。この際にまず確認すべきポイントを紹介したいと思います。
もしフリーズが発生するVBScript処理内に
Set WSHShell = CreateObject("WScript.Shell")
Set oExec = WSHShell.Exec("cscript scriptworker.vbs")
こんな感じで、Execメソッドを使っていれば、まず間違いなく標準出力(あるいはエラー出力)のバッファあふれによるフリーズの可能性大です。
Execメソッドでの標準出力及びエラー出力のバッファサイズが4KBのため、大量に処理結果が出力されるとバッファが一杯になり処理がブロックされてしまいます。
マイクロソフトのサイトにあるとおり、
Hang When Reading StdErr/StdOut Properties of WshScriptExec Object
StdOut及びStdErrプロパティから標準出力結果を適宜読み出してあげればOKです。
以下のブログ
へたれたプログラマの憂鬱 WSHのExecメソッド
によると、StdOut及びStdErrプロパティから標準出力結果を適宜読み出すだけでは、場合によってはデッドロックを引き起こす可能性もあるとのこと。
現場ではそのようなケースに遭遇したことはないですが、運悪くそのケースにハマった場合は標準出力をリダイレクトしてファイルに吐き出す等の対応が必要になります。
■WScript.ShellのExecメソッド標準出力バッファ4KBの罠
もしフリーズが発生するVBScript処理内に
Set WSHShell = CreateObject("WScript.Shell")
Set oExec = WSHShell.Exec("cscript scriptworker.vbs")
こんな感じで、Execメソッドを使っていれば、まず間違いなく標準出力(あるいはエラー出力)のバッファあふれによるフリーズの可能性大です。
Execメソッドでの標準出力及びエラー出力のバッファサイズが4KBのため、大量に処理結果が出力されるとバッファが一杯になり処理がブロックされてしまいます。
■解決策
マイクロソフトのサイトにあるとおり、
StdOut及びStdErrプロパティから標準出力結果を適宜読み出してあげればOKです。
■デッドロックが発生する可能性もあり
以下のブログ
へたれたプログラマの憂鬱 WSHのExecメソッド
によると、StdOut及びStdErrプロパティから標準出力結果を適宜読み出すだけでは、場合によってはデッドロックを引き起こす可能性もあるとのこと。
現場ではそのようなケースに遭遇したことはないですが、運悪くそのケースにハマった場合は標準出力をリダイレクトしてファイルに吐き出す等の対応が必要になります。
2014年7月8日火曜日
WebアプリケーションでOfficeファイルを作成する業務要件を実装する際の注意点
Webアプリケーションの業務要件で
この業務要件を実現するために、サーバサイドの開発言語(ASP.NET等)からOfficeオートメーションを使って実装している場合がありますが、マイクロソフトのサポート外の実装方式になりますので注意して下さい。
詳細は、以下のサイトで詳しいですが、
http://support.microsoft.com/kb/257757/ja http://blogs.msdn.com/b/office_client_development_support_blog/archive/2012/04/12/1-office.aspx
Officeオートメーションはクライアントアプリケーションから使われることを前提とした設定となっているため、場合によってはエラーや警告ダイアログを表示する場合があります。サーバから使われている場合、ダイアログが表示されてしまうと、そのダイアログを誰もクローズしないため、その後の処理がブロックされてしまうというのが一番の問題のようです。
解決策は
http://blogs.technet.com/b/sharepoint_support/archive/2014/05/07/office.aspx
の内容を参考にするか、サーバサイドでの動作が保証されたサードパーティ製品を使うということになります。
- サーバ上でExcel等のOfficeファイルを生成し、ブラウザからダウンロード可能とする
この業務要件を実現するために、サーバサイドの開発言語(ASP.NET等)からOfficeオートメーションを使って実装している場合がありますが、マイクロソフトのサポート外の実装方式になりますので注意して下さい。
詳細は、以下のサイトで詳しいですが、
http://support.microsoft.com/kb/257757/ja http://blogs.msdn.com/b/office_client_development_support_blog/archive/2012/04/12/1-office.aspx
Officeオートメーションはクライアントアプリケーションから使われることを前提とした設定となっているため、場合によってはエラーや警告ダイアログを表示する場合があります。サーバから使われている場合、ダイアログが表示されてしまうと、そのダイアログを誰もクローズしないため、その後の処理がブロックされてしまうというのが一番の問題のようです。
■解決策は?
解決策は
http://blogs.technet.com/b/sharepoint_support/archive/2014/05/07/office.aspx
の内容を参考にするか、サーバサイドでの動作が保証されたサードパーティ製品を使うということになります。
2014年3月19日水曜日
IE11だとセキュリティゾーンの違いのみで画面崩れが発生する可能性あり
マイクロソフトサポートチームのブログに、こんな記事が出ていました。
Internet Explorer 11 における文字列表示の変更点について
概要はこんな感じです。
IE9 のサブピクセル フォント - Internet Explorer ブログ (日本語版) - Site Home - MSDN Blogs
要はナチュラルメトリックにより画面のレンダリングのロジックが変わるため、スタイルシートなどでピクセルを細かく指定している画面については、画面崩れが発生する可能性があるわけですが、IE11では、 セキュリティゾーンの違いのみでナチュラルメトリックによる画面崩れが発生する場合があるということになります。
今までの常識だとドキュメントモードの違いで画面表示が崩れるというようなことはありましたが、今後はセキュリティゾーンの違いでも画面崩れが発生するケースも多くなると思われますので、注意して下さい。
なお回避策として、metaタグ
<meta http-equiv="X-UA-TextLayoutMetrics" content="gdi">
を入れることで、 ナチュラルメトリックが適用されなくなるとのことなので、とりあえずの回避策としてはこれが一番簡単そうです。
Internet Explorer 11 における文字列表示の変更点について
概要はこんな感じです。
- IE9からナチュラルメトリックという画面のピクセル計算をより厳密に行う仕組みが導入された
- IE11よりナチュラルメトリックの適用範囲が大きく広がり、イントラネットゾーン以外では原則有効になる
IE9 のサブピクセル フォント - Internet Explorer ブログ (日本語版) - Site Home - MSDN Blogs
要はナチュラルメトリックにより画面のレンダリングのロジックが変わるため、スタイルシートなどでピクセルを細かく指定している画面については、画面崩れが発生する可能性があるわけですが、IE11では、 セキュリティゾーンの違いのみでナチュラルメトリックによる画面崩れが発生する場合があるということになります。
今までの常識だとドキュメントモードの違いで画面表示が崩れるというようなことはありましたが、今後はセキュリティゾーンの違いでも画面崩れが発生するケースも多くなると思われますので、注意して下さい。
なお回避策として、metaタグ
<meta http-equiv="X-UA-TextLayoutMetrics" content="gdi">
を入れることで、 ナチュラルメトリックが適用されなくなるとのことなので、とりあえずの回避策としてはこれが一番簡単そうです。
登録:
投稿 (Atom)

