問題タブ [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.
winforms - SAPI の ISpNotifySource::SetNotifyWindowMessage() が通知を WndProc() に送信しないのはなぜですか?
私は WinForms を使用しており、SetNotifyWindowMessage() を取得して WndProc にメッセージを送信しようとしていますが、そうではありません。
関数呼び出し:
WndProc:
注: initSAPI() は、マウス クリック イベントで呼び出されます。
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 メッセージの可視性の違いを説明できる私の開発環境のユニークな点について誰か教えてください。
c# - .Net の奇妙な WndProc バグ。VB.Net より具体的に
ETA: Visual Studio 2008 Express Edition を使用しています。
WndProc をオーバーライドして何らかの形で失敗した場合は、通常、コードが再び機能するまでコードをコメントアウトしてバックトラックします。
ただし、WndProc の奇妙な点は、次のように削除できることです。
それでもエラーがスローされます。
エラーをリセットするには、コードを削除して再入力する必要があります。
他の誰かがこれを経験しましたか?
到着予定時刻:
Chris Haas による以下の回答。
私は気づいていませんでしたが、この問題はリフレクターのコードを使用したときにのみ発生したに違いありません。Reflector は vb.net に誤って変換し、WndProc ベースへの呼び出しに余分なブラケットを挿入します。
c# - 外部プログラムによって作成されたウィンドウのメッセージを処理するためのサンプルソースコード?
GWLP_WNDPROCでSetWindowLongPtrを使用し、必要なメッセージ(WM_GETMINMAXINFOやMINMAXINFO構造体の変更など)を処理する独自のWndProcを作成する必要があることはわかっています。ただし、別のプログラム(notepad.exeなど)によって作成されたウィンドウに対してこれを実行したいので、C#/ WinFormsプログラムからこれを実行することはできません。挿入する必要がある、ネイティブC / C++DLLを作成する必要があります。ウィンドウを作成したプロセスで。
これを行うためのリンクまたはサンプルコード(ネイティブC ++ DLLとC#から呼び出して外部プロセスに挿入する方法)を提供できますか?
ありがとうございました
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" があるようです。
提案?
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の前にフックできる「移動モニター」メッセージがあるかどうかはわかりません。「通常の」ウィンドウは問題なく動作するため、それを行う方法があると思います。
c# - C#フォームから別のフォームへのWndProcメッセージの受け渡し
私は 2 つの Windows フォームを持つ C# アプリケーションに取り組んでいます。どちらのフォームも全画面表示で、一方のフォームが透明なオーバーレイとして他方のフォームの上に表示されます。一番下のフォームには、Web ブラウザーが含まれています (これも全画面表示)。ジェスチャをキャプチャし、ボタンやその他のコントロールを画面に描画するために、透明なオーバーレイ フォームでタッチ入力を追跡しています。私がする必要があるのは、オーバーレイ フォームがその WndProc 関数で取得するすべての Windows メッセージを下のフォーム (またはフォーム内の Web ブラウザー コントロール) に送信することです。
基本的には、オーバーレイ上のジェスチャを処理するだけで済みます。特定の機能を提供するには、すべてのマウス メッセージを Web ブラウザに転送する必要があります。
オーバーレイからのメッセージを受け取って、下のフォームの WndProc メソッドを呼び出す単純な方法を試しました。(そして同様に、ブラウザ コントロール ウィンドウの WndProc にさらに渡そうとしました)。これらの方法はどちらも機能しません。また、メッセージ オブジェクトの HWnd パラメーターを単純に交換して、これを試みているときに下のフォーム/ブラウザーのハンドルにしようとしましたが、これもうまくいきませんでした。
では、試してみる方法や、フォーム間で Windows メッセージを渡す正しい方法を考えられる人はいますか?
ありがとう、アレックス
windows - どのメッセージがDefWindowProcによって処理されますか?
DefWindowProcによって処理されるメッセージとその方法に関するドキュメントはありますか?
最近、WM_SETFONT / WM_GETFONTが処理されていないことに気づきました。コードに間違いがあるかどうか、またはそれが予期される動作であるかどうかわからないため、次のWinMainを試しました。
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() 呼び出しでインスタンス化された登録済みメッセージを通過しないためです。
同様の状況でこれを経験した人はいますか? もしそうなら、それを修正するために何をしましたか?
-- ロシェル
c# - ButtonBase WndProc メソッド、.Net WinForms ですべてのイベントがチェックされる理由
ButtonBase ではなく Control から継承するボタンの基本クラスを作成しています。
私はリフレクターを使用して ButtonBase を調べ、重要なものを見落とさないようにしています。WndProc メソッドの内容に困惑しています。
ボタンアップ、クリック、キャプチャの変更などのチェックがあり、私が知る限り、これらはすべてクラスの関連する 'On' メソッド内で処理されます。
なぜ彼らがそこにいるのか誰か知っていますか?