私も C# は詳しくないのですが、調べたところ NativeWindow というクラスを使用するとフックできるようです
試しに何かキーが押されたらプログラムを終了するという処理の『キー判定』の処理をフックした
ウィンドウプロージャで行うようにしたサンプルを組んでみましたので、よろしければご覧ください m(_ _)m
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ウィンドウプロージャをフックした処理を行うクラス( NativeWindow を継承する )
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
internal class TestNativeWindow : NativeWindow
{
public bool KeyDown = false; // キーが何か押されたら true にするメンバー変数
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
// キーが押されたメッセージだったら KeyDown に true を代入する
case 0x0100 /* WM_KEYDOWN */:
KeyDown = true;
break;
}
base.WndProc(ref m);
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// DXライブラリを使用するメインの処理
DX.ChangeWindowMode(DX.TRUE);
if (DX.DxLib_Init() < 0)
{
return;
}
// ウィンドウプロージャをフックした処理を行うクラスを new
TestNativeWindow TNWindow = new TestNativeWindow();
// DXライブラリが作成するウィンドウを AssignHandle でフック
TNWindow.AssignHandle(DX.GetMainWindowHandle());
// フックしたウィンドウプロシージャでキー入力が判定されるまでループ
while (DX.ProcessMessage() == 0 && TNWindow.KeyDown == false )
{
DX.WaitTimer( 16 );
}
// プログラムを終了する前に ReleaseHandle でフックを解除
TNWindow.ReleaseHandle();
DX.DxLib_End();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~