2013-09-29 88 views
1

我目前正試圖在當前打開的窗口上模擬鼠標滾動事件。我正在Visual C++中使用setscrollpos()函數來實現它。如何模擬當前窗口的鼠標滾動打開?

SetScrollPos(hwnd,SB_VERT,0,TRUE); 

    UpdateWindow(hwnd); 

如何將打開的當前窗口的名稱傳遞給參數hwnd?

+0

您是否試圖將此消息發送給其他應用程序?如果是這樣,你的問題會更好地被認爲是「如何獲得特定窗口的hwnd?」你可以使用SendInput,當你有這個hwnd來正確模擬用戶輸入設備的活動(鼠標,鍵盤等) – enhzflep

+0

「當前窗口打開」是什麼意思? –

+0

當我使用「當前窗口」階段時,我指的是筆記本電腦用戶打開的任何窗口。鼠標滾動通過網絡攝像頭使用特定的眼睛手勢進行控制。我不知道如何獲取打開的窗口的名稱傳遞給參數HWND ?? – Sade

回答

1

在一百萬年前,我爲我製作了一個可以播放WinMine(Windows'MineSweeper)的程序。

這涉及

  • (a)中獲取該窗口的HWND具有標題 「掃雷」
  • 它(B)的呼叫setWindowForeground
  • (c)中打開進程的內存和讀取 對應於當前遊戲狀態的一些數據。
  • (d)檢查該存儲器,以確定 地雷的數量和位置
  • (e)中移動鼠標到每個「安全」的磚的中心發送 前一個左按鈕時,則左按鈕向上消息

遊戲可以在1秒內完成100%的時間 - 高分的剩餘時間部分始終與解決問題的總時間相同。對於踢球,我還添加了將比賽場設置爲1比特圖像的代碼 - 即每個單元格都是安全的。

無論如何,下面的代碼適用於我:它只是滾動這個後輸入框4行。

如果在調試模式下運行,或者在可見控制檯窗口中運行 - 由於它是前臺窗口,事件將被吞下。我已經運行這個代碼沒有窗口。編輯代碼,然後敲擊構建,然後在構建代碼時切換回此窗口,導致滾動此輸入框。

#include <windows.h> 
#include <winuser.h> 

const int minWheelMovement = 120; 

int WINAPI WinMain (HINSTANCE hThisInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR lpszArgument, 
        int nCmdShow) 
{ 

    HWND foregroundWindow; 
    foregroundWindow = GetForegroundWindow(); 
    mouse_event(MOUSEEVENTF_WHEEL, 0,0,4*minWheelMovement, 0); 
} 
+0

你會在github上分享這個小應用程序代碼嗎?看起來很有趣...... –

+0

@AlexandreMarcondes - Nah,我沒有github賬戶,現在也不傾向於設置一個賬戶。我會把它扔到pastebin上,可以在接下來的24小時內使用。短短一兩分鐘。但請注意 - 程序不能正常運行,因爲它是爲WindowsXP附帶的MineSweeper版本編寫的。 – enhzflep

+1

@AlexandreMarcondes - 在這裏,趕上! http://pastebin.com/U2ZuvXuH – enhzflep