広告

ラベル ノウハウ の投稿を表示しています。 すべての投稿を表示
ラベル ノウハウ の投稿を表示しています。 すべての投稿を表示

2015年3月13日金曜日

Windowsのメモ帳で現在日時を自動入力する方法を紹介

最近MSのツイートで知ったのですが、Windowsのメモ帳でファイルを開いた際に、現在日時を自動入力する方法があるんですね。





テキストファイルの先頭に「.LOG」と書いておけばOKです。あとはメモ帳でファイルを開く毎に



こんな感じでファイルを開いた日時が自動的に付与されます。

Windows 7及びWindows 8のメモ帳で確認しました。

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を並べて対応しています。

もっとスマートな方法もあるかもしれませんが、参考になれば。


2014年7月27日日曜日

VBScriptでUTF-8等の文字コード変換を行うためのポイント

VBScriptやClassic ASPでUTF-8等のShift_JIS以外の文字コードを扱いたい場合があります。
ただ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



■ ブラウザ ヘルパ オブジェクト(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内で正しく動作するかはまた別の問題であり、動作確認が必要です。想定通り動作しなかった場合はコード修正が必要になりますので注意して下さい。




2014年7月16日水曜日

VBScriptフリーズ時にまず確認すべきポイント

VBScriptで記述したバッチ処理がフリーズするトラブルが発生することがあります。この際にまず確認すべきポイントを紹介したいと思います。


■WScript.ShellのExecメソッド標準出力バッファ4KBの罠


もしフリーズが発生する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プロパティから標準出力結果を適宜読み出すだけでは、場合によってはデッドロックを引き起こす可能性もあるとのこと。

現場ではそのようなケースに遭遇したことはないですが、運悪くそのケースにハマった場合は標準出力をリダイレクトしてファイルに吐き出す等の対応が必要になります。


2014年7月8日火曜日

WebアプリケーションでOfficeファイルを作成する業務要件を実装する際の注意点

 Webアプリケーションの業務要件で
  • サーバ上で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からナチュラルメトリックという画面のピクセル計算をより厳密に行う仕組みが導入された
  • IE11よりナチュラルメトリックの適用範囲が大きく広がり、イントラネットゾーン以外では原則有効になる
  ナチュラルメトリックというのはIE9では サブピクセルフォントと呼ばれていたもののようです。
IE9 のサブピクセル フォント - Internet Explorer ブログ (日本語版) - Site Home - MSDN Blogs


 要はナチュラルメトリックにより画面のレンダリングのロジックが変わるため、スタイルシートなどでピクセルを細かく指定している画面については、画面崩れが発生する可能性があるわけですが、IE11では、 セキュリティゾーンの違いのみでナチュラルメトリックによる画面崩れが発生する場合があるということになります。

 今までの常識だとドキュメントモードの違いで画面表示が崩れるというようなことはありましたが、今後はセキュリティゾーンの違いでも画面崩れが発生するケースも多くなると思われますので、注意して下さい。

 なお回避策として、metaタグ
 <meta http-equiv="X-UA-TextLayoutMetrics" content="gdi">
を入れることで、 ナチュラルメトリックが適用されなくなるとのことなので、とりあえずの回避策としてはこれが一番簡単そうです。