問題タブ [winforms-interop]

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

visual-studio-2010 - Interop.WMPLib がリリース モードでアセンブリをロードできないのに、デバッグ モードで動作するのはなぜですか?

Windows Media Player com コントロールをツールボックスに追加し、デバッグ モードのフォームでコントロールを正常に使用しました。

ただし、リリース モードでアプリケーションを実行しようとすると、エラーが発生します...

ファイルまたはアセンブリ 'Interop.WMPLib、...、またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。

いくつかのトレースを通じて、コントロールの作成時ではなく EndInit メソッドでエラーが発生することを確認しました。

私は何が欠けていますか?

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

.net - DisplaySettingsChanging での WPF 相互運用デッドロック

モードレス Win32 フォームをホストする WPF アプリケーションがあります。VNC をマシンに接続または接続解除するまで、すべてがスムーズに実行されます。その後、アプリケーションはデッドロックします。これ以上何も再描画せず、ユーザーの操作に反応しません。WinDbg を使用してスタック トレースを確認しました。

どうやら、VNC のアタッチ/デタッチがOnDisplaySettingsChangingイベントを発生させ、次に を使用して何らかのイベントを呼び出そうとSystem.Windows.Forms.Control.Invokeし、メイン スレッドにメッセージを送信してから応答を待ちます。しかし、これはすべてメイン スレッドで行われるため、メッセージ ループはメッセージを取得せず、待機は戻りません。

EnableSystemEventsThreadAffinityCompatibility(本質的に呼び出しをバイパスする)を使用して回避策を見つけましたControl.Invokeが、それは汚いハックのように感じます。

誰かがこのようなことが起こるのを見たことがありますか?

メッセージがメイン(STA)スレッドに到着したときにSystemEventsクラスが使用する理由を誰かが知っていますか(チェックしました)?Control.Invoke

編集:コメント内の質問への回答:

  • VNC を使用せずに表示設定 (例: res) を変更すると、同じことが起こりますか? ->いいえ。
  • VNC のいくつかの異なるバージョン (最新のものを含む) でも同じことが起こりますか? -> 最新バージョン 1.0.9.5 しか試していません。
  • WPF アプリ、コントロール、または Win32 コントロールに関するその他の詳細はありますか? -> WPF メイン ウィンドウとモードレスの WinForms フォームがあります。
0 投票する
1 に答える
1365 参照

vb.net - フォーム上にあるUserControl上に配置されたUserControlからのRaiseEvent

UserControlとしてカスタムコントロールコンテナを含むWindowsフォームがあります。この質問のために、このカスタムコントロールコンテナはダッシュボードと呼ばれます。ダッシュボードと呼ばれるこのコンテナには、権限に応じて他の多数のコントロールが含まれています。これらのコントロールに含まれるイベントを、ダッシュボードコントロールを介してWindowsフォームに送信する必要があります。

どうすればイベントをバブルアップできますか?このプロジェクトではVB.NETを使用していますが、C#をVB.NETに変換できます。

また、問題を複雑にするために、メインのWindowsフォームはVB6プロジェクトです。したがって、これを実現するためにInteropFormsToolkitを使用しています。

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

c# - アセンブリの生成に失敗しました-参照されるアセンブリ'Interop.Office'に厳密な名前がありません

VS2010で作成されたWord文書と対話するためのWPF4プロジェクトと、WordアプリケーションをホストするためのWinフォームユーザーコントロールプロジェクトがあります。およびその他のcomdll。すべてのcomdllは、メインのwpfアプリケーションに参照されます。プロジェクトを公開して、別のマシンにインストールして自動更新を実行できるようにしたいのですが、「アセンブリの生成に失敗しました-参照されているアセンブリ'Interop.Office'に厳密な名前がありません。」というエラーが表示されます。各COMDLLのエラー。dllは(Interop.word.dll、interop.office.dll、interop.VBIDE.dll)を参照し、これらすべてのdllも参照され、私のwpfコードで使用されます。

強力な署名付きアセンブリのリンクにも同じ質問があることがわかりましたが、問題は解決しません。

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

.net - 大きなフォントを使用したWindowsダイアログ

タッチスクリーンインターフェイスを使用して操作できるように、「タッチ」モードで実行できる必要がある大規模な.Netwinformsプロジェクトについて相談しています。アプリケーションアーキテクチャには、標準の.Netフォームとコントロールのフォント/表示を拡大するためのスケーリングロジックがすでに含まれており、カスタムコントロールもスケーリングを処理します。

問題は、アプリケーションがOpenFileDialogとSaveFileDialogを使用していることです。これらは、同じロジックを使用してスケーリングされません(基本的に、コントロールとフォームのFontプロパティのサイズを再帰的に調整します)。これらのダイアログは本質的にネイティブのWindowsダイアログであり、OpenFileDialogクラスは、実際には、それらと対話するための標準の.Netインターフェイスを公開する単なるラッパークラスであると思います。

1つの解決策は、これらのカスタムダイアログを実装することですが、それはおそらくやや大規模な作業になります。私たちが本当にやりたいのは、この特定のダイアログのフォントサイズをなんとかしてスケーリングすることです(おそらく、P / Invokeウィンドウハンドルの魔法を使って)?

タッチ対応の解決策の1つは、一般にWindowsのフォントサイズを調整することですが、そのアイデアはこの会社ではあまり普及しておらず、アプリ自体をスケーリングして、OSの残りの部分はそのままにしておきます。

では、これらのダイアログをより大きなフォントに拡大縮小する方法についての経験やアイデアはありますか?それとも、弾丸を噛んで、このためのカスタムダイアログを作成する必要がありますか?

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

c# - ウィンドウが MDI ウィンドウかどうかを確認する方法はありますか?

DefMDIChildProc を使用して失敗するかどうかを確認するなど、ウィンドウが MDI ウィンドウであるかどうかを確認するために使用できる user32.dll 呼び出しがあると思いますが、これに制限があるかどうか、またはこれを行うためのより良い方法があるかどうか疑問に思います? 親の確認で十分ですか?

簡単にするために、私が最終的に望んでいるのは IsMDI(IntPtr ptr) のような呼び出しです...

考え?提案?

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

c# - Windows フォームで Windows Media Player を表示する (または WinFom でプロセスの出力を表示する)

Process.Start から Windows Media Player を起動しようとしています。wmplayer.exe を起動し、ファイル名を引数としてファイルを再生できます。しかし、それは Media Player Window で再生されています。代わりに、自分のフォームでメディアを表示する必要があります。それは可能ですか?オープンソースのメディア プレーヤーである MPlayer には、フォーム内に出力を表示するように Mplayer に指示する "-wid" というオプションがあります。私はWMPで同じことをしようとしています。

WMPにはactivexコントロールがあり、それをwinformに埋め込んで任意のビデオを再生できることを知っています。しかし、私はこの方法でいくつかの問題に遭遇しました。そのため、プロセスとして WMP を起動し、フォームでメディアを再生することを考えています。

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

c# - 前景ウィンドウのサイズが常に間違っている

マウスとキーボードのフックを実装するプログラムを c# で作成しています。指定されたキーをクリックすると、フォアグラウンド ウィンドウが取得され、x、y、高さ、幅が xml ファイルに保存されます。

何が間違っているのかわかりませんが、間違ったサイズと間違ったパラメーターを取得し続けています。

私は今2日間苦労しているので、これについて助けていただければ幸いです。

以下は関連コードです。

標準宣言:

そして、関連するコード自体

編集: public struct RECT と Rectangle の両方を使用しようとしましたが、受け取る RECT の値はランダムに見えます。左と上、高さと幅を意味し、適切なポイントが見つかることもありますが、完全にランダムに見えることもあります. Rectangle で受け取った値は、適切な左と上を持っているようですが、間違った高さと幅を返します。

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

.net - WPF ElementHost in Winforms crashes (Windows) when Maximized

I'm trying to integrate a new WPF control into an existing WinForms application and I'm using an ElementHost(Dock-Fill) to host the following XAML UserControl. (.NET 4)

When I set the WinForm to Maximised my entire operating system crashes. I have updated to the latest NVidia Drivers for my video card, but I still end up with a BlueScreen in nvlddmkm.sys. I have searched around for others that are experiencing crashes like this, but haven't found anything other than "update video card drivers".

The CustomerOrderReadyControl specified in the UserControl is in C#, but given it's just a basic UserControl that displays the Message I haven't included it, but if you think I should, please specify in the comments.

Is there a setting that I am missing that could be causing my Application to be causing the Machine to bluescreen when I maximise the Form? Are there any other ways that I could make this scenario work given that the existing application is very heavy GDI+ for the rendering of other parts of the application?

The InitializeComponent sub in my WinForms is really this simple.

EDIT: Additional info.. If I host this control in a Pure WPF application and maximise the WPF Form, then it all works fine.

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

c# - Winform Host で DataGridView をホストしているときにイベントが発生しない

WPF ユーザーコントロールで Datagridview をホストしようとしています。datagridview がコンストラクターの winformshost に追加され、Enter イベントと Leave イベントが接続されます。Enter イベントは、グリッドが最初にフォーカスを取得したときに発生しますが、その後は発生せず、leave イベントは発生しません。

何か案は?ありがとう