問題タブ [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 投票する
1 に答える
360 参照

winforms - SAPI の ISpNotifySource::SetNotifyWindowMessage() が通知を WndProc() に送信しないのはなぜですか?

私は WinForms を使用しており、SetNotifyWindowMessage() を取得して WndProc にメッセージを送信しようとしていますが、そうではありません。

関数呼び出し:

WndProc:

注: initSAPI() は、マウス クリック イベントで呼び出されます。

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

security - 「App.exe」と「App.vshost.exe」のWndProcでの実行の違い

Control.WndProc メソッドを使用して別のアプリケーションの WM_ メッセージをリッスンする VS 2008/C# で開発されたアプリケーションを適応させようとしています。「app.exe」バージョンが実行されると、WM_USER メッセージが表示され、処理されます。ただし、「app.vshost.exe」バージョンが実行されると、これらの同じメッセージはアプリケーションに表示されなくなるため、処理されません。「.exe」バージョンと「vshost.exe」バージョンの両方が他の WM_ メッセージを受信して​​いるように見えます (WndProc にブレークを配置することにより、ただし、「vshost.exe」バージョンでは WM_USER メッセージをトラップできません。アプリケーションのセキュリティ設定「完全信頼アプリケーション」に設定されています。

さらに紛らわしいのは、同じソース コードを別のコンピューターに移動したときに、2 番目のコンピューターが "app.exe" と "app.vshost.exe" の両方のバージョンの WM_USER メッセージを表示して処理できたことです。私の開発用コンピューターの環境の問題であると信じています。

WM_USER メッセージの可視性の違いを説明できる私の開発環境のユニークな点について誰か教えてください。

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

c# - .Net の奇妙な WndProc バグ。VB.Net より具体的に

ETA: Visual Studio 2008 Express Edition を使用しています。

WndProc をオーバーライドして何らかの形で失敗した場合は、通常、コードが再び機能するまでコードをコメントアウトしてバックトラックします。

ただし、WndProc の奇妙な点は、次のように削除できることです。

それでもエラーがスローされます。

エラーをリセットするには、コードを削除して再入力する必要があります。

他の誰かがこれを経験しましたか?

到着予定時刻:

Chris Haas による以下の回答。

私は気づいていませんでしたが、この問題はリフレクターのコードを使用したときにのみ発生したに違いありません。Reflector は vb.net に誤って変換し、WndProc ベースへの呼び出しに余分なブラケットを挿入します。

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

c# - 外部プログラムによって作成されたウィンドウのメッセージを処理するためのサンプルソースコード?

GWLP_WNDPROCでSetWindowLongPtrを使用し、必要なメッセージ(WM_GETMINMAXINFOやMINMAXINFO構造体の変更など)を処理する独自のWndProcを作成する必要があることはわかっています。ただし、別のプログラム(notepad.exeなど)によって作成されたウィンドウに対してこれを実行したいので、C#/ WinFormsプログラムからこれを実行することはできません。挿入する必要がある、ネイティブC / C++DLLを作成する必要があります。ウィンドウを作成したプロセスで。

これを行うためのリンクまたはサンプルコード(ネイティブC ++ DLLとC#から呼び出して外部プロセスに挿入する方法)を提供できますか?

ありがとうございました

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

c# - Message to WndProc の値は 32Bit OS から 64Bit OS に変更されますか?

次のメソッドが .NET でオーバーライドされると、32 ビット OS と 64 ビット OS で異なるメッセージが表示されるようです。これは本当ですか?

protected override void WndProc(ref Message m)

次をキャッチしたい:private const int WM_LBUTTONDBLCLK = 0x0203;しかしWM_LBUTTONBLCLK、Windows 2003 64 ビットのインストールには、Windows XP 32 ビットにあったものとは別の "ID" があるようです。

提案?

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

wpf - カスタム WM_GETMINMAXINFO ロジックを使用して Win7 で Win+Shift+LEft/Right を処理するにはどうすればよいですか?

次のように WM_GETMINMAXINFO をフックする WPF アプリにカスタム Windows 実装があります。

それはすべてうまく機能し、ボーダレスウィンドウをタスクバーの上に置かずに最大化することができます。これは素晴らしいことですが、新しいWin7キーボードショートカットを使用してモニター間を移動するのは本当に好きではありません.

アプリがWin + Shift + Left / Rightで移動されるたびに、WM_GETMINMAXINFOメッセージが受信されますが、MonitorFromWindow(hwnd、MONITOR_DEFAULTTONEAREST)は、移動中のモニターではなく、アプリケーションが移動されたばかりのモニターを返しますTO、そのため、モニターの解像度が異なる場合、ウィンドウは間違ったサイズになります。

MonitorFromWindow以外に呼び出すことができるものがあるかどうか、またはWM_GETMINMAXINFOの前にフックできる「移動モニター」メッセージがあるかどうかはわかりません。「通常の」ウィンドウは問題なく動作するため、それを行う方法があると思います。

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

c# - C#フォームから別のフォームへのWndProcメッセージの受け渡し

私は 2 つの Windows フォームを持つ C# アプリケーションに取り組んでいます。どちらのフォームも全画面表示で、一方のフォームが透明なオーバーレイとして他方のフォームの上に表示されます。一番下のフォームには、Web ブラウザーが含まれています (これも全画面表示)。ジェスチャをキャプチャし、ボタンやその他のコントロールを画面に描画するために、透明なオーバーレイ フォームでタッチ入力を追跡しています。私がする必要があるのは、オーバーレイ フォームがその WndProc 関数で取得するすべての Windows メッセージを下のフォーム (またはフォーム内の Web ブラウザー コントロール) に送信することです。

基本的には、オーバーレイ上のジェスチャを処理するだけで済みます。特定の機能を提供するには、すべてのマウス メッセージを Web ブラウザに転送する必要があります。

オーバーレイからのメッセージを受け取って、下のフォームの WndProc メソッドを呼び出す単純な方法を試しました。(そして同様に、ブラウザ コントロール ウィンドウの WndProc にさらに渡そうとしました)。これらの方法はどちらも機能しません。また、メッセージ オブジェクトの HWnd パラメーターを単純に交換して、これを試みているときに下のフォーム/ブラウザーのハンドルにしようとしましたが、これもうまくいきませんでした。

では、試してみる方法や、フォーム間で Windows メッセージを渡す正しい方法を考えられる人はいますか?

ありがとう、アレックス

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

windows - どのメッセージがDefWindowProcによって処理されますか?

DefWindowProcによって処理されるメッセージとその方法に関するドキュメントはありますか?

最近、WM_SETFONT / WM_GETFONTが処理されていないことに気づきました。コードに間違いがあるかどうか、またはそれが予期される動作であるかどうかわからないため、次のWinMainを試しました。


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

multithreading - Delphi 6 : 非 VCL スレッドでトリガーされたブレークポイントがメイン スレッドの再描画を停止する

私はマルチスレッドの Delphi 6 Pro アプリケーションを持っており、現在鋭意開発中です。メイン スレッド (VCL スレッド) のコンテキストで実行されるコードにブレークポイントを設定しても、問題はありません。ただし、他のスレッドのいずれかのコードでブレークポイントがトリガーされた場合、ブレークポイントからアプリケーションを続行した後、メイン スレッド (メイン フォームを含む) の VCL コンポーネントへのすべての再描画が行われなくなります。他のバックグラウンド コードが実行され続けているため、アプリケーションが死んでいるわけではなく、メイン スレッドだけです。Windows メッセージ ディスパッチャーが破損しているか、休止状態になっているようです。

このアプリケーションでは、登録された特定のメッセージをキャッチする必要があるため、メイン フォームの allocateHwnd() を介して独自の WndProc() を割り当てます。その WndProc() から、処理するカスタム メッセージをディスパッチし、現在のメッセージがコードで処理されない場合は、メイン フォームの継承された WndProc() を呼び出してメッセージを渡します。現在のメッセージを処理する場合は、メッセージが処理されたことをディスパッチャに伝えるために、Msg.Result を 1 に設定して WndProc() から返すだけです。独自の WndProc() を割り当てる代わりに、単に TForm WndProc() をオーバーライドすることはできません。何らかの理由で、Delphi VCL は Windows API の RegisterWindowMessage() 呼び出しでインスタンス化された登録済みメッセージを通過しないためです。

同様の状況でこれを経験した人はいますか? もしそうなら、それを修正するために何をしましたか?

-- ロシェル

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

c# - ButtonBase WndProc メソッド、.Net WinForms ですべてのイベントがチェックされる理由

ButtonBase ではなく Control から継承するボタンの基本クラスを作成しています。
私はリフレクターを使用して ButtonBase を調べ、重要なものを見落とさないようにしています。WndProc メソッドの内容に困惑しています。
ボタンアップ、クリック、キャプチャの変更などのチェックがあり、私が知る限り、これらはすべてクラスの関連する 'On' メソッド内で処理されます。

なぜ彼らがそこにいるのか誰か知っていますか?