ちょっとC#でパスワードを覗いてみた。

パスワード入力用のテキストボックスで、入力しても”******”としか表示されないものがありますよね。あれ、不便ですよね。自分で入力したのに見えないなんて理不尽ですよね。

そこで、無理やり入力内容が見える様にするプログラムを書いてみました。Vector辺りを探せばあるような気がするけど気にしたら負けでしょう。

実はアレ、ただのテキストボックスなのでメッセージ投げれば好きなように弄れちゃうんですよね。で、今回投げたのはEM_SETPASSWORDCHAR。EnumChildWindows関数でウィンドウを列挙して手当たり次第にPostMessageしてます。

はい、コードです。

 

 

 

これでパスワード丸見えなんですってば。

逆P/Invokeを駆使してTTBaseのプラグインを作れるか?

TTBase http://ttbase.sourceforge.jp/

逆P/Invoke http://www.artonx.org/diary/20081124.html#p01

これでC#でTTBaseのプラグイン作れるんじゃね?と思った。

TTBase.cs TTBaseで使用する構造体とか定数とか

 

 

Class1.cs TTBaseに公開するメソッドを実装

 

 

上のコードをビルドしたら

 

 

でILにする。

逆P/Invokeを参考にILを編集

 

 

とILからDLLを作成。メッセージの意味はよくわからないけど、多分成功してる。

これで出来たDLLをTTBaseのディレクトリにコピーしてTTBaseを起動するも…プラグインとして認識されない。

どこが上手く行ってないのかもわからない状態。

http://twitter.com/takeshik/statuses/2419234928

とか言われたけどC++/CLIとかキモいし。

http://twitter.com/takeshik/statuses/2419254967

とか突っ込まれたけどその通りだと思う。

C#でやることに意味があるのですよ。C#可愛いよ、C#可愛い。

でもC#で出来て無いから何の意味も無いという…。

C#|PropertyGridコントロールに表示されるプロパティ名を変更するには?

PropertyGridコントロールに表示されるプロパティ名を変更するには?

SPDVer 1.74に取り込み完了。

とメモしておけば万一上記リンクが切れてもSPDVer 1.74のコードからサルベージ可能。あにすのコード保管庫に転載するわけにもいかないしね。

あにすのコード保管庫はあにすが書いたコードの保管庫だけど、あにすが書いてないコードも保管したいな。何か良い方法は無いだろうか。公開ブックマーク的なものがあればいいのかな。

C#|ユーザーコントロールをD&Dで移動&サイズ変更

[C#]ユーザーコントロールをドラッグアンドドロップで移動で面白そうなことやってるので書いてみました。結構泥臭くなりますね。ちょっと嵌ってしまって時間が掛かったのはここだけの秘密。

C#|テキストボックス上でのD&Dでフォームを移動する

TextBoxコントロール上でのドラッグ&ドロップでフォームを移動させようとした場合、文字列を選択する操作とバッティングしないようにする必要がある。

以下の実装で良い感じに動いた。


 

素早くドラッグ&ドロップしたときに文字が選択されてしまいフォームの移動がキャンセルされるのを回避する為にdAndDMoveFlag(センスねー名前w)でフラグを立てている。

あとはそんなに難しいことしてないと思う。

※textBox1のTextが空の場合にLinesプロパティの境界外を参照して例外が発生していたので修正した。

※気が変わったので違うロジックでゴッソリと書き換えた。

C#|IronPython|C#でIronPython2.0をホスティングする

http://www.voidspace.org.uk/ironpython/ip_in_ip.shtml (英語)

英語は読めないからソースだけ読んで参考にしました。

【参照設定】

IronPython2.0のディレクトリより

IronPython.dll

Microsoft.Scripting.Core.dll

Microsoft.Scripting.dll

【Form1.cs】

using System;

using System.Windows.Forms;

using IronPython.Hosting;

using Microsoft.Scripting.Hosting;

public partial class Form1 :Form {

  public Form1() {

    InitializeComponent();

  }

  private void button1_Click(object sender, EventArgs e) {

    ScriptEngine engine = Python.CreateEngine();

    ScriptSource source =

        engine.CreateScriptSourceFromFile(“./test.py”);

    ScriptScope scope = engine.CreateScope();

    //IronPythonにformという変数名でthisを渡す。

    scope.SetVariable(“form”, this);

    //ここで実行

    source.Execute(scope);

    //IronPythonのtestVarという変数のオブジェクトを取得する。

    object value = scope.GetVariable(“testVar”);

    this.button1.Text = (string)value;

  }

}

【test.py】

form.Text = “Hello,World!”

testVar = “test”

こんな感じで、IronPython側にオブジェクトを渡してIronPython側で操作したり、IronPython側のオブジェクトをC#側で取得することが出来ました。

IronPythonとのオブジェクトのやり取りはScriptScopeオブジェクトを通して行うんですね。

これだけでもかなり面白いです。IronPython1.0からはかなり勝手が変わったようです。