ゲーム制作・プログラミングのブログ記事一覧  

ターミナルサービスを実行したクライアントIPアドレスをテキストに保存させてみた

一応、RDPなどでWindows Serverにログインするとシステムイベントに記録されていたりするんですが、そのままだと利用しづらいしって事で、ログインスクリプトで保存してみるテスト。
まー、最初はVBSでいけるかと思ったけどうまくいかず、結局Delphi7でコンソールアプリ作ってた。
何という計画性のなさ。流石俺。 (ぇー

やった事は単純で、ターミナルサービスにログインしてきたユーザのクライアント側のIPアドレスをWTSQuerySessionInformation関数のWTSClientAddressにて取得しております。
動くのはIPv4接続時のみで、IPv6・IPX・NETBIOS・Consoleの場合はそれを出力して終わり。
IPv6は頑張れば取れるんですが、Windows Server 2008のIPv6の返し方がおかしいらしくパッチ当ててないと動作させれないっぽいのでパス。

Download: IP_is_WTS.zip (50.7KB)

Delphiのソースコード付ですが、汎用ライブラリのJEDI API Libraryを使ってます。本当はWtsApi32のpasラッパーを自分でちゃらっと作ろうと思ったけど、知恵熱出たので断念(笑)
JEDIをパスの通ったところに置くか、プロジェクトよりパスを通さないとコンパイルできないかも。

使い方としてはこんな感じ。Windows Server 2003で動作確認。
IPisWTS.exe -d -f "c:\iplogs.txt"
次のようなバッチファイルを作って、ログインスクリプトへ登録すると良いかも。

@echo off

@rem 実行しているディレクトリ
set SCRIPT=%~0
for /f "delims=\ tokens=*" %%z in ("%SCRIPT%") do (
set SCRIPT_DRIVE=%%~dz
set SCRIPT_PATH=%%~pz
)
%SCRIPT_DRIVE%
cd %SCRIPT_PATH%

@rem IPの記録
IPisWTS.exe -d -f "%SCRIPT_DRIVE%%SCRIPT_PATH%ip_logs.txt"


記録先のファイル名指定は絶対パスじゃないと動作しないので注意。
あと、当然ながら実行と記録をする場所に対して、読み込み・書き込み権限が必要。
記録されるのは時間(オプション)とIPアドレスで、タブ区切り。こんな感じで記録される。
2009/08/07 19:17:55 192.168.24.50
2009/08/07 19:18:32 192.168.24.31
2009/08/07 19:22:55 192.168.24.161
2009/08/07 19:23:01 192.168.24.123

使い方としては、DMZ環境への中継サーバとか、後はMetaFrameでのIP記録ですかね?
でも、MetaでIP引くのは業務アプリとかに載せた方が効率良いですし。
RDPのセッションIPを取るぐらいにしか役に立たないかも。
ちょっぴり頑張った割には、使い道無いですな(笑)

| コメント(0) | トラックバック(0) |

時限式体験版をずっと使えるか試すツールを作ってみた

良くありますよねぇ、時限式の体験版ソフト。
大体が、1ヶ月とかのみ起動して無制限に使える物です。
では、ずっと日付が今日のままだったらどうなるのか・・・。

つー事で、最高に頭の悪いツールを作ってみたー。
うん、そのまんまだね。1秒おきに日付と時間を設定し直します。
TimeStop.jpg
初回起動時に、起動した時に時刻などが表示されます。
後は“開始”のボタンを押せば、1秒おきに設定を書き直し続けます。

うん、頭悪いね(笑)

一応、終了時に設定した時間を記録し、次回起動時に表示してくれるはず。
最小化したときはシステムトレイに移動。

Delphiのソース付きですが、一部非標準のコンポーネントを使ってます。
ビルドし直したい方は、探して入れてください。
まぁ、内容ほとんど無いんで、参考にはならないと思いますけど。

ダウンロード: TimeStop Ver0.1 (220 KB)

| コメント(0) | トラックバック(0) |

Delphiでゲーム制作:画像を表示させてみる

前回はキー入力だったんで、今回は画像表示。

Delphiでの画像表示を行うコンポーネントに「Image」があるけど、ゲームとは用途がちょっと用とが違うっぽい。そんなわけで、メモリー上に画像を読み込んで直接描画するよー。

ちょろっと調べてみると、Delphiで画像を扱うクラスにTBitmapと言うのがあるとか。
こいつを使ってやれば、普通にビットマップを読み込む事が出来るみたい。
まずは、使用するグローバル変数を宣言。

private
{ Private 宣言 }
//キャラクター画像読み込み用
CharaImage: TBitmap;

そしてTForm1.FormCreateにて使用できるようにする。

procedure TForm1.FormCreate(Sender: TObject);
begin
//ウインドウのサイズを指定
Form1.Width := 640;
Form1.Height := 480;
//ウインドウの最大化を阻止
Form1.BorderIcons := [biSystemMenu,biMinimize];
Form1.BorderStyle := bsSingle;
Form1.Color := clWhite;
//描画タイミング
Timer1.Interval := 10;
Timer1.Enabled := True;
//キャラクターファイルの読み込み
CharaImage := TBitmap.Create;
CharaImage.LoadFromFile('Character.bmp');

end;

上の方のウインドウ固定とかはおまけ。デフォルトだと普通にフォームが変更できるので。
後、描画処理はタイマーを使って処理する事にした。

なお、CreateしたらFreeしないといけないみたいなんで、TForm1.FormDestroyに取得したメモリー領域を開放するように記述した。

procedure TForm1.FormDestroy(Sender: TObject);
begin
CharaImage.Free;
end;

そんな感じで、後はFormに画像をそのまま書き出すだけ。その書き出す方法はいろいろあるけど、今回は次のようにTForm1.Timer1TimerにてWin32APIのBitBltをそのまま叩いて描画した。

//フォームを白で塗りつぶす
BitBlt(Form1.Canvas.Handle, 0, 0, 640, 480, Form1.Canvas.Handle, 0, 0, WHITENESS);
//キャラクターを描画
BitBlt(Form1.Canvas.Handle, CharaX, CharaY, CharaImage.Width,
CharaImage.Height, CharaImage.Canvas.Handle, 0, 0, SRCCOPY);

そんな感じで作ったのがこちら:ImageDisplay.zip

| コメント(0) | トラックバック(0) |

Delphiでゲーム制作:キー入力を処理してみる

せっかく買ったDelphi7。使わなきゃ勿体ない。
つー事で、ゲーム処理の基本、キー入力を頑張ってみた。

幸い、DelphiにはVBのように便利な作りで、イベント処理を勝手に拾ってくれるみたい。
まずはFormに適当な感じでLabelを貼り付ける。その後、オブジェクトインスペクタのOnKeyDownとOnKeyUpの隣側をダブルクリック。procedureを自動作成する。
KeyTest1-1.jpg KeyTest1-2.jpg
出来たprocedureに次のように記述。

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Label1.Caption := IntToStr(Key);
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Label1.Caption := '';
end;


出来たEXEが次のファイル:KeyTest1.zip

実行してみると分かるけど、キーボードを押した時、Windowsが与える数字を見れる。
つー事で、あとはこれに肉付けをしてあげればいいだけ。

ただ、気になる事にキーずっと押した場合、入力を検知した後、いったん間を置いた後に入力が続く現象が現れたり。そんな感じなので、private宣言に次のようなBoolean型を宣言して処理する事にした。

private
{ Private 宣言 }
Up_Button: boolean;
Down_Button: boolean;
Right_Button: boolean;
Left_Button: boolean;
A_Button: boolean;
B_Button: boolean;

後は、これにキーを押した時と上げた時のフラグを付けて、Timerで状態を監視してあげれば完成。
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
37: Left_Button := True;
38: Up_Button := True;
39: Right_Button := True;
40: Down_Button := True;
88: B_Button := True;
90: A_Button := True;
end;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

case Key of
37: Left_Button := False;
38: Up_Button := False;
39: Right_Button := False;
40: Down_Button := False;
88: B_Button := False;
90: A_Button := False;
end;
end;

出来たファイルがこちら:KeyTest2..zip

うん、意外と簡単にキー入力の処理って出来るんだなーっと。
まー、後々の事を考えたら、DirectX Importとかで処理した方がいいんでしょうけどね。
手軽にドラクエ作成が目標なので、あんまり堅苦しい事はしないのです。

| コメント(0) | トラックバック(0) |

ゲームを作るとゲーム機が貰えるらしいよ

free-game-logo.gif

つー事で、PlayStation3が欲しい今日この頃です。
そんな感じで、ふらーっとネットを漂うと気になる物を発見。
何でも、有限会社ふりーむが主催するゲームコンテストふりーむ!ゲームコンテストの賞品として、お好きなゲーム機本体1台というのがあった!

よし、今日からゲームプログラマーになる!www

残念ながら、現在募集している第4回は2008年12月31日の24時で閉めきりのようです。
ガッツリ制作しても、ぎりぎり間に合わない程度かと。

まぁ、ゲーム制作した事あるのかと聞かれれば、無いとはっきり言えますけどねー (ぇw
多分、そんなに難しい物ではないはず。3Dを使わなければ。
個人的にドラクエ6を目指して制作したいなーって思っております。

おk、道は険しいがPS3のために頑張ってみるか!