サービスのインストールは管理者モードで

Posted in 開発 on July 31st, 2010 by masuda — Be the first to comment!

ちと、ハマったのでメモ書きです。

.NET Framework を使うと Windows Service を簡単に書けます。

というか、ほとんど Windows アプリケーションのようにサービスを作るプロジェクトが、Visual Studio 2008/2010にはあります。

20100731_02.jpg

で、さっくりとサンプルを作ってインストールします。

インストールは、コマンドプロンプトで installutil.exe ってのを動かします。

標準のプロンプトでなくて、Visual Studio Tools に入っているプロンプトを使います。これを使うと開発環境用の path があらかじめ設定されます。

で、サービスをインストールする場合は、

installutil serv506.exe

のようにインストールする訳ですが、 何故か、System.Security.SecurityException: のエラーを出して失敗する。

何故か?

どうやら、コマンドプロンプトを管理者モードで動かさないと駄目なんすね。

そんな訳で、管理者モードでプロンプトを開いて無事インストール。

アンインストールは

installutil /u serv506.exe

な風にスイッチを使ってアンインストール。

そこで、ちょっと、

20100731_01.jpg

「アンインストール完了しました」。。。噛んでます、思いっきり(笑)。

 

 

WebBrowserで、内部のDOMを扱う DomElement プロパティ

Posted in 開発 on July 29th, 2010 by masuda — Be the first to comment!

気晴らしに TwiNetReader を開発していますが、

20100729_05.jpg

上記のように、テキストボックスも消すことができました。

ええ、これで、晴れて「つい読み専用」ということで。

# 実は「返信」ボタンをクリックした時に、現れるという仕組みを入れています。

暫く、自分で使ってから公開しますが、ノウハウの部分をちょとだけ。

右上の広告を消すのは、こんなソースです。

      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

使い方は、

  1. 「mshtml.tlb」 を参照設定する( mshtml.dll ではない)
  2. 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 は、再表示するために保存しているのです。

 

NewQXエディタのキーカスタマイズメモ

Posted in QXエディタ on July 29th, 2010 by masuda — Be the first to comment!

NewQX を、2週間ほど使っているのですが、実にいいです。

カラーリングを変更して、常駐リストその他を消して、Visual Studio 風に使っています。

20100729_02.jpg

色設定なんかは、

Moonmile Solutions Blog » NewQXの色替えをしましたよ

http://www.moonmile.net/blog/archives/1044

を参考にしてください。

さて、エディタを使うときに、編集作業にマウスを使う人と、キーボードを使う人がいると思うのですが、私は主にキーボード派です。emacs 愛用者ということもあって、ファンクションキーよりも、Ctrlなんとかのキーを使います。

NewQXやQX32のキー定義は、「qxKey.ini」というファイルに定義されていて、こんな感じで直接編集できます。

20100729_03.jpg

GUI でできるマクロがあったような気がするのですが、見つけたら追記しておきますね。

さて、私が変更しているショートカットは、

  • マークの設定/解除 MarkToggle
  • 次のウィンドウへ WindowChange
  • 次のペインへ WindowNextPane

CTRL  SPACE = MarkToggle

CTRL  DOWN = WindowChange

CTRL  UP = WindowNextPane

マークの設定は、F2 に割り当てられているのですが、ちと、遠いので、Ctrl + Space に割り当てます。

次のウインドウも、F11 で可能なのですが、ちと、遠いので、Ctrl + ↓キーです。

# 本当は、Ctrl + PageDown にしたいんだけど、SCROLL の指定が効かないっぽい。

# 後で、ML に投げます。

次のペインというのは、画面分割のことですね。

こんな風に、Word のように分割ができます。

20100729_04.jpg

QX32の場合は、新しいウィンドウを開いて並べて表示させていたのですが、NewQX は、元から分割のモードがあります。

これを「ペイン」という呼び方をするのですが、これを行き来するときに、Ctrl + ↑キー で移動できるようにします。

# ちなみに、タスクバーが、Windows 2000(古ッ!!!)風なんですが、OS は Windows 7 で、UI だけ変えています。

# このほうが、落ち着いて原稿、コーディングができるので、このスタイルです。

皆さんもお試しあれ。

追記 2010/07/30

PageUp が PRIOR、PageDown が NEXT と分かったので、

CTRL  PRIOR = WindowNextPane
CTRL  NEXT = WindowChange

で、Ctrl + PageDown でウィンドウの切り替えができますね。

 

GNUstepでobjective-cを学ぶの続き

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は外してしまって、コマンドライン系のアプリか、ゲームロジックなんか。

ちょっと思案中。

 

 

WPFのアクセスキー制御

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 でアンパサンド(&)を使うと、記述的に困難だからでしょうね。

なので、メニューにアンダーバーが使えない、という弊害があるわけですが。

# __ のようにアンダーバーを重ねるといける?

さて、問題は、メニューが無いときです。

20100728_03.jpg

ツイート専用ツールの場合、メニューを付けるのは嫌だし、ショートカットの記号(ツイート(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 で、ひとつ削除

って具合です。