私はWindowsアプリの自動ライカーを作ろうとしています。それはうまくいくが、それは非常に遅い! 私は現在、呼び出されるたびに配列をリロードするメソッド "getPixel"を使用しています。ここでピクセルの色を最も速く取得できますか?
は私の現在のコードです:
hdc = GetDC(HWND_DESKTOP);
bx = GetSystemMetrics(SM_CXSCREEN);
by = GetSystemMetrics(SM_CYSCREEN);
start_bx = (bx/2) - (MAX_WIDTH/2);
start_by = (by/2) - (MAX_HEIGHT/2);
end_bx = (bx/2) + (MAX_WIDTH/2);
end_by = (by/2) + (MAX_HEIGHT/2);
for(y=start_by; y<end_by; y+=10)
{
for(x=start_bx; x<end_bx; x+=10)
{
pixel = GetPixel(*hdc, x, y);
if(pixel==RGB(255, 0, 0))
{
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(50);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Sleep(25);
}
}
}
だから、基本的には、それだけで画面の画素の範囲をスキャンし、それが赤のボタンを検出した場合、マウスイベントを開始します。
私はbitbltなど、ピクセルの色を取得する他の方法があることを知っています。しかし、私はいくつかの研究をしましたが、色配列をスキャンするためには、どうやってやるのか分かりません。ボタンをキャッチするために画面を非常に高速にスキャンするものが必要です。
私を助けてもらえますか?
ありがとうございました。
あなたのコードが呼び出されたら?アイドルタイムで?ユーザーがマウスを動かすと?たとえば、FindWindow()を使用して、赤いボタンを検出するさまざまな方法があります。 –
Btw、私のコードは無限ループです。しかし、私はカラーキャッチャーを使いたいのに対し、オフセットキャッチャーを使いたい。コードを開始すると、ループに入り、赤いボタンを確認するだけです。 – Manitoba
このコードが無限ループの場合、問題は 'GetPixel'ではありません。あなたのアプリは他のアプリにCPU時間を持たせないという事実です。 – tenfour