アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語でwin32apiを使ってnotepadにpostmessageでcontrol a を送りたい。

一つの文字だけを送る場合は下記で上手く動きます。

#include <windows.h>

int main(void){
HWND hWnd;
hWnd = FindWindow("Notepad", NULL);
hWnd = FindWindowEx(hWnd, NULL, "Edit", NULL);
PostMessage(hWnd, WM_CHAR, 'a', 0);
return 0;
}

然し、ここでcontrol aを送るには、PostMessageのWM_CHAR

の次の引数をどの様に記述をすれば良いのでしょうか。

宜しく、お願いします。

A 回答 (3件)

単純に


PostMessage(hWnd, WM_CHAR, 0x01, 0);
で良いのではないの?
# 0x01は制御文字Ctrl+AのASCII文字コード

まあこれで終了するかどうかはアプリ次第でしょうけど。
    • good
    • 0

No.1ですけれども


https://batchloaf.wordpress.com/2012/10/18/simul …
を参考に、メモ帳でctrl+aをシミュレートするプログラムを作ってみました。
FindWindowで対象ウィンドウポインタを取得し、SetForegroundWindowで最前面に持ってきた後、SendInputでctrl+aをシミュレートしています。

対象ウィンドウが最前面に来ては困るなど制限はありますか?

#define WINVER 0x0500
#include <windows.h>

int main()
{
HWND hWnd;
hWnd = FindWindow(L"Notepad", NULL);
SetForegroundWindow(hWnd);

// Create a generic keyboard event structure
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;

// Press the "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));

// Press the "A" key
ip.ki.wVk = 'A';
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));

// Release the "A" key
ip.ki.wVk = 'A';
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));

// Release the "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));

return 0;
}
    • good
    • 0
この回答へのお礼

有難う御座います。
notdpadでは正常に動きました。

然し、他のアプリケーションでは終わらずに
ループしています。

何が原因なんでしょうか。
私はnotdpadに限定をしていないもんですから。

お礼日時:2016/05/03 23:17

postmessageだとctrl押下は実現できないっぽく、


SendInputならばできそうなので以下コードを参考にしてみては
どうでしょうか

https://batchloaf.wordpress.com/2012/10/18/simul …

ip.ki.wVk = 'V'; を ip.ki.wVk = 'C';に変える
    • good
    • 0
この回答へのお礼

有難う御座います。

これは詳しくは分かりませんが、どうもnotepad専用の様な気がします。
私の例示ではnotepadになっていますが。notepadに限定をしている
訳では有りません。

一般的な話で通用するコードが知りたいです。

notepadに限定しない方法でのコードを御知えてください。
宜しくお願いします。

お礼日時:2016/05/03 19:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています