問題タブ [window-messages]

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 投票する
7 に答える
506 参照

.net - メニュー項目のクリックイベントを介して開かれるモーダルダイアログがすべてのウィンドウメッセージを処理するのはなぜですか?

そのため、この1日ほど、モーダルダイアログによって引き起こされるバグを修正してきました。私は、Windowsメッセージポンプを介してサーバーと通信するアプリケーションに取り組んでいます。ShowDialog()を使用してモーダルフォームを表示すると、メッセージポンプがブロックされ、メッセージは処理されませんが、キューに蓄積されます(予期される動作)。

ただし、最近、メニュー項目のクリックイベントを介してモーダルフォームを開くと、メッセージがメインフォームに送られ、処理されることに気付きました。メニュー項目のクリックイベントを通じてモーダルフォームが表示されたときに、これらのメッセージがブロックされない理由を誰かが知っていますか?

編集:私はC#を使用していることに注意する必要があります。これはどう; 誰もこの質問に答えられない場合、誰かがこれを自分で調査する方法を教えてもらえますか?私が考えることができる唯一のことは、呼び出しスタックを調べることです。残念ながら、これはまだ何も教えてくれません。

0 投票する
7 に答える
7465 参照

delphi - プロセス間通信で使用される Windows メッセージの代替を探しています

私は、Windows メッセージを使用してそれ自体と通信するマルチスレッド アプリケーション (MIDAS) を持っています。

メインフォーム

メイン フォームは、RDM LogData('DataToLog') によって送信された Windows メッセージを受信します。

Windows メッセージが使用されるため、次の属性があります。

  1. 受信したメッセージは分割できません
  2. 受信したメッセージは送信順にキューに入れられます

質問:

Windowsメッセージを使用せずにこれを行うより良い方法を提案できますか?

メインフォームコード

RDM コード

編集:

Windows メッセージを削除したい理由:

  • アプリケーションを Windows サービスに変換したい
  • システムがビジー状態の場合 – Windows メッセージ バッファがいっぱいになり、動作が遅くなる
0 投票する
3 に答える
1225 参照

windows - 特定のウィンドウが現在移動されているかどうかを判別する

基本的に、IsWindowMoving(HWND) Win32 API 呼び出しを探しています。ユーザーが現在ウィンドウを移動しているかどうかを知る必要があります。

ウィンドウは私に属していないため、WM_SYSCOMMAND / SC_MOVE または WM_MOVING をリッスンすることはできません (32/64 相互運用のためにサブクラス化またはフックしたくありません)。

0 投票する
4 に答える
2711 参照

winforms - Firefox/GeckoコントロールがWindowsフォームのキー押下を妨害する

編集:賞金に加えて、Firefox/Geckoコードベースでこのバグを修正するために$250を支払う用意があります。これは、問題を再現する簡単なテストプロジェクト(Visual Studio 2008 C#)です。

編集#2このバグを修正するために600ドルを支払う用意があります。問題を再現するサンプルプロジェクトについては、上記を参照してください。

HTMLを表示するためのFirefox(Gecko)ActiveXコントロールがC#Windowsフォームにあります。

このFirefoxActiveXコントロールがフォーム上にある場合、キーを押したときの約2〜3%が成功しません。むしろ、別のWindowsメッセージが送信されます。

Tabキーを押したままにして、3つの通常のWinFormsテキストボックスをタブで移動します。97%の確率で正しく動作します。Spy ++は、WM_KEYDOWNメッセージが正しく送信されたことを通知します。

通常の動作http://judahhimango.com/images/normaltab.jpg

しかし、ランダムに、おそらく2〜3%の確率で、タブキー(または他のキー)が正しく処理されません。Spy ++は、代わりにWM_CHARが送信されていることを通知します。

奇妙な振る舞いhttp://judahhimango.com/images/screwytab.png

奇妙な動作が発生すると、キーがまったく処理されないか、正しく処理されません(タブ文字をサポートしていないテキストボックスに「\t」文字を挿入するなど)。

これは、FirefoxActiveXコントロールがフォーム上にある場合にのみ発生します。

私たちの質問は:Firefox / Geckoエンジンは、これらの副作用を引き起こす可能性のあるある種のキーボードフックをインストールしますか?または、さらに良いことに、この問題をどのように修正しますか?

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

winapi - ウィンドウメッセージが投稿されるためには、どのような条件を満たす必要がありますか?

を使用してウィンドウ クラスを正常に登録し、次を使用しRegisterClassExてウィンドウを作成しましたCreateWindowEx

関連付けられたウィンドウ プロシージャはメッセージ 36、129、131、および 1 を受け取り、返された値HWNDは null ではありません。ただし、後でPostMessage(別のスレッドから)呼び出すと:

bPosted が true であっても、ウィンドウ プロシージャは呼び出されません。私はなぜそれが必要なのかを理解しようとしています。ウィンドウ プロシージャはMSDN の例のものです。メッセージが通過していることを確認したら、別のケースを追加するつもりでした。

ウィンドウメッセージが投稿されるためには、どのような条件を満たす必要がありますか?

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

delphi - Delphi MDI - 子フォームのオープン/クローズ/アクティブ化の処理

作成された MDI 子ごとにタブを割り当てる MDI アプリケーションを開発しています。メイン (親) フォーム コードで、子フォームの OnActivate、OnCreate、および OnDestroy イベントを「キャッチ」する必要があります。MDIの子として使用される多くのフォームのクラスがあり、プラグインは独自のフォームをロードすることもできるため、子フォームでコードを呼び出すだけでは不可能です...

だから、私の質問は:子フォームのイベントを使用せずに MDI 子フォームがアクティブ化/非アクティブ化されたことをキャッチする方法は?

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

delphi - Delphi 2009-SysMenuをダブルクリックしてウィンドウが復元されたときに処理しますか?

ユーザーがタイトルバーをダブルクリックしてフォームを復元するときに処理する必要があります。WM_SYSCOMMANDウィンドウメッセージを処理しようとしましたが、これは、ユーザーがシステムメニューの復元ボタンをクリックしてフォームを復元した場合にのみ機能します。

これが重要な場合は、DevExpressリボンフォームコンポーネントを使用しています。

ありがとう。

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

windows - 特定のキーストロークを無視して親ウィンドウに渡すように Scintilla に指示することはできますか?

Scintilla が Ctrl+Enter や Ctrl+D などの特定のキーの組み合わせを無視し、それらが入力されたときに親ウィンドウに通知するようにしたいと考えています。ドキュメントを読みましたが、これを行う方法がわかりませんでした。これは可能ですか?

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 投票する
3 に答える
397 参照

c++ - スレッド間でウィンドウメッセージを送信するときのESPエラー

ObserverクラスとSubscriberクラスがあります。
テストの目的で、オブザーバーは偽のメッセージと呼び出しを生成するスレッドを作成しますCServerCommandObserver::NotifySubscribers()。これは次のようになります。

サブスクライバーはCDialog派生クラスであり、からも継承しCServerCommandSubscriberます。

派生クラスに、サーバーコマンドをサブスクライバークラスハンドラーにルーティングするメッセージマップエントリを追加しました。

問題は、HandleServerCommand()メソッドで奇妙なクラッシュが発生することです。

これは次のようになります。

デバッグエラー!

プログラム:c:\ myprogram.exe
モジュール:
ファイル:i386 \ chkesp.c
行:42

ESPの値は、関数呼び出し全体で適切に保存されませんでした。これは通常、ある呼び出し規約で宣言された関数を、別の呼び出し規約で宣言された関数ポインターで呼び出した結果です。

AfxBeginThread()が必要とする関数ポインターを確認しました。

私には、これは互換性があるように見えますね。

他に何を探す必要があるのか​​わかりません。何か案は?

私は別の奇妙な観察を行いました。これは関連している可能性があります。メソッドでは、ハンドルが指すウィンドウが存在するかどうかを確認するためNotifySubscribersに呼び出します。IsWindow()どうやらそうです。ただし、呼び出しCWnd::FromHandlePermanent()はNULLポインターを返します。