問題タブ [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.

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

c# - アクティブでないアプリケーションでマウスの移動/クリック/キープレスをシミュレートする

マウスとキーボードのイベントをシミュレートする方法は知っていますが、それらはユーザーが行ったかのように動作するため、アクティブなウィンドウに影響します。私が必要としているのは、これらの入力の 1 つをシミュレートすることですが、アクティブではないウィンドウ内にあります。

最小化されていると言っているわけではありません。たとえば、msPaint とメモ帳があるとします。メモ帳はペイントの前にあります。また、ペイント ウィンドウの特定の座標でマウス クリックをシミュレートしたいが、アクティブに設定せずに、ユーザーがペイントの前にあるメモ帳を使い続けることができるようにします。

これはまったく可能ですか?ありがとう!

私はこれを試しました:

しかし、それは機能しません=(何もしません:(

0 投票する
5 に答える
43465 参照

c# - SendMessage または PostMessage 呼び出しの使用方法がわかりません

サードパーティのアプリケーションでキープレスをシミュレートする必要があります。電卓アプリケーションに "8" を送信する必要がある C# アプリケーションがあるとします。.Net の SendKeys または win32 api の keybd_event を使用することはできません。どちらもウィンドウを一番上にアクティブにする必要があるためです。これは私の状況では当てはまりません。

そのため、sendMessage と postMessage の呼び出しが残ります。過去 3 時間、何らかの結果を得ようと努力してきましたが、今は完全に絶望的です。

私は次のものを持っています:

ご覧のとおり、電卓との通信を 4 回試行します。sendMessage と PostMessage の両方を使用してウィンドウを閉じ、キーを送信する 7. 何も機能しません。FindWindow メソッドが機能するため、アプリのハンドラーを取得できます (プロセスを自分で起動して、process.MainWindowHandler でアクセスしようとしましたが、うまくいきませんでした)。エラーや例外はありませんが、電卓では何もしません。

メモ帳でもまったく同じことを試しましたが、何も変わりませんでした。

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

delphi - 別のアプリでコンテキスト メニュー項目をプログラムで選択する方法は?

ターゲット アプリは Delphi (.NET ではなく win32) で記述されており、クローズド ソースです。

呼び出したいアクションは Copy と呼ばれますが、明らかなキーボード ショートカットはありません。(Ctrl+Insert は間違ったことを行い、Ctrl+C は何もしません)

ターゲットを見つけてHWND、コンテキスト メニューを開くように説得できます ( WM_RBUTTONDOWN/UPnotに応答しますWM_CONTEXTMENU)。メニューからHWNDメニュー ハンドルを取得してMN_GETHMENU、目的のメニュー項目を見つけることもできます。アイテムを「選択」する方法の詳細がわかりません。メニューが「モードレス」であることは役に立ちません。それHWNDは所有されていないので、多くの非表示のTPUtilWindowウィンドウのどれが本当の所有者なのかわかりませんWM_COMMAND

あらゆる種類のハッキングが容易になることは確かですが、ターゲット プロセスにコードを挿入することは避けたいと思います。

回答は任意の言語で受け入れられます。

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

windows - アプリケーションのアクティブな ChildWindow を取得するには?

この問題があります。特定のアプリケーションの mainWindow へのハンドラーがあり、そのアプリケーションでキープレスをシミュレートしたい...

これを行うために sendMessage/postMessage API 呼び出しを使用しています。.Net SendKeys 関数または win32 API の keybd_event を使用しない理由は、それらがグローバル レベルでキープレスをシミュレートするためです。私の場合、アプリケーションを最小化しても、キープレスをシミュレートしたい場合があります。

sendMessage と postMessage の問題は、キーを押したい正確な子ウィンドウのハンドラーを渡す必要があることです。たとえば、メモ帳では、キーを mainWindow に送信しても何も起こらず、基本的に書き込み可能な白いキャンバスで構成される子ウィンドウにキーを送信する必要があります。

たとえば、msPaint では、ユーザーが新しいドキュメントを作成し、その図面でテキスト ボックスを開き、そこでキー押下をシミュレートしたい場合、メインウィンドウの子ウィンドウの子ウィンドウを取得して動作させる必要があります。

そこで、あらゆる状況でうまくいくと思われる方法を見つけました。基本的には、パラメータ GW_CHILD を指定して getWindow を使用し、Z 値が最も高い子ウィンドウを取得しました。次に、子ウィンドウに対してもう一度実行し、特定の childWindow に childWindows がなくなるまで実行を続けます。

そしてそれはうまくいったようで、私はとても幸せでした!

しかし...これが機能しないケースを見つけました。Firefox はその 1 つです。Firefox には mainWindow があり、次に mainWindow とほぼ同じ childWindow があり、さらに別の childWindow があります。これはウェブサイト領域、つまりアドレスバーとメニューの下の領域です。たとえば、私が www.google.com にいて、フォーカスされた検索ボックスでキープレスをシミュレートしたい場合、それは機能します。子ウィンドウの子ウィンドウを取得すると、正しい childWindow が得られます。ただし、たとえばユーザーがアドレス バーをクリックしても、getWindow の動作は何も変わりません。アドレスバーのキープレスをシミュレートする代わりに、アドレスバーの下にある子ウィンドウを最終的に取得し、何もしません。

問題は、特定のアプリケーションのアクティブな子ウィンドウを取得する方法が見つからないことです。GetWindow メソッドを使用して特定のウィンドウの子ウィンドウを取得し、子ウィンドウのない子ウィンドウが見つかるまでそれを実行することしかできません。ただし、Firefox のケースで見たように、アクティブなウィンドウは実際には、最終的に得られる子ウィンドウの親です。

getTopWindow などの他の API 呼び出しを試しましたが、うまくいきませんでした..

誰でもこの問題に光を当てることができますか? ありがとう!

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

c# - .NET Web ブラウザー コントロールの自動化

C# プログラムの Web ブラウザー コントロールで実行されているフラッシュ ゲームでいくつかのことを自動化しようとしています。user32 の sendmessage dll を使用して、Google などの通常のページの座標をクリックできましたが、Flash コンテンツでは機能しません。これを行う方法はありますか?また、フラッシュゲームでは検出できません。私は autoit で動作するものを持っていますが、C# で書き直して最小化して動作させたいと思っています。

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

c++ - Vista で DLL から別のプロセスのウィンドウにメッセージを送信する

私はこれで髪を引っ張っています。別のプロセスのウィンドウにメッセージを送信しようとしています。SendMessage または PostMessage または PostThreadMessage を呼び出した後、GetLastError() から Access Denied (0x5) を取得し続けます。UACをオフにしてみました。また、整合性レベルがプロセス全体で一致するようにすることで、UIPI も考慮しました。(SysInternals、現在はMSのProcess Explorerで確認しました)Windows Defenderも無効にしましたが、うまくいきませんでした。プロセス内からウィンドウにメッセージを送信することはできますが、外部からはブプカスが発生します。これはある種のセキュリティ上の問題のように思えますが、両方のプロセスが同じ整合性レベル (中 - 10 進数の 8192) を持っているため、それが何であるかはわかりません。

メッセージを送信する DLL からのコード

受信ウィンドウから選択されたコード

0 投票する
6 に答える
4510 参照

c++ - スレッド間での文字列データの送信(Win32)

これはかなり簡単な質問です。私は基本的に、自分がやろうとしていることに対する「ベストプラクティス」のアプローチを探しています。

一連のブロッキング呼び出しを実行するためにワーカースレッドを起動するWin32GUIアプリケーションがあります。このスレッドで文字列メッセージをGUIに送り返して、ユーザーに表示できるようにします。

現在、WM_COPYDATAを使用して、SendMessageを使用するのが良いアプローチだと思いますか?これは正しい方向に進んでいますか?私はもともと、GUIスレッドに単純な通知メッセージを送り返すスレッドセーフキュークラスを持っていました。これにより、文字列がキューからポップされました。しかし、すぐに一歩下がって、キューは必要ないことに気づきました。文字列を直接送信することもできます。

任意のヒント?ありがとう!

編集:完全を期すために、私はC++を使用しています。

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

c++ - リストビューにダブルクリックを送信します(.netではなくC ++!)

リストビューにダブルクリックを送信したい。私がmsdnで読んだことから、WM_NOTIFYメッセージとNM_DBLCLKで何かを送信する必要があるようです。しかし、私はそれを実装する方法を本当によく理解していません。私は以前にSendMessageを使用したことがありますが、MSDNは構造体の入力方法などについてそれほど明確ではありません。

WM_NOTIFY http://msdn.microsoft.com/en-us/library/bb775583(VS.85).aspx NM_DBLCLK http://msdn.microsoft.com/en-us/library/bb774867(VS.85).aspx

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

c++ - 別のプログラムのリストビュー選択項目を設定する

別のプログラムのリスト ビューで選択されている項目を選択できるようにしたい (そのコードにアクセスできない)。実際には、それは SysListView32 であり、これは同じだと思います。私はすでに次のコードを持っていますが、残念ながらコンパイルしても何もしないようです (ただし、SendMessage() は 1 を返します)。

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

vba - クリックまたはキーを VB6 アプリから Excel ダイアログ ボックスに送信するにはどうすればよいですか?

私の雇用主は、Office 2003 形式のファイルから Office 2007 形式への変換/修復を自動化するサードパーティ製ツール、Conveter Technology から OfficeConverter を購入しました。このツールは、Office 2003 と 2007 のフォーマット間での変換/マクロ/VBA コード要件の変更も高度に自動化します。

私の問題は、この変換中に、ツールが対象の Office 製品 (Excel など) を開いてから、対象のユーザー ファイル (Report.xls) を開いて、VBA / マクロ コードの変更要件を調べていることです。問題は、Excel ファイル コードが .OCX ファイルなどの外部ツールに依存している場合、このアクションを実行している PC にそのツールが存在しない場合、Excel はオブジェクトが持っているというメッセージをポップアップ表示することです。見つからず、誰かが現れて適切なボタンを手動でクリックしてダイアログ ボックスを閉じるまで、変換プロセス全体 (行にある何千ものファイル) を停止します。

私は、VB6 で小さな監視アプリケーションを作成すると (私は年を取り、スキルも同様です)、同じ PC に座ってこれらのダイアログ ボックスを監視し、特定のメッセージに応じて、SendMessage を介して適切なボタンをクリックできると考えました。 API 呼び出し。

問題は、SendMessage で実際にボタンを押すことができなかったことです。Return キーの値 (vbKeyReturn) または Space キー (vbKeySpace) を送信しようとしましたが、アクションがダイアログにつながることはありません。ボックスが閉じます。ダイアログボックスのどのボタンが有効になっているかに関係なく、タブにフォーカスを当てることができますが、それだけです。

私は SendKeys を使用しようとしましたが、信頼性がはるかに低く、私が見つけた現在のドキュメントでは強く推奨されていません。

助言がありますか?:)