0

私は人工知能にますます興味を持っていますが、それでもWindowsAPIの基本を学んでいます。私の現在の目標は、 PrtScが押されていることをシミュレートするためc++に呼び出すプロセスを作成することですSendInput(画面の印刷ボタン)。これは、プログラムが人間のように画面の1つのフレームを見ることができるようにすることができると私が現在考えることができる唯一の方法です。

簡単な例として、何らかの理由で、Windows 7の時計が何時に言っているのか、プログラムに「自分で調べてみて」もらいたかったとしましょう。したがって、コンピューターと私自身がタスクを簡単に行えるようにするために、ツールバーが画面の下部にあることを確認します。調べたい長方形のビットマップの正確な画面座標はすでにわかっています。そこで、SendInputプレスをシミュレートPrtScして画面表示をクリップボードにコピーするように呼び出し、それらの座標でクリップボードを調べ、いくつかの機能検出を行って、数字が何であるかを確認します。残りはそこから下り坂になります。

それで私の質問は、これはそのようなプログラムを実装するための合理的な方法ですか?それとも、これを必要以上に難しくしていますか?

4

1 に答える 1

3

スクリーンショットを取得するために、PrtScボタンをシミュレートする必要はまったくありません。スクリーンショットを画面から直接取得して、メモリ内のビットマップにコピーできます。例:

int iScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int iScreenHeight = GetSystemMetrics(SM_CYSCREEN);

HDC hScreenDC = GetDC(0);
HDC hMemDC = CreateCompatibleDC(hScreenDC);
HBITMAP hScreenBmp = CreateCompatibleBitmap(hMemDC, iScreenWidth, iScreenHeight);
HBITMAP hOldBmp = SelectObject(hMemDC, hScreenBmp);
BitBlt(hMemDC, 0, 0, iScreenWidth, iScreenHeight, hScreenDC, 0, 0, SRCCOPY);
ReleaseDC(0, hScreenDC);

// use hScreenBmp as needed...

SelectObject(hMemDC, hOldBmp);
DeleteObject(hScreenBmp);

具体的に時計の値を取得するために、なぜスクリーンショットを気にする必要がありますか?GetLocalTime()代わりに関数を使用してください。

于 2013-03-14T21:00:35.010 に答える