箇条書きな日記その時その時の箇条書きな記録 |
「VS.NET 2003」 で WIN32API を簡単に使う
2007-12-12-Wed-02:26
まず、Visual Studio用のアドイン「PINVOKE.NET」をインストールするためのファイル「pinvoke.zip」を下記のサイトからダウンロードして解凍、Setup.exe を実行してインストールをする。インストールは「next」ボタンを押して進むだけ。(ダウンロードサイト)→ GotDotNet User Sample
使い方は、Visual Studio を起動してプロジェクトを作成してコードを表示したら、コードの上に
using System.Runtime.InteropServices;
を記述。そしてWIN32API を呼び出すためのコードを挿入したい部分(Class のブロック内のどこか)で右クリック、右クリックメニューの一番上の「 Insert Pinvode Signatures... 」を選択する。ダイアログボックスが出てくるので、「 What function do you need? 」のテキストボックスに使いたいWIN32API の関数名を入力して、一番右の「Go」ボタン(またはリターンキー)を押して検索を実行する。検索が完了して下に現れるラジオボタンでC# にチェックが入っているのを確認したら下のボタンを [ Insert ] → [ Close ] の順に押してコードが挿入される。
これでコードを挿入した WIN32API の関数が使えるようになる。
また、別ファイルにまとめて記述するときは static と exern の間に public を入れておくのを忘れないようにする。
static public extern bool Beep(uint dwFreq, uint dwDuration);
※参考ページ
→ @IT:.NET TIPS Win32 API呼び出しを手軽に記述するには?
→ @IT:.NET TIPS Win32 APIやDLL関数を呼び出すには?
--------------------------------------------------------------
(メモ) → [ Windows Media Player ] command line メモ
--------------------------------------------------------------
「VS.NET 2003」 で WebBrowser を組み込む
2007-12-02-Sun-20:26
ここでは、「Visual Studio .NET 2003」にて WebBrowser コントロールを追加して使用する方法を記します。まず、WebBrowser コントロールを使うには実行環境、開発環境(SDK)共に「.NET Framework 2.0」以上が必要なので、以下のサイトからダウンロードしてインストールします。
→ .NET Framework Developer Center: ダウンロード
--------------------------------------------------------------
(!訂正) やっぱり必要ありません。Ax〜 なので ActiveX の部品でした。
--------------------------------------------------------------
次に、以下の手順を実行します。
(1)「Visual Studio .NET 2003」を起動して [ 新しいプロジェクト ] → [ Visual C#プロジェクト ] → [ Windows アプリケーション ] で新しいプロジェクトを作成しフォームを表示させる。
(2)メニューから [ プロジェクト ] → [ 参照の追加 ] でダイアログボックスを表示させたら [ COM ] タブを選択し、一覧から Microsoft Internet Controls と Microsoft HTML Object Library をそれぞれダブルクリックして追加したらOKをクリックしてダイアログを閉じる。
(3)ツールボックスのコンポーネントタブのところで右クリックして [ アイテムの追加と削除 ] を選択してダイアログボックス表示させたら、[ COM コンポーネント ] タブを選択し、一覧から [ Microsoft Web Browser ] にチェックを入れてOKをクリックしてこのダイアログボックスを閉じます。
この(1)(2)(3)の手順で、コンポーネントタブに新しいコントロール [ Microsoft Web Browser ] が追加されます。このコントロールをツールボックスに追加する作業はこの一回で、次回から新しいプロジェクトを作成するときには最初からツールボックスのどこかに [ Microsoft Web Browser ] を見付けることが出来ます。
さて、それではこの [ Microsoft Web Browser ] をフォームに貼り付けてWebページを表示させます。まず、このコントロールをフォームに貼り付けて適当な位置と大きさにします。そして、フォームが読み込まれたら適当なURLのページを表示させるようにするので、フォーム内をダブルクリックするかプロパティーのイベントから void Form1_Load() イベント関数を作成し、ブロック内に this.axWebBrowser1.Navigate("http://www11.ocn.ne.jp/~ikalu/"); などの適当なURLを指定したコードを書き込んで完成です。
これをビルドして実行すると指定したURLのページが表示されます。

このコードは次のようになります → code007
※参考ページ
「ビジュアルC#.NETの WebBrowser コントロールの転送と戻るボタンを使用する方法」
→ http://support.microsoft.com/kb/330280/ja
「Microsoft HTML Object Library C# - Google 検索」
→ Microsoft HTML Object Library C#
--------------------------------------------------------------
(メモ) [ csc /help ] → Visual C# 2005 コンパイラのオプション
--------------------------------------------------------------
テストソフトの作成(5) - 添付画像を表示する -
2007-12-02-Sun-00:32
今回は添付画像がある場合に横のボタンを表示して、それが押されたならば添付画像を第一回目に作成したフォーム「Form2.cs」に割り当て中央に表示する。今回でこのテストソフトは完成となる。それでは、まず「Form2.cs[デザイン]」のフォームを表示させて、プロパティウインドウからイベント関数を追加する。イベント関数は2種類(フォームとピクチャーボックスに一つずつ)になる。
(1)ピクチャーボックスがクリックされたらこのウインドウを消す(閉じる)
(2)フォーム(ウインドウ)がフォーカスを失ったら、このウインドウを消す(閉じる)
フォームを選択状態にして、プロパティウインドウのイベントボタン(黄色い稲妻のアイコン)を押してイベントを表示したら。[ フォーカス ] カテゴリにある [ Deactivate ] の文字の上でダブルクリックする。そうするとイベント関数 void Form2_Deactivate() が登録されてコードが表示される。
コードが表示されるが、またフォーム「Form2.cs[デザイン]」に表示を戻して、今度はピクチャーボックスを選択。同じようにプロパティーウインドウから [ アクション ] カテゴリにある [ Click ] の文字の上でダブルクリックをしてイベント関数 void pictureBox1_Click() を追加する。
ブロック内に書き込む処理コードはどちらも「 this.Close(); 」の一行だけ。

また、このフォームのピクチャーボックスのサイズを外部からアクセスして変更するので、「 private System.Windows.Forms.PictureBox pictureBox1; 」 の 「 private 」 の部分を 「 public 」 に変えておく。
「Form2.cs」のコードは次のようになる → code005
(赤字の部分が追加、または変更した箇所)
次に「Form1.cs」に添付画像を表示するためのコードを書き込んでいく。
このコードは次のようになる → code006
コードでは、添付画像表示用のボタンコントロールに前回作成したイベント関数 void control_Click() を登録している。また、イベント関数のブロック内での処理では、このボタンを識別(マッチング)して添付画像を表示するためのコードを追加している。
また、添付画像がない場合にはボタンを機能しないようにしておくので、広場のXMLデータを読み込む関数内でそのためのコードを追加している。
これで、このテストソフトは完成である。
これまでの課程をまとめたソリューションファイルをダウンロードする場合は以下の場所から
ダウンロード→
テストソフトの作成(4) - ユーザーのページを開く -
2007-11-30-Fri-20:26
今回はピクチャーボックスがクリックされたらPIYOユーザーのページを既定のブラウザで開くようにする。このコードは次のようになる → code004
(赤字部分が前回から追加したコード)
ピクチャーボックスがクリックされたときに呼び出されるイベント関数 void control_Click() をピクチャーボックスのコントロールに追加する。この関数は次回、添付画像を表示するときにも使う。
関数の処理では、どのコントロール(オブジェクト)から呼び出されたものなのかを判断するために反復処理を行いコントロール(オブジェクト)のマッチング作業を行っている。
そして、コントロールが特定できたなら既定のブラウザでそのユーザーのページを開くようにしている。
また、ピクチャーボックス内にマウスが入ったときにカーソルを変更するようにするために「 void pictureBox_MouseEnter() 」関数をコントロールの設定で[ MouseEnter ]イベントに登録している。それと同じく、ピクチャーボックス外にマウスが出たときにカーソルを元に戻すために「 void pictureBox_MouseLeave() 」関数をコントロールの設定で[ MouseLeave ]イベントに登録している。
テストソフトの作成(3) - プロフィール画像を表示する -
2007-11-29-Thu-17:13
今回はプロフィール画像をダウンロードして表示させる。まず、画像をダウンロードするための関数を作る。画像をダウンロードするための処理コードは「プロフィール画像」「添付画像」共に同じものになるので共用関数とする。
共用関数は void piyoImage_download(int i, piyo piyo_node) とする。
第一引数に順序番号、第二引数に前にenumで定義したノード変数を入れる。このノード変数によって「プロフィール画像」「添付画像」それぞれのURLアドレスが引き出される。
関数の処理は、ダウンロードする画像を保存するためのフォルダ(stock_images フォルダとする)を作成してからダウンロードするコードを書く。保存先のパスは、ノードに画像ファイルのURLが入っているのでそれを利用して作成する。
画像をダウンロードしたら、ダウンロードした画像をピクチャーボックスに割り当てる。
コードは次のようになる → code003
(赤字部分が前回から追加した部分)
stock_images フォルダに保存する画像はこのソフトを使うたびに増えていくので、定期的に削除する必要がある。実用的に考えると、このソフトを起動するたびにフォルダのサイズを調べてある一定の容量を超えたら古い方のファイルから自動で削除するなどの仕組みを考える必要がある。
テストソフトの作成(番外編1) - 広場にメッセージを送信する -
2007-11-28-Wed-19:50
テストソフトの作成をいったん休んで今回は広場にメッセージを送信する方法を記する。広場にメッセージを送信するには受信のGETメソッドとは違いPOSTメソッドを使う。
ブラウザの送信(POST)機能を使用して書き込む場合は下記のようなフォームを作成することで書き込みが出来る。
送信時にブラウザはフォームに書き込まれた日本語をURLエンコード(%なんたらかんたら〜〜)に変換してから送信する。
また、このソースを書いてから保存するときはエンコードの種類を「Unicode(UTF-8)」にする。
→ code011(htmlソース)

※ソフトウェアに書き込み機能を実装する具体的な方法は、参照の追加から System.Web.dll を追加して下記のようなコードを記述する。
→ code008
※参考ページ
→ WebRequest/WebResponseクラスでPOSTメソッドによりデータを送信するには?
→ バイト型配列のデータを文字コードを指定して文字列に変換
テストソフトの作成(2) - テキストボックスに発言を表示 -
2007-11-27-Tue-18:57
今回は前回配置した5つのテキストボックスに広場の発言を取得して表示する。発言の取得方法は「C#で広場の書き込みを一件表示する」の回と同じコンポーネントを使う方法である。前回配置した右下の[ button1] (PIYO Get Message 05 Users)が押されたら取得するようにするので、このコードの部分にクリックのイベント関数を追加する。void button1_Click() 関数を作ってから、この関数を「 button1.Click += ・・」でボタンのクリックイベントに登録する。そして、void button1_Click() 関数に広場の発言を取得するコードとこの発言内容をテキストボックスに割り当てるコードを書く。また、同時にニックネームと発言日時をグループボックスのテキストに割り当てる。
このコードは次のようになる → code002
(赤字部分が前回から追加した部分)
数字だと分かり難いのでノードの番号の意味を enum で定義するようにした。
enum piyo { piyoid = 0, nickname, profimg, no, body, rescount, date, tmpfile, tmpmovurl };
または、piyo クラスを作って static 変数を定義してもいい。こちらの方がキャストする必要がないので楽かも知れない。
public class piyo
{
public static int piyoid = 0;
public static int nickname = 1;
public static int profimg = 2;
public static int no = 3;
public static int body = 4;
public static int rescount = 5;
public static int date = 6;
public static int tmpfile = 7;
public static int tmpmovurl = 8;
};
広場の発言のノードは以下のようになっている。
0 : piyoid
1 : nickname
2 : profimg (プロフィール画像のURL)
3 : no (発言番号)
4 : body (メッセージ本文)
5 : rescount (コメント数)
6 : date (投稿日時)
7 : tmpfile (添付画像のURL)
8 : tmpmovurl (添付動画のURL)

これをコンパイルして実行すると広場の発言が得られる。
テストソフトの作成(1) - コントロールの配置 -
2007-11-26-Mon-22:08
今回は、フォームを作成しコントロールを配置してGUIを作る。実際のエンジン部分は次回以降とする。まず、前々回の要領でフォームを作成しコンポーネント( Microsoft XML, version 2.0 )を追加する。
次に、フォームのプロパティを以下のように変更する。
ウインドウスタイル - MaximizeBox : False
配置 - Size : 854, 678
配置 - StartPosition : CenterScreen
表示 - FromBorderStyle : FixedSingle
そしてフォーム内で右クリックし「コードの表示」を選択してコードを表示する。
そして矢印(→)のファイルで赤字の部分のコードを追加する→ code001
コードを見ての通り、カスタマイズし易いようにコントロール類は全て手書きで作成している。コントロール類を作成するときの注意点としては、[ textBox、pictureBox、button ] の親が [ groupBox ] であり、[ groupBox ] の親が [ Form1 ] であるので、その順序で [ Controls.Add() ] 関数で登録作業を行っている点が一つ。
また、ビジュアルスタイルを「XPスタイル」にしているので、グループボックスとボタンのフラットスタイルをシステムにして、・・・
→ this.groupBox[i].FlatStyle = System.Windows.Forms.FlatStyle.System;
・・・エントリポイントのところで、EnableVisualStyles()関数を実行している。
また、グループボックスの子のコントロールであるピクチャーボックスとボタンのロケーションの座標は、グループボックスの左上が基準(0,0)になる。
それでは次に、添付画像表示用のフォームを作成する。
メニューから、[ ファイル ] → [ 新しい項目の追加 ] で「Windows フォーム」を選択し [ 開く ] ボタンを押して「Form2.cs」を追加。プロパティーを以下のように変更する。
ウインドウスタイル - ShowInTaskbar : False
配置 - StartPosition : CenterScreen
表示 - FromBorderStyle : None
次に、フォーム上に pictureBox を配置(追加)。 Form1 とは違って、フォームデザイナで適当なところに配置する。大きさや位置は添付画像を表示するときに変更するので適当でいい。
今回はこれにて終了。次回からイベント関数を追加していく。
テストソフトの作成
2007-11-26-Mon-15:08
さて、それでは今回から数回に分けて、低機能ではあるがある程度形になったソフトウェアを作っていこうと思う。出来上がりのソフトは以下の通りである。

ソフト名:「 [ PIYO API ] test software 」
ダウンロード→
<仕様>
・右下のボタンが押されたら、広場から5件の書き込みを取得する。
・プロフィール画像がクリックされたらそのユーザーのページをブラウザを起動して表示する。
・添付画像がある場合は、右側にボタンを表示してそのボタンが押されたならば原寸大の添付画像をダウンロードして中央に表示する。
C#で広場の書き込みを一件表示する
2007-11-24-Sat-14:50
さて、それでは本格的にデスクトップアケーションへの応用を試みてみよう。ここでは「Microsoft Visual Studio .NET 2003」を使う。
まず新しいプロジェクトを作成し(「Visual C#プロジェクト」で「Windowsアプリケーション」を指定)フォームを表示させたら、メニューから [ プロジェクト ] → [ 参照の追加 ] を選択。ダイアログが出たら [COM]タブを選択。スクロールバーをずーと下の方まで下げていって[ Microsoft XML, version 2.0」を見付け横の選択ボタンをクリック、そうすると下のテキストボックスに追加されるので、これでOKをクリックしダイアログを閉じる。

次にフォーム内をダブルクリックし「Form1_Load」関数を表示させる。
private void Form1_Load(object sender, System.EventArgs e)
{
・・・・・・
}
これはフォームが作成されるときに呼び出される関数で、ここにコードを書き込んでソフトが実行されると同時にPIYOの書き込みを取得するようにする。
次に以下のコードを上記のブロック内に書き込む。

テキスト → piyo_api_text001.txt
これをコンパイルし実行すると、メッセージボックスに1件だけ書き込みが表示される。

APIKEYの取得と生XMLデータの表示
2007-11-23-Fri-10:40
まずは APIKEY の取得PIYO にログインしてから [設定] 画面にアクセス。横の[APIの設定]を選択すると [PIYO-API利用規約] が出てくるので、よく読んでから下の [登録] をクリック。[APIKEY]が表示されるのでそれをメモっておく。

[ 広場の発言の取得 ]
http://piyo.fc2.com/contents/api/?mode=public&key= [ここに取得したAPIKEY]
この出来上がったURLをブラウザで表示すると生のXMLが表示される
上記は発言数を省略しているが省略した場合は30件が表示される。発言数を指定する場合は上のURLに [&limit =10] などを追加する。
・・続く







