問題タブ [wm-copydata]

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 に答える
536 参照

winapi - WM_COPYDATA を使用して非構造体をコピーできますか?

foob​​ar-shared.lib にこのクラスがあるとしましょう:

そして、次のように SendCopyData を使用して foobar-from.exe を呼び出します。

foob​​ar-to.exe からの場合、OnCopyData を処理します。

これは、FooBar が構造体の場合は正常に機能しましたが、クラスになったので、次のエラーが発生します。

当初、これは私のfooBarインスタンスがスタック上にあるためだと思っていたので、ヒープに移動しようとしましたが、わずかに異なるエラーが発生しました (必要に応じてここに結果を投稿できます)。

MSDNによると、「渡されるデータには、データを受信するアプリケーションがアクセスできないオブジェクトへのポインターやその他の参照が含まれていてはなりません。」したがって、これは構造体データでのみ可能であると思われます。私は正しいですか?

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

c++ - WM_COPYDATAを使用してC++からWPFに構造体を送信する

ネイティブのC++アプリケーションがありますが、当面は、コマンドライン文字列と現在のマウスカーソルの座標をWPFアプリケーションに送信するだけで済みます。IntPtrメッセージは正常に送受信されますが、C#のインスタンスを構造体に変換できません。

これを行おうとすると、アプリケーションが例外なくクラッシュするか、アプリケーションを変換するコード行がスキップされ、ループ内の次のメッセージが受信されます。これはおそらくネイティブ例外が発生していることを意味しますが、理由はわかりません。

これがC++プログラムです。当面は、コマンドライン文字列を無視し、動作を確認するために偽のカーソル座標を使用します。

そして、これがメッセージを受信するWPFアプリケーションの一部です。全体がクラッシュしない場合は、IFステートメント内の2行目がスキップされます。

そして、これが構造体のC#定義です。私はマーシャリング属性を際限なくいじって、どこにも行きませんでした。

何か案は?

0 投票する
3 に答える
2047 参照

mfc - WM_COPYDATA を介した 2 つのダイアログ ボックス間の通信に問題がありますか?

友達は、私が数日間直面している問題について本当に頭が痛いです...簡単です...たとえば、変数CStringテストがある場合、2つ以上のダイアログボックス間で通信したい..私このテスト変数をダイアログ/クラスで共通にしたい(各ダイアログが別々のクラスを持つことを考慮して)...多くのメソッドを試しましたが、すべて失敗しました..最後に、このWM_COPYDATAメソッドを試しました...今でも、私が望んでいたものを達成していませんする...

レシーバー クラス:

上記で、私がやっている間違いが何であるかわかりませんが、CCopyDialog クラスからデータを受信して​​いません...これで私を助けてください...

0 投票する
3 に答える
34213 参照

c++ - WM_COPYDATAを使用して、プロセス間でデータを送信します

プロセス間でテキストを送信したい。私はこれの例をたくさん見つけましたが、私が働くことができるものはありません。これが私がこれまでに持っているものです:

送信部分の場合:

受信部分:

私はどのように構築するかわかりませんCOPYDATASTRUCT、私はちょうどうまくいくように見える何かを入れました。ケースをデバッグするときにWM_COPYDATA実行されますが、やはり。をどうするかわかりませんCOPYDATASTRUCT

2つのプロセス間でテキストを送信したいと思います。

おそらく始めたばかりであることがわかるように、私はCode ::BlocksでGNUGCCコンパイラを使用しており、MFCと依存関係を回避しようとしています。

0 投票する
3 に答える
1194 参照

c# - IPC:WM_COPYDATA+シリアル化/逆シリアル化

私は現在、相互に通信する必要のある2つの.NETアプリに取り組んでいます。シンプルなWindowsメッセージングが選択されましたが、これは現時点ではうまく機能します。メッセージで送信されるデータは単純な文字列ですが、コマンド(列挙型)とデータ(文字列)のメンバー、および後で可能な他のメンバーを含むメッセージクラスを作成しました。

このようなメッセージクラスのインスタンスを送信すると、バイトにシリアル化されてから、base64文字列に変換されます。これは、WindowsのSendMessage()を使用して送信されます。反対側では、私は反対のことをします。最終的に、元のオブジェクトが復元され、他のアプリで利用できるようになります。

このメカニズムは機能しているように見えますが、これで安全かどうか疑問に思いました。確かに、いくらかのオーバーヘッドがあり、base64文字列は元の文字列ソリューションよりもはるかに長いです(ただし、コマンドとデータの部分を取得するには、この文字列を手動で解析する必要があります)SendMessageで送信できるメッセージの最大サイズはありますか?

また、このプロジェクトの.NET Remotingから離れて、SendMessageソリューションを使い続けたいと思います。

何か案は ?オーバーヘッドを制限するために、代わりにJSONを使用するのではないでしょうか。

ありがとう。

ピカ

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

.net - Delphi-Prism アプリケーションでの WM_COPYDATA の使用

WM_COPYDATA メッセージを受信して​​解釈するデルファイプリズムの良い例はありますか? メッセージのデータ構造の扱い方に特に興味があります。

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

.net - 昇格したアプリケーションに CopyData を使用する代わりに使用できる適切な方法は何ですか?

サービスを停止し、ファイルをコピーしてから、サービスを再開するアプリケーションがあります。プログレスバーを表示し、余分なウィンドウを表示したり、画面を変更したりせず、UACに任せてそこから続行するだけです(これは構成プログラムであるため、コピーに盾のアイコンが付いた標準ユーザーとして引き続き使用できますボタン)。

これを行う方法は、管理者として別のアプリケーション (msiexec のように非表示にされた別のアプリケーション) を開くことであり、新しいアプリケーションはその役割を果たし、SendMessage を介して進行状況レポートを送り返します。これは問題なく動作しますが、SendMessage は管理者アプリケーションと非管理者アプリケーションの間で一方向にしか機能しないことがわかりました。StandardInput のリダイレクトは機能しません。これは、ShellExecute をオフにする必要があり、「runas」で ShellExecute をオンにする必要があるためです。

ファイルを使用したくありません。これは、速度が遅く、セキュリティ上のリスクがあるためです (以前は、コマンドを含む CopyData メッセージと一緒にキー コードを送信していました)。StandardInput/Output をリダイレクトする別の方法はありますか? MSIはどのようにそれを行いますか?

これにはC#を使用しています。

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

c# - WM_COPYDATA を送信するが、受信側で WM_ACTIVATEAPP を取得する

次のシナリオがあります。

私のアプリは、コマンド ラインからデータを取得します。

初めて実行された後、私のアプリは常に 1 つのインスタンスを実行し、そのインスタンスは、必要のないときにフォームを非表示にするのではなく、明示的にシャットダウンするように指示されるまでメモリ内にあります。

ユーザーがアプリを 2 回目に実行しようとすると、プロセスが開始され、メモリ内に別のプロセスがあるかどうかがチェックされます。それが true の場合は、コマンド ラインから取得したデータを使用して、メモリ内のプロセスに WM_COPYDATA メッセージが送信されます。終了します。

アプリを実行するのがユーザーである場合、それはすべてうまく機能します。

Microsoft Word 2003 ツールバーから実行する必要があったため、そのために「アドイン」を使用しました。問題は、(Process クラスを使用して) そのアドインからアプリを起動すると、既にメモリ内にあるプロセスが WM_COPYDATA メッセージではなく WM_ACTIVATEAPP メッセージを取得しているように見えるため、必要なデータを取得できないことです。アドインによって開始されたプロセス。

なぜそれが起こっているのか、それを修正する方法はわかりません。私は何時間もグーグルで検索しましたが、何も役に立ちませんでした...

誰でも助けることができますか?

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

vb.net - Visual Basic アプリケーションから Delphi アプリケーションに短い文字列を送信する方法は?

1 つの VB アプリケーションから Delphi アプリケーションに短い文字列 (30 バイト未満ですが、1 秒ごとに送信) を送信する必要があります。

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

vb.net - SendMessage を使用して、VB から Delphi アプリにテキストを送信する

) VB アプリから Delphi アプリに短いテキストを送信しようとしています。ここに VB コードがあります: Sender Program "Sender"

Delphiコードは次のとおりです。レシーバープログラム「Receive」

ここで何が間違っていますか?WM_COPYDATA コマンドと SendMessage 関数を使用して、VB から Delphi プログラムに文字列を送信できますか?

私を助けてください :-)