Posted in
開発 on July 31st, 2010 by masuda —
Be the first to comment!
ちと、ハマったのでメモ書きです。
.NET Framework を使うと Windows Service を簡単に書けます。
というか、ほとんど Windows アプリケーションのようにサービスを作るプロジェクトが、Visual Studio 2008/2010にはあります。
で、さっくりとサンプルを作ってインストールします。
インストールは、コマンドプロンプトで installutil.exe ってのを動かします。
標準のプロンプトでなくて、Visual Studio Tools に入っているプロンプトを使います。これを使うと開発環境用の path があらかじめ設定されます。
で、サービスをインストールする場合は、
installutil serv506.exe
のようにインストールする訳ですが、 何故か、System.Security.SecurityException: のエラーを出して失敗する。
何故か?
どうやら、コマンドプロンプトを管理者モードで動かさないと駄目なんすね。
そんな訳で、管理者モードでプロンプトを開いて無事インストール。
アンインストールは
installutil /u serv506.exe
な風にスイッチを使ってアンインストール。
そこで、ちょっと、
「アンインストールか完了しました」。。。噛んでます、思いっきり(笑)。
Tags:

Posted in
開発 on July 29th, 2010 by masuda —
Be the first to comment!
気晴らしに TwiNetReader を開発していますが、
上記のように、テキストボックスも消すことができました。
ええ、これで、晴れて「つい読み専用」ということで。
# 実は「返信」ボタンをクリックした時に、現れるという仕組みを入れています。
暫く、自分で使ってから公開しますが、ノウハウの部分をちょとだけ。
右上の広告を消すのは、こんなソースです。
HtmlDocument doc = webBrowser1.Document;
// 広告を消す
el = doc.GetElementById(“side_ad_base”);
el.Style = “display: none”;
ブラウザの Document プロパティを取得して、GetElementById メソッドで拾ってきて、スタイルを設定するだけ。
これをブラウザのCompleted イベントの中に入れればOKです。
さらに、昔の HTML DOM を知っている人ならば、ネイティブの DOM を扱いたいわけで、この場合は、「mshtml.IHTMLElement」を使います。
HtmlElement.DomElement プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=JA-JP&k=k(SYSTEM.WINDOWS.FORMS.HTMLELEMENT.DOMELEMENT);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true
使い方は、
-
「mshtml.tlb」 を参照設定する( mshtml.dll ではない)
-
mshtml.IHTMLElement i = doc.DomElement as mshtml.IHTMLElement;
な感じでキャストすればOK。
あとは、旧来のHTML DOM として扱えます。
これ、何故使うのかというと、なぜか .NET の DOM だと class 名が取れません。
なので、DomElement から、ClassName を参照しないといけないという、、、何故なんでしょうね?
そんな訳で、ツイートのテキストボックスを一括で消すように
foreach (HtmlElement item in doc.GetElementsByTagName(“fieldset”))
{
mshtml.IHTMLElement i = item.DomElement as mshtml.IHTMLElement;
if ( i.className == “common-form standard-form” ) {
el_input =item;
el_input.Style = “display: none;”;
break;
}
}
な、ソースを書いています。
el_input は、再表示するために保存しているのです。
Tags:

Posted in
QXエディタ on July 29th, 2010 by masuda —
Be the first to comment!
NewQX を、2週間ほど使っているのですが、実にいいです。
カラーリングを変更して、常駐リストその他を消して、Visual Studio 風に使っています。

色設定なんかは、
Moonmile Solutions Blog » NewQXの色替えをしましたよ
http://www.moonmile.net/blog/archives/1044
を参考にしてください。
さて、エディタを使うときに、編集作業にマウスを使う人と、キーボードを使う人がいると思うのですが、私は主にキーボード派です。emacs 愛用者ということもあって、ファンクションキーよりも、Ctrlなんとかのキーを使います。
NewQXやQX32のキー定義は、「qxKey.ini」というファイルに定義されていて、こんな感じで直接編集できます。

GUI でできるマクロがあったような気がするのですが、見つけたら追記しておきますね。
さて、私が変更しているショートカットは、
- マークの設定/解除 MarkToggle
- 次のウィンドウへ WindowChange
- 次のペインへ WindowNextPane
CTRL SPACE = MarkToggle
CTRL DOWN = WindowChange
CTRL UP = WindowNextPane
マークの設定は、F2 に割り当てられているのですが、ちと、遠いので、Ctrl + Space に割り当てます。
次のウインドウも、F11 で可能なのですが、ちと、遠いので、Ctrl + ↓キーです。
# 本当は、Ctrl + PageDown にしたいんだけど、SCROLL の指定が効かないっぽい。
# 後で、ML に投げます。
次のペインというのは、画面分割のことですね。
こんな風に、Word のように分割ができます。

QX32の場合は、新しいウィンドウを開いて並べて表示させていたのですが、NewQX は、元から分割のモードがあります。
これを「ペイン」という呼び方をするのですが、これを行き来するときに、Ctrl + ↑キー で移動できるようにします。
# ちなみに、タスクバーが、Windows 2000(古ッ!!!)風なんですが、OS は Windows 7 で、UI だけ変えています。
# このほうが、落ち着いて原稿、コーディングができるので、このスタイルです。
皆さんもお試しあれ。
追記 2010/07/30
PageUp が PRIOR、PageDown が NEXT と分かったので、
CTRL PRIOR = WindowNextPane
CTRL NEXT = WindowChange
で、Ctrl + PageDown でウィンドウの切り替えができますね。
Tags:

Posted in
開発 on July 29th, 2010 by masuda —
Be the first to comment!
最初に書いたのが、2010年2月、ってことで随分前になってしまいましたが。
ちと、mac mini 購入の資金も溜まったし、仕事部屋も構築したし、あとは、手元のお仕事をちゃっちゃと片付けて、iPad用のアプリを作りたいということで。
ちと、目次だけ作成します。
Moonmile Solutions Blog » GNUstepでobjective-cを学ぶ(1)
http://www.moonmile.net/blog/archives/595
Moonmile Solutions Blog » GNUstepでobjective-cを学ぶ(2)
http://www.moonmile.net/blog/archives/597
Moonmile Solutions Blog » GNUstepでobjective-cを学ぶ(3)
http://www.moonmile.net/blog/archives/599
Moonmile Solutions Blog » GNUstepでobjective-cを学ぶ(4)
http://www.moonmile.net/blog/archives/613
ここまで。
実際のiPadアプリを作るときは、cocoa ライブラリを使わないといけないし、mac 上で開発することになるので、手元に mac mini がないとどうしようもないので。
# それ用に書籍は買いましたが。
iPadのアプリであっても、ビューとロジックの分離は可能なはずなので、
- ロジック部分を objective-c で書いていく。
- ビューの部分を mac mini を使って書いていく。
という勉強の流れになるかなと。
GNUstepでobjective-cを学ぶ(4) では、インターフェースと継承、メソッドを後付けできることが分かったので、具体的に何か単独のアプリを作るといいですね。
UIは外してしまって、コマンドライン系のアプリか、ゲームロジックなんか。
ちょっと思案中。
Tags:

Posted in
開発 on July 28th, 2010 by masuda —
Be the first to comment!
アクセスキーというのは、いわゆる、ALT+なんとかキーで、メニューに飛ぶアレです。
Windows Form で作ったメニューの場合は、「ファイル(&F)」な感じで、「&」を付けるのですが、
WPFの場合には、「ファイル(_F)」な感じで「_」(アンダーバー)を付けます。
WPFでのメニューアクセスキー
http://blogs.wankuma.com/yo/archive/2008/02/05/121155.aspx
アンダーバーに変わっているのは、多分 XAML でアンパサンド(&)を使うと、記述的に困難だからでしょうね。
なので、メニューにアンダーバーが使えない、という弊害があるわけですが。
# __ のようにアンダーバーを重ねるといける?
さて、問題は、メニューが無いときです。
ツイート専用ツールの場合、メニューを付けるのは嫌だし、ショートカットの記号(ツイート(S))を付けるのも嫌だし。
というわけで、
AccessKeyManager クラス (System.Windows.Input)
http://msdn.microsoft.com/ja-jp/library/system.windows.input.accesskeymanager.aspx
を使います。
XAMLのほうに、
<Grid AccessKeyManager.AccessKeyPressed=”Grid_AccessKeyPressed”
として、アクセスキーのハンドラを設定しておいて、次な感じで、Key で振り分けます。
/// <summary>
/// アクセスキー制御
/// </summary>
/// <param name=”sender”></param>
/// <param name=”e”></param>
private void textBox1_AccessKeyPressed(object sender, AccessKeyPressedEventArgs e)
{
switch ( e.Key ) {
case “S” :
if ( textBox1.Text.Length != 0 ) {
button1_Click( sender, null );
}
break;
case “B”:
button2_Click( sender, null );
break;
case “D”:
buttonDel_Click(sender, null );
break;
}
}
Key 自体は、「ALT+キー」で押される、アルファベットの大文字(なぜか文字列)で渡されるので、それを指定します。
上記の例では、
-
ALT+S で、ツイート
-
ALT+B で、短縮URL
-
ALT+D で、ひとつ削除
って具合です。
Tags:
