2008年7月29日火曜日

[.NET]Controlのstatic変数

以前、GDD Blog: [.NET]キーボードステータスの取得(その2)でControlのstatic変数からキー押下情報を取得できるという記事を書きましたが。このControlのstatic変数、ほかにも以外に使えそうなプロパティがあるので紹介します。


  • DefaultFont コントロールの既定のフォント
  • ModifierKeys 押下されている修飾子キー(以前紹介)
  • MouseButtons 押下されているマウスボタン
  • MousePosition 押下されたマウス座標
  • IsKeyLocked(メソッド) CapsLock、NumLock、ScrollLock が押下ON状態か判定

いやー以外と使えそうなのがそろっていますねぇ。

2008年7月28日月曜日

[.NET]キーボードステータスの取得(その2)

GDD Blog: [.NET]キーボードステータスの取得では「p/invokeでないと無理」と記載しましたが、アレが誤りであることがわかりました。で、実装はこのようなかんじ。
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
    {
        //シフトキー押下の処理
        MessageBox.Show("緊急停止!!");
    }

2008年7月25日金曜日

[.NET]enumの不思議

ふと、以下のような定義の場合、enm1.data1 == enm1.data3の式が成り立つかどうか気になりました。で実行してみました。答えはTrue。いやー意外な結果でした。

enum enm1
{
    data1 = 100,
    data2= 200,
    data3 = data1,
}

System.Diagnostics.Debug.WriteLine("enm1.data1 = enm1.data3 = " + (enm1.data1 == enm1.data3));


ついでにほかのバリエーションもいろいろ試してみました。
enum enm1
{
    data1 = 100,
    data2= 200,
    data3 = data1,
}

enum enm2
{
    data1 = 100,
}

System.Diagnostics.Debug.WriteLine("1. enm1.data1.Equals(enm1.data1) = " + enm1.data1.Equals(enm1.data1));
System.Diagnostics.Debug.WriteLine("2. enm1.data1.Equals(enm1.data3) = " + enm1.data1.Equals(enm1.data3));
System.Diagnostics.Debug.WriteLine("3. enm1.data1.Equals(enm2.data1) = " + enm1.data1.Equals(enm2.data1));
System.Diagnostics.Debug.WriteLine("4. enm1.data1.Equals(100) = " + enm1.data1.Equals(100));
System.Diagnostics.Debug.WriteLine("5. enm1.data1.Equals((enm1)100) = " + enm1.data1.Equals((enm1)100));

System.Diagnostics.Debug.WriteLine("6. " + ((enm1)100).ToString() );
System.Diagnostics.Debug.WriteLine("7. enm1.data1 = enm1.data3 = " + (enm1.data1 == enm1.data3));


結果は以下のとおり。

1. enm1.data1.Equals(enm1.data1) = True
2. enm1.data1.Equals(enm1.data3) = True
3. enm1.data1.Equals(enm2.data1) = False
4. enm1.data1.Equals(100) = False
5. enm1.data1.Equals((enm1)100) = True
6. data1
7. enm1.data1 = enm1.data3 = True


実験の結果、値が同じでかつ型が同じであれば等価。という意味に取れますね。

2008年7月23日水曜日

[.NET]ホスト名にアンダースコア ("_")が含まれると...(ASP.NET)

@itの掲示板を眺めていると、localhostだと大丈夫なのに、ホスト名で動作させるとログインできない。との問題が発生している人がいました。
で、結果として、ホスト名に("_")が含まれるためその現象が起こっていたとの事らしい。備忘録としてメモ。

情報もとのソース「[PRB] Internet Explorer セキュリティ修正プログラム MS01-055 のインストール後、セッション変数が要求間で保持されない」


で対処方法がちょっと悲しい。
  • ドメインとサーバーの名前変更する
  • ドメイン名やサーバー名ではなく、IPアドレスでアクセスする

後からではどうしようもない場合も。。。

2008年7月12日土曜日

[他]VBScriptのデバッグ

最近、レガシーASP(ASP.NETどではない)の仕事をやっていた経緯があり、とある調査を依頼されました。
依頼されたものの、ぜんぜん関係ないところから、振って沸いた話であったため、社内に動作させる環境がありませんでした。IISの環境はありましたがDBやその他もろもろの環境を構築するのに手間がかかりそうだったので、とりあえずコードから追っかけてみると、とあるメソッドの障害っぽことがわかりました。そのためASPの動作環境を作る前に、ソースの一部を抜粋して、vbsとして動作するようにしてみました。vbsであれば、

 CScript [scriptname.vbs] //X

でデバッガを起動することができます。予想したとおり、障害の原因らしきものにあたりがつきました。その旨を依頼元に回答しました。あとは本番系の環境で試してもらうしかないですね。

とりあえずノルマは達成できましたが、その後うまく行ったのだろうか。。。

2008年7月10日木曜日

[.NET]C#の演算子

基本的にC/C++と同じようなシンタックスのC#の演算子ですが、ときどき「あれ?アノ演算子ってどうかくんだっけ?」とど忘れ(老衰)してしまうことがあります。
今日は、xorの演算子が思い出せませんでした。で調べると「C# の演算子」に一覧でまとめられていました。便利なので備忘録としてメモ。

ちなみにxorは[^]ですが、必要だったのはキー押下のCTRL/SHIFT/ALTのビットを落とすのが目的だったので、ANDとビット反転ということに後で気がつきました。