トップページ > 記事閲覧
c#からのSetHookWinProc
名前:Karaage 日時: 2022/04/07 15:45

お世話になっております。 c#からDXライブラリのウインドウプロージャをフックしたいのですが、c#用のDXライブラリにはSetHookWinProcがありませんでした。 独自にフックしようと試みましたが、知識不足でうまくいかなかったので質問させていただきました。 C#用DXライブラリでウインドウプロージャをフックする方法をご教授いただけますと幸いです。
メンテ

Page: 1 |

Re: c#からのSetHookWinProc ( No.1 )
名前:管理人 日時:2022/04/08 20:00

私も 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(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
メンテ
Re: c#からのSetHookWinProc ( No.2 )
名前:Karaage(解決) 日時:2022/04/10 23:35

ありがとうございます! おかげさまで目的の動作を実現することができました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存