問題タブ [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.
c# - 低レベルのマウスフックC#から返された誤ったマウス座標
同じレンダリングレイヤーにフォーム要素を埋め込むために、いくつかのハッカーを使用してWPFアプリケーションを構築しています。基本的に、私が行うことは、フォームを画面外にレンダリングし、WPFイメージにフォームのモックアップを作成することです。また、フォームモックアップ宛ての場合にWPFアプリケーションからイベントを盗み、代わりにPostMessage(...)を使用してイベントを非表示のフォーム要素に送信する低レベルのマウスフックもあります。
イベントを食べることを示すゼロ以外の値をフックプロシージャから返すと(キュー内のすべてのマウスフックを呼び出したとしても)、カーソルが1つの位置に留まります。これは、イベントが到達していないある種のWPFアプリケーション層でカーソル位置が処理されるためだと思います。
カーソルの位置を自分で設定するだけでよいので、WPFアプリケーションがイベントをまったく認識しないようにするのは問題ないと思いました。結局のところ、マウスイベントには座標が付加されています。残念ながら、これらのマウスの座標はひどく間違っているようです。実際、カーソルがどこにあっても、常に同じ座標を受け取ります。
これが私のコードです:
}
次に、user.SystemMouseHookProc(...)で、正しいカーソル位置に続いてマウスフックで引っ張られた座標を出力します。出力は、常に次のようになります。
カーソル:523,578
{X = 1985777551、Y =1985777602}//この座標は変更されません
その出力は明らかに間違っています。マウスフックから正しいマウス座標を取得するにはどうすればよいですか?
ありがとうございました。
PSこのソリューションは、オンラインで人気のあるソリューションから派生しています。残念ながら、そのソリューションは私のニーズを満たしていないため、この形式に変更する必要がありました。
winforms - 相互運用機能を介してアクセスされるフォームで使用されたときに DataGridView が不適切にフォーカスを失うことをどのように処理できますか
DataGridView に関連する可能性のあるバグを発見しました。DataGridView には、既定で False に設定されているプロパティ StandardTab があります。このデフォルト設定は、TAB キーがグリッド内のセル間を移動することを意味します。グリッド内の最後のセルに到達すると、TAB キーはフォーカスを次のコントロールに移動します。これは、私たちのプロジェクトで使用している設定です。
DataGridView は、プロジェクトのバインディング ソースに接続されています。これは、関連する場合と関連しない場合があります。
DataGridView が COM ベースのプロジェクト (この場合は VB6) から表示されているフォーム上にある場合、ユーザーがグリッド内でタブ移動しようとすると、グリッド コントロールはフォーカスを失います。Tab キーを押したままにすると、フォーム上の他のコントロールがグリッドに戻るまでフォーカスが循環します。グリッドに戻ると、選択されたセルは、ユーザーがタブで移動したセルです。
そのため、ユーザーは、フォーム上の残りのコントロールを迂回して、セルからセルへと移動することで、すべてのセルをナビゲートすることができます。これはユーザーを満足させるものではありません。
この問題を説明していると思われるMSDN フォーラムの質問を見つけましたが、それに対する唯一の回答はあまり役に立ちません。
これを Microsoft Connect のバグとして提出できますが、修正されるとは思えません。コードでこの問題に対処する方法はありますか?
c# - デスクトップのウィンドウ / winform の一番下のウィンドウ
起動時にフォームを起動し、実行中ずっとアプリケーションのバックグラウンドとして維持しようとしています。基本的に、すべてのデスクトップ アイコンを非表示にして、背景を空白にしたいと考えています。さらに、ユーザーが特定のボタンをクリックすると、フォーム BackColor が変更されます。
私はたくさん検索しましたが、半分の解決策を見つけ続けています。これが私がこれまでに試したことです:
WndProc イベントをオーバーライドする BackBaseForm を作成しました。その場合はWM_WINDOWPOSCHANGING
、呼び出しを行わずbase.WndProc(ref m)
、代わりに次のメッセージを送信します。
SetWindowPos(Handle, new IntPtr(1), 0, 0, this.width, this.height, SWP_NOZORDER);
ただし、フォームをクリックするたびに、フォームが前面に表示されます。また、構造体を作成し、WINDOWPOS
構造体へのポインターをマーシャリングしてから、構造体を変更しようとしました。lParam
ただし、これがメッセージの実際の内容を変更するとは思いません。
c# - Windows フォームで IDeskBand をホストする
自分の WinForm で Windows タスクバーから Address ツールバーを表示しようとしています。{01E04581-4EEE-11d0-BFE9-00AA005B4383}
Address ツールバー ( )の CLSID を取得でき、IDeskBand
それへの参照を取得できます。しかし...その後は?
でホストしようとしましたAxHost
が、Address ツールバーは ActiveX コントロールではありません。電話してみた
また
他のさまざまなインターフェースとそのメソッドと同様に、私が何をしてもどこにも行かないようです。そのツールバーがどこにでも表示されるのを実際に見ることができれば、私は大喜びです。IDeskBand
しかし、参照を持っていることとそれを Windows フォームにプラグインすることの間のギャップを埋めることはできないようです。
以前にこれを試みて、私よりも先に進んだ人はいますか?
c# - コンソールを実行している WinForm アプリ - コンソールの問題で最小化/最大化/閉じるボタンを無効にする
デバッグ用のコンソールを起動できる Windows フォーム アプリを作成しています。コンソールの閉じるボタンで Windows フォーム アプリをシャットダウンできないように、コンソールの閉じるボタンを無効にしたいと考えています。テスト コードのスケルトンを作成しましたが、動作します。コードは以下のとおりです。
コードは正常に動作します:
コードをコンパイルして初めて実行すると、コンソールの X はグレー表示されませんが、Windows フォーム アプリではグレー表示されます。ただし、コードを閉じて再度実行すると、コードは正常に機能します。つまり、コンソールの X はグレー表示され、Windows フォーム アプリは本来あるべき状態になっています。これを修正できる理由と方法はありますか?
コンソールが勝利フォームの背後に表示されることがあります。コンソールが常に一番上になるようにする方法はありますか?
余談ですが、コンソールを WinForm の特定の場所に固定する方法はありますか? アプリ?サイズを設定できるので、特定の場所に固定できれば、フォーム上にその場所を作成できます。
c# - ユーザーがフォームの外側をクリックしたときに「DING」サウンドをミュートする方法は?
を使用してフォームを表示しています。このフォームでは、ユーザーがフォーム領域の外をクリックしたときにこのフォームを閉じたいため、Form.ShowDialog()
オーバーライドしています。void WndProc(ref Message m)
DING
このコードは期待どおりに機能しますが、ユーザーがフォーム領域の外をクリックするたびに Windows がサウンドを再生するという小さな問題が 1 つありDING
ます。
UPDATE
からのアドバイスを使用して、このフォームを思い通りに機能させることができましたが、を使用する場合、Hassan Mujtaba
これをミュートする方法はまだわかりません。DING
Form.ShowDialog
c# - c#: コンソールのパフォーマンスの問題を実行している Winform アプリ
デバッグ目的でコンソールを開くことができる Windows フォーム アプリがあります。次のコンソール関連の問題に気付いたことを除いて、すべて正常に動作しています。
- コンソール ウィンドウが開いています。csv ファイルを開いて読み取り、その内容を直接コンソールに書き込みます。csv ファイルには、約 1200 行のデータがあります。すべてのデータ行がコンソールに読み書きされますが、コンソール ウィンドウで実際に表示およびアクセスできるのは、csv ファイル データの最後の 500 行だけです。なんで?これを変更して、コンソール ウィンドウですべてのデータにアクセスできるようにすることはできますか?
また、知っておく必要があるパフォーマンス関連の問題はありますか?
ご協力いただきありがとうございます。
c# - C#: Windows アプリの CSV ファイルの読み取りとコンソールへの書き込みの問題
デバッグ用のコンソールを起動できる Windows フォーム アプリがあります。アプリでは、メニューをクリックして、CSV ファイルを読み取り、コンソールに書き込みます。これを行う関数は以下です。
以下を除いてすべて正常に動作します: csv ファイルには約 1200 行のコードがあります。このコードを実行すると、csv ファイルの内容がコンソール ウィンドウに書き込まれ始める前に、OpenFileDialog() ウィンドウが部分的にしか閉じません。そのため、データがコンソール ウィンドウに書き込まれていることがわかります。また、ダイアログ ウィンドウの小さな長方形の部分がフォームに表示されています。データがコンソールに書き込まれる前にダイアログを確実に閉じる方法はありますか? コンソールと通信するには、新しいスレッドを開く必要がありますか? どんなアドバイスや助けも大歓迎です。ありがとうございました。
c# - Wpf WindowsFormsHost は winforms ユーザーコントロールを縮小/縮小します
最大サイズと最小サイズが600x500に設定されたdllにWinForms UserControlがあります。
winフォームアプリケーションで提示された場合、これらは必要な寸法です/すべて問題ありません。
しかし、windowsformshostを使用してwpfでそのwinformsユーザーコントロールを使用しようとすると:
- windowsformshost を wpf グリッドに配置しました
- windowsformshost 全体のサイズは 600x500 です
- ただし、windowsformshost 内のユーザー コントロールは、約 10 ピクセルほど縮小されています。
- winforms usercontrol は windowsformshost 内の左上に配置され、winforms usercontrol が縮小されているため、windowsformshost の下側と右側に空白がいくつかあります。
- そして、windowsformshostにどれだけのスペースを与えるかは問題ではありません.windowsformshostは600x500ですが、内部のwinformsユーザーコントロールは縮小されています
winforms ユーザーコントロールを意図したサイズの 600x500 で表示するにはどうすればよいですか?
c# - DLL「OraOps10.dll」をロードできません
私は独特の問題に直面しています。Oracle データベースに接続する Windows ベースのアプリケーションを開発しています。
最初のテストでは、インストーラーを作成し、所有しているさまざまなマシンでテストしました。各マシンには Oracle クライアントがインストールされており、アプリケーションの実行に問題は見られませんでした。
しかし、このインストーラーを顧客と共有すると、「DLL OraOps10.dll をロードできません」というエラーが表示されます。尋ねられたとき、彼は言及し、彼のマシンにインストールされた Oracle クライアントを示し、Oracle データベースに接続する他の C# アプリケーションを実行することができました。
アプリケーションが上記のエラーのみを取得する理由がわかりません。https://forums.oracle.com/forums/thread.jspa?threadID=67364で共有されている提案も試しましたが、まだうまくいきません。
実行可能ファイルとDLLを顧客のマシンに手動でコピーしようとさえしました。しかし、まだ同じ問題に直面しています。
だから私が他に何ができるかについて私を助けてください。
よろしくお願いします スダカール・
チャヴァリ
PS:
私は Windows XP オペレーティング システムを使用しており、顧客も同じオペレーティング システムを使用しています。どちらのマシンも 32 ビット OS のみのタイプです。
これは、顧客のオラクル クライアントがインストールされている場所です: C:\oracle\product\10.2.0\client_1\bin であり、私の場合も同じバージョンです。
どちらも Oracle 10g を使用しています。