8月 2005 - 投稿
Windows Forms アプリケーションで、いろいろ画面の描画処理(特に画像を動かしたり、頻繁に書き換えたり)すると、速度が遅くなったり、ちらつきが発生したりします。
その解決方法。ダブルバッファリングを使用します。
フォームのロード時イベントに、以下の文を追加します。
Me.SetStyle(ControlStyles.DoubleBuffer, True)Me.SetStyle(ControlStyles.UserPaint, True)Me.SetStyle(ControlStyles.AllPaintingInWmPaint,
Virtual PC環境におけるゲストPCの通信のキャプチャ。結果的には、できました。
環境:(ホストOS)Windows XP Professional SP2IP:192.168.20.10
(ゲストOS)Windows XP Professional SP2IP:192.168.23.22
実験内容:ゲストOSの通信のキャプチャ(ゲストOSで http://www.msn.co.jp にアクセスしてみる)
キャプチャは、Etherealというパケットキャプチャソフトで実験しました。キャプチャのライブラリは、WinPcapですね。
Virtual PC でゲストOSを使っていて、ホストOSのパフォーマンスモニタでホストOSの Network Interface をモニタしても、VPCの通信はキャプチャできません。
そりゃそうですよね。別のPCであってホストOSをルータorゲートウェイとして利用していないと、キャプチャできませんもんね。
もちろん、コンピュータ名を指定してカウンタを追加してあげれば大丈夫です。
そういえば、Ethereal などのパケットキャプチャソフトを使った場合はどうなるのかな?ホストOS/ゲストOSの通信も両方キャプチャできちゃうのかな。
Windowsでのサービスのサービス名の取得です。
参照設定で、System.ServiceProcess.dll を参照に加えてください。
以下のコードでは、存在するサービス名を列挙し、コンソールに表示させています。
Function PrintSvcs() Dim Svcs() As ServiceProcess.ServiceController
今回新しくなったC# 2.0(.NET Framework 2.0 / VS 2005)の新機能(?)です。
Iterators(イテレータ)を使うことで、列挙型を簡単に実装することができるようになるとのこと。
私はVBメインなのであまりC#で開発したことがないのでよくわからないのですが…
IEnumeable で列挙型を実装した場合、for each 文でループさせた場合の状態を管理する必要があったようで…。それが、Iteratorsを使うことによって簡単に実装できるようです。for each
UNIX/Linux には、カーネルや現在実行システムのバージョン等の情報を uname というコマンドで取得できます。
これを、SFU(Windows Services for Unix)で状態を表示してみると…。
$ unameInterix
$ uname -aInterix vpc-winxppro 3.5 SP-8.0.1969.1 x86 Intel_x86_Family15_Model2_Stepping9
$ uname -XSystem = InterixNode = vpc-winxpproRelease
インストール時に、カスタムインストールを選択し、Interix SDK をインストールしておく必要があります。SDK入れておかないと、configure 時に gcc が無いよって怒られます。
ちなみに、インストールしたのはbash-3.0GNUのサイトにあったのを使用してみました。
作業用のディレクトリとかにコピーして、
$ gzip -d bash-3.0.tar.gz
$ tar xvf bash-3.0.tar
$ cd bash-3.0
$./configure
$ make
SFU(Windows Services for UNIX)のディレクトリ情報は、本来のUNIXとは違います。(当たり前ですが)
まず、シェルを起動すると、ホームディレクトリに移動した状態となります。(UNIXでログインした直後と同じですね)具体的には、C:\Documents and Settings\(ユーザー名) がホームディレクトリとなります。$ echo ~ としてみると、/dev/fs/C/Documents and Settings/(ユーザー名)となります。
その他のドライブも/dev/fs/(ドライブ名(英字のみ))に割り当てられます。D:
Windows Services for UNIXでインストールされるシェルの種類です。
インストールすると、C Shell(csh)とKorn Shell(ksh)がインストールされます。
個人的には、Bashの方が好きなんですがね。
Bashのソースを入手して、コンパイルしてみようと思います。
VB.NETでは、2通りの方法でDLLが呼び出せます。ここでは、例として7-zip32.DLLの圧縮解凍を行うSevenZip関数を呼び出す方法をサンプルとして、書きます。
VB6形式Private Declare Function SevenZip Lib "7-zip32" (ByVal hWnd As Long, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Long)
VB.NET形式最初に、Imports
以前にも書いたかも。
VB.NETでは、System.IO.File.Exists を使うと、簡単にファイルの存在が確認できます。戻り値は、Boolernで返るので、判定が簡単。
例:File.Exists("C:\Windows\notepad.exe")
VB6だと、DIR関数があるけど、個人的に好きじゃないです。DIR関数は、そのファイルが存在する場合にだけ、そのファイル名がStringで返ります。
TechEdも終わり、VS2005 Beta2, Windows Vista Beta1 などといろいろベータ版が出てきて評価できるようになりました。
ここで、ベータ版を評価する際の注意点を。
お約束ですが、ベータ版はあくまで「ベータ版」なので、下手をするとデータが飛んだり、青画面のまま立ち上がらなくなったりします。当然、保証なんてものはありません。(でも、フィードバックはできます。物にもよりますが。)なので、仕事環境・本番環境などには入れないようにしましょう。できるだけ、Virtual PC