問題タブ [wndproc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
662 参照

pinvoke - クラスカーソルをnullに設定するにはどうすればよいですか?

長文すみません!残念ながら、いくつか説明する必要があります... WinForms を使用しないアプリケーション (Unity3d では Windows 用) があるため、System.Windows.Forms 名前空間の一部である Cursor クラスを使用できません。 . それでも、カーソルの現在の形状を設定できるようにしたいと思います。

多くの調査とグーグル検索の結果、user32.dll 内の特定のメソッドに対する P/Invoke 呼び出しを使用すると、これが可能であることがわかりました。私はそれを(一種の)動作させました:

以下を使用して、ウィンドウへのハンドルを見つけます。

また、classname に null を指定し、windowname にウィンドウのタイトルを指定します。次に、返された IntPtr を使用してこれを呼び出します。

すべての低レベル ウィンドウ メッセージを処理する WindowProc へのポインターをターゲットにするために、インデックスに "-4" を指定し、次を使用します。

マネージ コードに実装する新しい WndProc デリゲートへのネイティブ ポインターを生成します。その署名は次のようになります。

要約すると、私は基本的にネイティブ ウィンドウ プロシージャをマネージ コールバックでオーバーライドしているので、すべてのウィンドウ メッセージを処理するのは私の責任になります。しかし、標準ウィンドウ プロシージャの実装全体を書き直すことには興味がありません。カーソルがウィンドウ上にあるときにマウス カーソルの形状を描画する方法を制御できるようにしたいだけです。そのために、次の関数でデフォルトのウィンドウ プロシージャを呼び出すことができます。

そしてその直後に、次を使用してカーソルを別のものに設定します。

この種の作品。:) 「ちょっと」と言います。これは、デフォルトのウィンドウ プロシージャが最初にカーソルをクラス カーソルに設定し、その直後に、実装によって使用したいカスタム カーソルに設定されるために発生するちらつきが少しあるためです。カーソルを設定します。この状況は、クラス カーソルを null に設定することで解決できます。そうすることで、システムはカーソルを描画せず、代わりにアプリケーションがすべてのウィンドウメッセージに対してカーソルを設定することを期待します。これはまさに私が行っていることなので、誰がカーソルを設定するかをめぐる争いを止め、ちらつき。これは、次の MSDN で文書化されています。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms648393%28v=vs.85%29.aspx

クラスカーソルをnullに設定する必要があると説明している場所。しかし、それは私の知識が不足しているところです。:( 上記の記事で説明したように、クラス カーソルは SetClassLong で設定されます。

ただし、カーソルの新しい値のデータ型は IntPtr です。このデータ型は null 可能ではありません。null を渡すとコンパイラがエラーを出し、IntPtr.zero を渡しても機能しません。では、この記事のアドバイスをどのように達成すればよいでしょうか? P/Invoke を使用してクラス カーソルを null に設定するにはどうすればよいですか?

0 投票する
1 に答える
2558 参照

.net - .NET アプリケーション用の Spy++ に似たプログラムはありますか?

私は周りを見回しましたが、私のニーズに合ったものは見つかりませんでした。Visual Basic で記述された自分のアプリケーションに送信される Win32 (?) メッセージをプログラムがインターセプトできるようにしたいと考えています。

補足として、「Win32 メッセージを傍受する」というのは正しい言い回しですか?

いずれにせよ、精緻化は問題ありません。スパイ ツールが、WndProc を使用してプログラムで傍受するのと同じメッセージ、つまり SendMessages と PostMessages を傍受することを望みます。

.NET フレームワーク イベントをインターセプトするプログラムを探しているわけではないことを明確にしたいと思います。

ありがとう。

編集:ウィンドウとその子コントロールのハンドル表示されますが、メッセージは表示されません。Windows7 64ビットを使用しています。Spy++ のバージョンは 8.00.50727 です

半解決済み; 仮想マシンで動作する Spy++ の代替手段 ( Window Detective ) を手に入れました。これには間違いなく満足しており、落ち着いても問題ありません。

私が見つけたすべての「スパイのような」プログラムがなぜ「メイン」の PC で動作しなかったのか、まだ疑問に思っていますが、気にする必要はないと思います。

0 投票する
1 に答える
1274 参照

c# - ウィンドウレス C# プロセスでの WM_ イベントの処理

私はかなり長い間見回してきましたが、これを行う良い方法を見つけることができないようです.

基本的に、私は WPF を使用する C# プロセス (可視ウィンドウを持たない) を持っており、WM_ イベントを処理する必要があります (ユーザーがログオフまたはマシンの再起動を選択したときにエレガントにシャットダウンできるようにするため) WM_CLOSEWM_DESTROY

を使用して関数へのポインタをSystem.Windows.InteropServices呼び出して提供することを提案する、私が見た多くのソリューションがあります。これに関する問題は、私が知る限り、実際に表示されているウィンドウに依存していることです (この場合、ウィンドウはありません)。AddHookWndProc

提案されているが機能しない別のWndProc方法は、WinForm のメソッドをオーバーライドすることですが、このプロセスには目に見えるフォームやウィンドウがありません。

メッセージのみのウィンドウに言及しているものも見つかりました。まだ WM_ イベントを受け取るある種の非表示のウィンドウ。私が見たところ、これはMicrosoft.WindowsCE.Formsアセンブリでのみ使用できます。http://msdn.microsoft.com/en-us/library/microsoft.windowsce.forms.messagewindow.aspxに示されているように、プロジェクトにこのアセンブリへの参照を追加し、MessageWindow をサブクラス化しましたが、それでも機能しないようです。WndProc 内のブレークポイントはヒットしていません。

どんな手掛かり?

0 投票する
1 に答える
2301 参照

winapi - win32コントロールをサブクラス化し、古いバージョンのcomctl32.dllとの互換性を維持するにはどうすればよいですか?

共通コントロールのバージョン6.0(comctl32.dll)は、古いバージョンのWindowsでは使用できないコントロールをサブクラス化するための新しいアプローチを実装しています。いずれかのバージョンの共通コントロールライブラリをサポートするシステムで機能するようにサブクラス化を実装するための最良の方法は何ですか?

0 投票する
1 に答える
1397 参照

python - 別のアプリケーションのwndprocにフックしますか?

誰かが私を助けてくれることを願って、小さな質問があります。他のアプリケーションに接続する方法はありますWNDPROCか?

他のアプリのメニューバーにメニューを挿入し、すべてのメニュー項目のコマンドを定義したいという状況です。

一部のWin32API関数(user32.dll)を使用してメニュー項目を含むメニューを挿入できましたが、クリックすると実際に何かが実行されるようにそのメニュー項目のコマンドを設定できません。

グーグルを使って、wndprocessに関する情報を取得しました。送信されたIDコマンドをインターセプトして、いくつかの関数をトリガーする必要がありますが、行き詰まります。

誰か助けてもらえますか?

0 投票する
1 に答える
1948 参照

c# - C#MDI-MDIChildが範囲外の場合、MDIのサイズ変更後にMDIスクロールバーを非表示にする

MDI親(Form1)とMDI子(Form2)があります。現在、Form2内に次のコードを配置することでForm2がForm1の境界を超えたときに、 Form1のスクロールバーを無効にしました。

一方、 Form1のスクロールバーは、ユーザーがForm2Form1の境界外にドラッグしたときに、Form2が範囲外になるかどうかを表示しません。ただし、ユーザーがForm1のサイズForm2の範囲外になる位置に変更すると、スクロールバーが表示されます。

これが発生しないようにするにはどうすればよいですか?

0 投票する
2 に答える
696 参照

.net - フォーム イベントがあるときに WndProc を使用する必要があるのはなぜですか?

WndProcフォーム アプリケーションでの使用について基本的な質問があります。WndProcフォームイベントが利用可能な場合、メソッドの使用法を知りたいです。カスタム メッセージを作成する必要があるのはどのような場合ですか? MSDNは、Windows メッセージを処理するためだけに使用されることを示しています。

0 投票する
2 に答える
1902 参照

java - WndProc を JNA に置き換えると例外で失敗する

JNA を使用して Java プログラムで Windows メッセージをキャッチし、独自の WndProc メソッドを挿入しようとしています。いくつかのメッセージ タイプにのみ関心があるため、メッセージを前の WndProc に転送する必要があります。私のテスト (Windows 7 の Java 1.7.0_03、64 ビット) では、作成されたウィンドウにマウスを移動するとすぐにこの転送が失敗するようで、次の例外が発生します。

どのファイルにアクセスしようとしているのですか? メモリアクセスなどで何かが完全に間違っていると思います... :(

JNA の最新バージョン 3.4.0 を使用しています。ここまたはインターネット上の他の場所で見つけた多くのコード例は、User32 がこの種の作業に適したいくつかのメソッドを定義した JNA 3.2.x (jna.jar と platform.jar に分割される前の任意のバージョン) を使用しているようです。JNA/プラットフォームの新しいバージョンでは、これらのメソッドが欠落しています。そのため、ほとんどの型を独自に定義し、jna.jar のみを使用し、platform.jar は使用しません。以下は、テストに使用するコードで、例外を生成します。何が問題なのか、なぜ例外が発生するのか分かりますか?

どんな助けでも大歓迎です、ありがとう!

0 投票する
1 に答える
1563 参照

c# - MVVM-Model を使用しているときに WPF で WndProc を使用するにはどうすればよいですか?

誰でも私を助けてもらえますか?WPF で WndProc を使用したいのですが、次のように MainWindow.xaml.cs で使用したくありません。

別のクラスで使用したい理由は、uEye カメラがメッセージを介して通信し、それらを「キャッチ」する必要があるためです。Main View ViewModel モデルを使用しているため、MainWindow.xaml.cs にコードを入力したくありません。

0 投票する
1 に答える
10392 参照

c++ - PostMessage による文字列の送受信

この大まかなトピックに対処するオンラインのリソースはすでにいくつかありますが、私にとって有効な答えはまだ見つかりません.

VB.netプロセスとC++プロセスの間で完全な通信を行いたいと考えています。C++ プロセスとの間で文字列を送受信できるようにしたいのですが、当面は次のことを達成する必要があります。

文字列をC++プロセスに送信し、処理します。

これにより、不確実な点がいくつか作成されますが、これをできるだけ単純に保つように努めます...

VBで次の関数宣言を使用します。

そして、メッセージを次のように送信します。

C++でメッセージをキャプチャするための次のメソッド宣言を使用します。

そして、次を使用して文字列にアクセスできるかどうかのテストのために;


不必要だと思われる多くの詳細をざっと読みましたが、尋ねてください。あなたに与えられるでしょう。

私の問題は、メッセージ受信されて「処理」されることですが、C++ プロセスによって作成されたメッセージ ボックスにテスト メッセージが含まれていません (「受信済み:」と表示されます)。

では、PostMessage/SendMessage を介して VB から C++ に文字列を送信するにはどうすればよいでしょうか?




解決:

解決策については受け入れられた回答を参照してください...さらに、文字列を受け取る方法は次のとおりです(C++):


そして最後に、ここで IPC の例を使用してメッセージを送信しました。この例では C# を使用してメッセージを送信しますが、必要なのはその概念だけでした (そのようなコードを VB に変換するのは公園を散歩することであることは言うまでもありません)。私の VB 実装では、文字列をヌル文字で終了する必要はありませんでした。