問題タブ [sendmessage]
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.
api - メッセージを Windows エクスプローラーのアドレス バーに送信する
C#でWindows Explorerのアドレスバーにメッセージを送信する方法は?
c# - sendmessage(C#) を使用して cmd.exe にバックスペースを送信する方法
アプリから起動する cmd.exe にキーストロークを送信しようとしています。そうすることで、すべてのキーボード文字を送信できますが、バックスペースを送信しようとしても効果がないようです。以下は、cmd.exe にメッセージを送信するためのコード スニペットです。
なぜこれがうまくいかないのですか?C# アプリから cmd.exe の stdin に送信する最良の方法は何ですか?
前もって感謝します
c# - 別のアプリケーションでキープレスとキーリリースをシミュレートしていますか?
実行中の外部アプリケーションと対話し、特定のキープレスとリリースを送信する必要があります。SendKeys クラスを使用しようとしましたが、キープレスが外部アプリケーションへの即時のキーリリースと共に送信されるため、仕事の半分しか行いません。
外部アプリの「キー押し下げ」をシミュレートできるようにする必要があります。私は今、SendMessage を使おうとしていますが、今のところまったく機能しません :( エラーも発生しません。
vb.net - SendMessage関数を使用する際のモニターへの害
SendMessage
機能を使ってモニターをオフにする小さなアプリを開発しました。私の友人は、アプリを定期的に使用すると彼のモニターに害を及ぼすかどうか私に尋ねました。同様のアプリを使用したとき、彼はマザーボードにいくつかの問題を抱えていました。このようなことをするために関数を使用することに(ハードウェアにとって)害はありますか?
c# - P/Invoke SendMessage でマージンを設定するには?
このスレッドは、ボタンをテキストボックスに追加する方法に依存していますか? .
ありがとう。
c# - 別のアプリケーションからテキストを取得する
別のアプリケーションのテキストボックスからテキストを取得したいのですが。2番目のアプリケーションのProcessNameは「TestTextBox」、TextBoxの名前は「textBox1」です。
空の文字列を返す私のコード:
session - ロックされていないセッションを必要としない SendKeys の代替
状況:
GUI アプリには、頻繁に更新されるイメージをディレクトリに生成する (メニュー オプション以外の) 機能が含まれています。
ログインして実行中のアプリのインスタンスは、この画像の唯一のソースです (表示デバイスに依存する機能)。私はこれを死ぬほど研究しました - それは悲しい事実です.
GUI アプリケーションは COM インターフェイスを提供しますが、イメージを生成するものはありません。
GUI コードはまったく変更できません (大きな驚きです)。
要件:
これらの現在のイメージは、さまざまな時点で他のプロセスによって必要とされます。
明白な解決策:
GUI アプリのインスタンスを作成し、SendKeys を使用してコントロールを操作して画像を生成するプロセス。
障害物(詳しく説明する必要がありますか)
Sendkeys の脆弱性は別として - Sendkeys が信頼できるものであると仮定すると....
コンソール セッションがロックされている場合、Sendkeys は機能しません (ロックは本番環境の要件です)。
SendMessage API は、'shift/letter' のようなキーの組み合わせを送信できません (メニュー オプションを呼び出すために必要です)。
質問
セッションがロックされているときにプログラムでアプリと対話する他の方法はありますか?
Windows サービスは、事前に決められた時間にセッションのロックを解除/ロックできますか? イメージの生成を可能にするのに十分な時間です。
私は知っています、私は知っています、それはがらくたです。高レベルのアイデアとほとんどの意見を歓迎します ;)
winapi - 受信スレッドがメッセージのポンピングを開始した場合、SendMessage は早期に戻ることができますか?
Windows は、SendMessage が返すべきことをどの程度正確に判断するのでしょうか?つまり、受信スレッドが送信メッセージの処理を終了したことをどのように判断するのでしょうか?
詳細なシナリオ: スレッド A が SendMessage を使用してスレッドをスレッド B に送信しています。明らかに、スレッド B がメッセージの処理を完了するまで、SendMessage は戻りません。スレッド B がダイアログ ボックスをポップアップ表示し、メッセージの送信を開始します。私のシナリオでは、スレッド B によってポンプされるキューに WM_KILLFOCUS メッセージがあります。この結果、スレッド B で WM_COMMAND メッセージが生成されます。スレッド B は、この WM_COMMAND メッセージをデフォルトのウィンドウ プロシージャに渡します。これを行うと、元のメッセージの処理がまだ終わっていなくても、SendMessage はスレッド A に戻ります。何が起こっている?どういうわけか、デフォルトのウィンドウ プロシージャがウィンドウを混乱させて、元の送信メッセージが終了したと考えさせているようです。
メッセージをポンピングしてデフォルトのウィンドウ プロシージャを呼び出すと、SendMessage がだまされて返される既知のシナリオはありますか?
ありがとう!フィル
c# - RichTextBox: テキストがコントロールの境界を超えているかどうかを判断する方法は?
RichTextBox コントロールを拡張して、ネイティブの RichEdit クラスで提供されていない機能の多くを実装しました。
コントロールがウィンドウにラップするように設定されている場合、またはプリンターにラップするようにコントロールが設定されている場合、コントロールのサイズが変更されたときに水平スクロールバーが表示されないにもかかわらず、表示されるという問題が発生しています。
wordwrap を none にして元に戻すと問題は解決するようですが、プリンターにラップする場合は比較的遅くなる可能性があります (つまり、すべての Resize イベントで呼び出すには遅すぎる)。
ここに私のワードラップコードがあります:
当初、問題はグラフィック ハンドルを解放しているという事実に関連していると考えていましたが、コントロールにラップしていてハンドルが不要な場合にも問題が発生します。
スクリーンショットの追加:
正しい動作:
不適切な動作 (フォームのサイズを非常にわずかに変更した後):
ウィンドウへのラップ/ラップなしのコードは、 http://msdn.microsoft.com/en-us/library/bb774282( VS.85 ).aspx のコメントからのものです。
::SendMessage(hwnd, EM_SETTARGETDEVICE, NULL, 0) を呼び出すとテキストがウィンドウにラップされ、::SendMessage(hwnd, EM_SETTARGETDEVICE, NULL, 1) はワードラップを完全に無効にします。これが他の場所に文書化されているかどうかはわかりません。
私のp /呼び出し:
関連する定数:
編集:
私はこれをさらに調査しており、コントロールのサイズが変更されたときに、.NET RichTextBox コントロールがおそらく間違った値で SetScrollRange() を送信していると思います。EM_SETTARGETDEVICE メッセージについて必ずしも知っているとは限らないため、これは理にかなっています。
サイズ変更後におそらく SetScrollRange() または同様のものを実行できますが、私の問題は、正しい値が何であるか、またはそれを理解する方法がわからないことです。
私が気付いたもう 1 つのことは、問題が発生しているときに、実際にテキストをラップするサイズにコントロールのサイズを変更できることです。この時点で、スクロールバーは機能する状態に戻り、ワードラップが循環しないまでサイズを変更して元に戻すことができます。
編集:(以下の機能しない回答にも詳細があります)
コントロールのサイズが変更されるとサイズが変更されるため、EM_GETRECT は実際に必要なものではないようです。MSDN の説明は次のとおりです。
EM_GETRECT メッセージ
エディット コントロールの書式設定四角形を取得します。書式設定四角形は、コントロールがテキストを描画する制限四角形です。制限する四角形は、編集コントロール ウィンドウのサイズとは無関係です。このメッセージは、エディット コントロールまたはリッチ エディット コントロールのいずれかに送信できます。
私の最初の理解では、これはテキスト全体の四角形であり、それから、クライアント ウィンドウが書式設定用の四角形よりも小さいため、スクロールバーを表示する必要があるかどうかを判断できます。
この書式設定用の四角形の本当の目的は、テキストをエディット コントロール (余白) よりも小さい領域に表示することです。
新しい質問:
では、EM_GETRECT で得られると思っていた長方形はありますか? テキストの幅 (画面からはみ出す部分を含む) を教えてくれる四角形は? たとえば、400px のコントロールと 800px の長さのテキスト行がある場合、800px の値を取得して、それをコントロールの幅と比較し、スクロールバーの表示/非表示を比較できるようにします。
実際には、オフ コントロール テキストの長さはあまり気にしませんが、IFテキストがコントロールの境界を超えていることを知りたいと思っています。
これまでご協力いただきありがとうございました。
c# - SendMessage の問題
Windowsと同様のコピー、貼り付け機能を持つC#を使用してアプリケーションを開発しています。メニュー項目を追加し、それぞれのアプリケーションとリンクしました。
詳細については、次の画像をご覧ください。
シェルメニューに追加されたアイテム http://softwaregenius.net/myimages/menu.jpg
Windows エクスプローラーで複数の項目を選択するように、複数のファイルやフォルダーを選択してから、[OS Util] -> [FastCopy] を選択する必要があります。以下のようにフォームが開きます
FastCopy に表示されるフォーム http://softwaregenius.net/myimages/fastcopy1.jpg
アプリケーションは完全に機能しています。ここでの主な問題は、ファイルを選択した後、これらすべてのファイルがそれぞれのソフトウェア内で開かれることです。つまり、Word 文書を選択すると、ファイル名が FastCopy フォームに追加されますが、Word 内でも開かれます。
調査したところ、この問題は SendMessage が原因であることがわかりました。SendMessage の代わりに PostMessage を使用する必要があります。しかし、そうすると、アプリケーションが機能しません。
以下は、C# 2005 でのメイン関数のコーディングです。
}
以下は、フォーム内の WndProc およびその他のコードのコピーです。
public partial class frmFastCopy : Form { delegate void AddItemToListDelegate(string itm);
これがNativeCodeクラスです
私はあなたたちが天才であることを知っています。選択したファイルを開く必要がある場所を変更する必要があるか、またはポストメッセージをどのように使用する必要があるかを誰かに教えてもらえますか。
貴重な時間を共有していただきありがとうございます。
よろしく
イルファン