3

PostMessage を使用してファイルを保存するためのダイアログ プロンプトに ALT-S を送信しようとしています。

PostMessage(h, WM_KEYDOWN, VK_MENU, 0);
PostMessage(h, WM_KEYDOWN, ord('S'), 0);
PostMessage(h, WM_KEYUP, ord('S'), 0);
PostMessage(h, WM_KEYUP, VK_MENU, 0);

しかし、うまくいきません。2 つのキーを送信しますが、ALT 条件がダイアログ ボックスで認識されず、通常の S 文字として処理されるかのようです。

これ(エラーが発生する)を含む多くの読み取りを行いましたが、ALTが押されていることを示すためにlparamで何かをする必要があるようです。一部の情報源は 0x20000000 と言っていますが、これも機能しません。

ダイアログ ボックスがフォーカスされないため、SendInput、keybd_event などは機能しません。

私はかなり困惑しています。いくつかの洞察をいただければ幸いです。

4

2 に答える 2

1

代わりにこれを試してください:

PostMessage(h, WM_SYSKEYDOWN, VK_MENU, 0);
PostMessage(h, WM_KEYDOWN, ord('S'), 0);
PostMessage(h, WM_KEYUP, ord('S'), 0);
PostMessage(h, WM_SYSKEYUP, VK_MENU, 0);
于 2012-06-28T19:58:56.960 に答える
0

別のフォームのボタンを押す最も簡単な方法WM_COMMANDは、偽の入力ではなくメッセージを送信することです。偽の入力はトリッキーなビジネスであり、多くの場合、あなたが望むことを行うことができません.

WM_COMMANDを最上位ウィンドウに送信します。通知コードBN_CLICKEDを としてwParam、ボタン ID をとして渡しますlParam

FindWindowまたはを使用EnumWindowsして、最上位ウィンドウのハンドルを取得できます。Spy++ のようなプログラムを使用すると、ターゲット ボタンの ID を見つけることができます。

于 2012-06-29T18:05:07.477 に答える