高分求解一巨難問題。。。


我做了一個模擬鍵盤輸入的后台程序,目的是在啟動我的另一應用程序后,它開始模擬鍵盤向應用程序輸入,但應用程序在某些Edit輸入完成按下回車鍵后,要訪問網絡數據庫,根據不同結果可能要彈出對話框,這樣就使模擬程序運行不正常,怎樣才能等到輸入回車后得到結果后在模擬下一鍵輸入,我用Sleep試過,但由於網絡原因,返回結果的時間無法確定。如何才能在返回結果后再繼續運行模擬程序進行模擬鍵輸入?謝謝。

9 个解决方案

#1


"根據不同結果可能要彈出對話框"

試試根據對話框是否存在來等待。
while (1)
{
   if (FindWindow(...))//對話框還在
      break;
   Sleep(1000);//1秒后重試
}

#2


等到輸入回車后?在PreTranslateMessage中判斷是否是按下ENTER?

#3


老 拉

#4


該回復被版主刪除

#5


應用程序是其他人用PB開發的,沒有源代碼,我的意思是在一個edit控件按下回車后,執行完其script后,其scrip中含訪問網絡數據庫的代碼,並根據edit控件輸入是否合法,可能彈出對話框,也可能不彈出對話框。如果彈出對話框我要關閉它,不彈出對話框繼續轉到其他控件進行輸入,但其彈出時間不能確定(視網絡狀況或數據庫響應速度定)我如何才能在其script真正執行完畢后,再模擬輸入鍵。我想過通過截獲數據包是否返回做,但太復雜,時間不允許。有誰有比較好的辦法或思路,謝謝了。

#6


這種情況最好不用模擬鍵盤輸入,建議對Edit用SetWindowText,對按鈕用PostMessage模擬按下動作。

#7


我在我的后台程序中用DWORD WaitForInputIdle(
  HANDLE hProcess,       // handle to process
  DWORD dwMilliseconds   // time-out interval in milliseconds
);函數試了試,可以,hProcess是我用spy++截獲應用程序的ProcessID,然后用OpenProcess
函數得到的,但是用什么方法可以得到正在運行的程序的ProcessID呢?用GetWindowThreadProcessId
函數得到的只是其thread ID.

#8


GetWindowThreadProcessId
的第二個參數返回進程ID,返回值是創建窗口的線程ID

#9


問題解決,謝謝各位。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com