[Powershell] UTF-8 でエンコードされた標準出力を受け取る

2バイト目に ASCII コードがくることを想定していないコンソールアプリなど、標準出力を UTF-8 として使用するコンソールアプリは少なくない。
しかし、PowerShell は標準では UTF-8 の標準出力をそのまま読み取ることができない。
(後述するが、単純な方法はある)

そういった場合でも、.NET Framework を駆使すれば、ちゃんと文字列として取得できる。

続きを読む

XPath で、Doctype 宣言以外のコメントだけ抜き出す

DOM level3 に対応したブラウザで使える、 javascript の document.evaluate であれば、XPath ですべてのコメントを抜き出すときに、

var result = document.evaluate("//comment()", document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

等としておけば問題ないが、一部の HTML パーサでは、HTML の DOCTYPE 宣言もコメントとして扱ってしまうものがある。
…と言うより、 "<!" で始まって、">" で終わるものはすべてコメントとして扱ってしまうような場合について。

続きを読む

IEではhtmlのid属性がwindowのプロパティになる

JavaScriptでは、varによる変数宣言をしていない場合、グローバルオブジェクト(window)のプロパティとして扱われる。
IEでは、htmlのid属性が、このグローバルオブジェクトのプロパティになってしまうらしい。

以下のコードで、「click!」というアラートが出たら、 window.btn01 に button の DomElement が入っているということになる。(Firefox や Chrome 等では、エラーになってなにも表示されないはず)

<button id="btn01" onclick="alert(btn01.innerHTML);">click!</button>

しかも jQuery が有効な状態で、

btn01 = null;

などとやろうとすると、btn01 変数にはすでに button の DOM が入っているのと、IE8とjQueryの相性の問題で、IEではエラーになってしまう。

まぁ、

var btn01 = null;

と、var つけてやるだけでOKだし、そもそもIE9ではエラーにならないので、古いブラウザ使うなってコトでFAでもよい気がしないでもないけどね…
とはいえ、9/1現在、IE8がシェア35%と圧倒的なので無視できないのよねぇ
参考: 日本のバージョン別ブラウザシェアグラフ (StatCounter Global Statsより)

Intel Data Migration Software は RAM Disk と相性によってフリーズ

Intel Data Migration Software がアンインストールできなくなった根本の原因は、こいつをインストール直後に起動したら、snapman.sys のエラーでブルースクリーンになったせいなのだが、いろいろ試したところ、このツールがRAM Diskと相性が悪いご様子。
Dataram RAMDisk を入れていたのだが、これをアンインストールした後、Intel Data Migration Software を実行したところ、ブルースクリーンにならずうまく実行できた。

久々にブルースクリーンから抜けられなくなって焦った。
使い終わったら、intel data migration software をアンインストールしてから、RAMDisk 入れることをおすすめする。

まぁ、起動時につながってるドライブ走査するから、そんときにRAMDiskがあるとエラーになるんだろう。

Intel Data Migration Software がアンインストールできない

インストールに失敗して、Intel Data Migration Software がアンインストールできなくなってしまった。
どうやら、インストールに失敗した上、アンインストーラ用のmsiが登録されなかったようだ。
「プログラムの機能」からアンインストールしようにも、IntelDataMigrationSoftware.msi が見つからないとエラーになる。
続きを読む

SetPoint をローカルでインストール

Logicool マウスを使うのに、SetPoint 等のマウスツールが欠かせない。
私はサイドキーの手前をダブルクリック、奥をエンターに割り当てるのが好きだ。

ところで、このSetPoint、バージョン5以降は、インストール時にインターネットに繋がっていないとエラーになってしまう。
「インストールを完了することができませんでした。インターネット接続を確認してもう一度実行してください。」
セットアップにオンライン環境が必須とか…
しかも最近のマウスにはインストーラCDすらついていない。
そして最大の問題点は、今時「プロキシに対応していない」と言うことだ。
続きを読む

[powershell]引数が配列のメソッドが呼べない

PowerShellのなにが便利って、.NETアセンブリが読み込めちゃうので、
もう何でもかんでもできてしまうところ。
Windows7から標準で入っているので、業務用ツール作るのに最近よく使う。
それは置いといて…
表題の、引数が配列のメソッドが呼べない件。

続きを読む

コマンドプロンプトのcompコマンドが、いちいち「ほかのファイルを比較しますか」と聞いてきてウザい

2019-06-12 追記:

いつからか不明だが、少なくとも Windows 10 の最近のバージョンでは、 comp.exe/M その他のファイルを比較するメッセージを表示しない オプションが追加されている。

以下は、 Windows 7 当時の話。


コマンドプロンプトで、2つのファイルまたはファイルセットの内容を比較するコマンド、comp.exe

しかしこのコマンド、終了時にいちいち
「ほかのファイルを比較しますか」
と聞いてきてかなりウザい。

これを表示させないオプションがなぜか存在しないのだ。

特にバッチでループさせ対するときに、毎回毎回停止してしまうので、
すこぶる迷惑なのだが…

で、これを回避する方法だが、 "N" を自動で入力させるほか無い。
つまるところ、

echo n | comp Data1 Data2

という風に、echoを使って "n" と改行をパイプしてやれば、めでたくcompでループすることができる。

仕組みがわかればなんてことはないのだが、気づかないとちょっと悩んでしまうところだ。

エディットコントロールの高さを、文字列や横幅にあわせて自動的に変更する

横幅がぐりぐり変わり、複数行表示可能なエディットコントロールを、文字列にあわせて、高さを調節したい。

DrawText 関数に、 DT_CALCRECT フラグを設定することで、指定した幅に収まる文字列を表示するのに必要な矩形の取得だけをすることができる(描画されない)。
コレを使ってコントロールの高さを計算し直せば実現できる。

上のエディットコントロールを書き換えると、その文字列が下のエディットコントロールに反映され、サイズが変更されるようなサンプルを作った。

ばりばり ATL/WTL 使ったコードだが、基本的に普通にWin32API呼んでも同じようにできる。

続きを読む