2009年3月28日土曜日

C#で typedef

ないのかー!
って探したけど。無かった。代替方法はあったよ。

無い理由は
C#では一つのクラスは一つのクラス名ってことみたいで、
typedef は考慮されずにC#の仕様がきまったことだそうです。
将来は typedef が仕様として組み込まれる可能性はありますが。。


代替方法としては、using を使うってこと。
ただし、宣言したファイル内のみでしか使えないのがネック。。

privateな宣言やったらそのファイルのみで良さそうなので、
使えそうやけど。
他のクラスでも使っていたりすると共通性が無くなってしまうので、
混乱しそうですね。


あんまし便利そうには見えない using の使い方でした。
頭の片隅においておこっと。

.

C#Win32APIの構造体を扱う

C#からWin32APIの構造体ここではRECTをとりあげますが、
他の構造体も同じように扱うことが出来ます。

直接C#のRectangleを使えたら。。便利なのに。
とは思いましたが、構造体のメモリ配置などの関係により、
直接Rectangleは使えません。

で、新しく構造体を定義して使うのですが、メモリ配置がネックになってきますので、
メモリ配置(レイアウト)を決める属性をつけて構造体を定義します。

詳しくはMSDNを参照のこと。
■LayoutKind 列挙体

http://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.layoutkind(VS.71).aspx


構造体の定義が出来れば後はただ使うだけっと。
コードは以下のようになります。
----------------
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[DllImport("user32.dll")]
public static extern void GetWindowRect(IntPtr hWnd, out RECT wndRect);
----------------


こんな感じ。

.

2009年3月23日月曜日

だーてぃー

ダーティー。
最近まで知らなかった言葉です。
今の仕事で出てきてなんやこれ?って感じた所に
悪態のプログラマにて記事があったので紹介っと。

■悪態のプログラマ「ダーティなデータ」
http://ameblo.jp/argv/entry-10228407175.html

ダーティー。
これからもちょこちょこ聞く機会がありそうです。
覚えとこっと。

.

C#でアクティブウィンドウの取得

アクティブウィンドウを取得する方法
アクティブプロセスからウィンドウハンドルを取得する。
直接アクティブウィンドウを取得する.NET FrameWorkのクラス(関数)は無いみたい。

Win32APIを使っての取得方法を紹介。
以下のクラス(関数)を使ってアクティブプロセスを取得し、
取得したプロセスのProcess.MainWindowHandle でウィンドウハンドルを取得します。

---------------
/// Win32API の extern 宣言クラス
public class WinAPI {
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
public static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
}

public class sample {
///


/// アクティブなプロセスを取得する
///

/// アクティブプロセス
public static Process GetActiveProcess()
{
// アクティブなウィンドウハンドルの取得
IntPtr hWnd = WinAPI.GetForegroundWindow();
int id;
// ウィンドウハンドルからプロセスIDを取得
WinAPI.GetWindowThreadProcessId(hWnd, out id);
Process process = Process.GetProcessById(id)
return process;
}
}
---------------

取得したウィンドウハンドルとWin32APIを使って、
様々なプロセスに対しての操作が可能となります。

.

2009年3月22日日曜日

C#でWin32APIを呼び出す

方法はDLLをインポートして、メソッドを extern 宣言するだけ。
引数や戻り値はC#の型にあわせればOK。
あわない型であれば、コンパイル時にエラーが出ます。

MoveWindow 関数は以下のように宣言しました。

-------------
public class Test {
[DllImport("user32.dll")]
public static extern int MoveWindow(IntPtr hwnd, int x, int y, int nWidth, int nHeight, int bRepaint);
}
-------------

気をつけないといけないのは。。
Win32で使われている構造体ですね。
これらについてはまた書きます。

.

2009年3月15日日曜日

タブ型のターミナル

業務でターミナルを複数開いて作業していて
ウィンドウの管理が面倒やって探して見つけたのが、
タブ型のターミナル。
非常に便利だったのでおすすめのフリーソフトとして紹介します。

Poderosa
オープンソースのフリーソフトです。
ウィンドウを分割して、二つのターミナルを同時に見れるのがめちゃ便利です!
アクセスした設定もファイルとして残しておけるのが他PCに移っても
使えるので便利です。
Cygwin も同じタブで動かせるのもかなり重宝しています。



.

ファイルパスからファイル名を取り出す(シェルスクリプト)

シェルスクリプトで
ファイルパスからファイル名を取り出す方法です。

-------
filepath=/usr/local/test.txt
filename=${filepath##*/}
-------
こんなんで出来るのかーと。。
ビックリですわ。

.

iPhone アプリ開発の勉強で使っている書籍たち

iPhone アプリ開発の勉強で使っている書籍です。


Objective-C と Cocoa の勉強に使いました。
書籍に書いてあるサンプルアプリを作成しながら勉強して、
Objective-C の基礎と Xcode の基礎を学のにはちょうどよかったです。
1から初めるには良い書籍だと思います。


今読み進めている書籍。
Objective-C の基礎から iPhone SDK の説明とiPhoneアプリ触り始めには良いですね。
ちょこちょことサンプルアプリを作りながら読むと良い勉強になりそうです。



まだ読んでない書籍。。。
読んだらまた更新します。
読んだ人の評判は良いですね!

.

2009年3月14日土曜日

シェルスクリプト

シェルスクリプト
覚え書きっと。


■ if
if [ 条件式 ]
then
...
else
...
fi

■while
while [ 条件式 ]
do
...
done

.

ラベル