剛剛學MFC按照書上的指示寫了一個可以自動重繪網頁的程式

void CKeyBoardDlgDlg::OnBtnStart()
{
// TODO: Add your control notification handler code here
CString strBtn;
int nInterval=0;
GetDlgItemText(IDC_EDIT_CAPTION,m_StrCaption);
nInterval=GetDlgItemInt(IDC_EDIT_INTERVAL,FALSE,TRUE);
if(m_StrCaption==" "||nInterval==0){
return;
}
m_Start.GetWindowText(strBtn);
if(strBtn=="開始"){
SetTimer(1,nInterval*10000,NULL);
m_Start.SetWindowText("停止");
GetDlgItem(IDC_EDIT_CAPTION)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_INTERVAL)->EnableWindow(FALSE);
}
else{
KillTimer(1);
m_Start.SetWindowText("開始");
GetDlgItem(IDC_EDIT_CAPTION)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_INTERVAL)->EnableWindow(TRUE);
}
}
void CKeyBoardDlgDlg::OnTimer(UINT nIDEvent){
HWND hWnd=::FindWindow(NULL,m_StrCaption.GetBuffer(0));
::PostMessage(hWnd,WM_KEYDOWN,VK_F5,1);
Sleep(50);
::PostMessage(hWnd,WM_KEYUP,VK_F5,1);
CDialog::OnTimer(nIDEvent);
}
但是程式運行后完全沒有反應,求助啊...
uj5u.com熱心網友回復:
希望能有人看到......uj5u.com熱心網友回復:
HWND hWnd=::FindWindow(NULL,m_StrCaption.GetBuffer(0));除錯看看這個回傳值是否為空
uj5u.com熱心網友回復:
首先 if(strBtn=="開始"){SetTimer(1,nInterval*10000,NULL); 這里是 nInterval*1000 不是 10000 一秒鐘是1000毫秒 ,10000毫秒是10秒鐘了
uj5u.com熱心網友回復:
還有就是檢查 HWND hWnd=::FindWindow(NULL,m_StrCaption.GetBuffer(0)); 句柄是否為空 以及m_StrCaption.GetBuffer(0)和瀏覽器標題是否一樣
uj5u.com熱心網友回復:
用Keybd_event函式試試uj5u.com熱心網友回復:
少對應的訊息映射。uj5u.com熱心網友回復:
趙老師無處不在
,這個代碼我跑過了,沒有問題的,定時器的時間那里10000是毫秒改成1000 然后 m_StrCaption.GetBuffer(0)回傳的內容和視窗標題一致 句柄就可以獲取到的
uj5u.com熱心網友回復:
用 keybd_event 或 SendInputuj5u.com熱心網友回復:
第一次發帖有這么多大佬來幫忙 ,謝謝各位老師
uj5u.com熱心網友回復:
是否啟動鍵盤編輯功能撰寫uj5u.com熱心網友回復:
HWND hWnd=::FindWindow(NULL,m_StrCaption.GetBuffer(0));
這是有注冊類名時候可用,如果源程式沒注冊類名,用不了。你可以試試自帶的IE瀏覽器。
或者還是查找對于程式進行查找,找出瀏覽器的句柄。
uj5u.com熱心網友回復:
....不小心少打個零...可是我是一次也沒有重繪,那個GetBuffer前面的設定成這樣

輸入標題后回傳的內容應該是一致的把,然后FindWindow獲得的句柄也沒問題啊....但是我還是運行起來沒反應誒....
uj5u.com熱心網友回復:
用 keybd_event 或 SendInput
同keybd event好像要把焦點放在瀏覽器才能重繪?
uj5u.com熱心網友回復:
剛剛學MFC按照書上的指示寫了一個可以自動重繪網頁的程式
void CKeyBoardDlgDlg::OnBtnStart()
{
// TODO: Add your control notification handler code here
CString strBtn;
int nInterval=0;
GetDlgItemText(IDC_EDIT_CAPTION,m_StrCaption);
nInterval=GetDlgItemInt(IDC_EDIT_INTERVAL,FALSE,TRUE);
if(m_StrCaption==" "||nInterval==0){
return;
}
m_Start.GetWindowText(strBtn);
if(strBtn=="開始"){
SetTimer(1,nInterval*10000,NULL);
m_Start.SetWindowText("停止");
GetDlgItem(IDC_EDIT_CAPTION)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_INTERVAL)->EnableWindow(FALSE);
}
else{
KillTimer(1);
m_Start.SetWindowText("開始");
GetDlgItem(IDC_EDIT_CAPTION)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_INTERVAL)->EnableWindow(TRUE);
}
}
void CKeyBoardDlgDlg::OnTimer(UINT nIDEvent){
HWND hWnd=::FindWindow(NULL,m_StrCaption.GetBuffer(0));
::PostMessage(hWnd,WM_KEYDOWN,VK_F5,1);
Sleep(50);
::PostMessage(hWnd,WM_KEYUP,VK_F5,1);
CDialog::OnTimer(nIDEvent);
}
但是程式運行后完全沒有反應,求助啊...
HWND hWnd=::FindWindow(NULL,m_StrCaption.GetBuffer(0));
這是有注冊類名時候可用,如果源程式沒注冊類名,用不了。你可以試試自帶的IE瀏覽器。
或者還是查找對于程式進行查找,找出瀏覽器的句柄。
怎么注冊類名?
uj5u.com熱心網友回復:
類名注冊沒注冊過,我以前也是用類名查找在執行程式,但是沒找到。所以我現在是直接查找程式。
不好用就是了。
uj5u.com熱心網友回復:
HWND hWnd=::FindWindow(NULL,m_StrCaption.GetBuffer(0));
除錯看看這個回傳值是否為空
首先 if(strBtn=="開始"){
SetTimer(1,nInterval*10000,NULL); 這里是 nInterval*1000 不是 10000 一秒鐘是1000毫秒 ,10000毫秒是10秒鐘了
試了試發現是空的....然后要怎么弄呢?
uj5u.com熱心網友回復:
HWND hWnd=::FindWindow(NULL,m_StrCaption.GetBuffer(0));
除錯看看這個回傳值是否為空
首先 if(strBtn=="開始"){
SetTimer(1,nInterval*10000,NULL); 這里是 nInterval*1000 不是 10000 一秒鐘是1000毫秒 ,10000毫秒是10秒鐘了
試了試發現是空的....然后要怎么弄呢?
那就是m_StrCaption.GetBuffer(0)和你的瀏覽器標題不一致
uj5u.com熱心網友回復:
HWND hWnd=::FindWindow(NULL,m_StrCaption.GetBuffer(0));
除錯看看這個回傳值是否為空
首先 if(strBtn=="開始"){
SetTimer(1,nInterval*10000,NULL); 這里是 nInterval*1000 不是 10000 一秒鐘是1000毫秒 ,10000毫秒是10秒鐘了
試了試發現是空的....然后要怎么弄呢?
uj5u.com熱心網友回復:
m_Start 與 “Start” 按鈕 關聯了嗎 ?(加 變數)uj5u.com熱心網友回復:
m_Start 與 “Start” 按鈕 關聯了嗎 ?(加 變數)
關聯啦....沒加進去編譯會出錯的吧0 0
uj5u.com熱心網友回復:
m_Start 與 “Start” 按鈕 關聯了嗎 ?(加 變數)
關聯啦....沒加進去編譯會出錯的吧0 0
現在大概知道是那個FindWindow獲得的句柄是NULL,,不知道怎么解決
uj5u.com熱心網友回復:
不要用PostMessage,還要查找句柄。直接用模擬按鍵keybd_event就可以了。缺點就是運行了就只能讓瀏覽器一直獲取焦點。uj5u.com熱心網友回復:
現在差不多知道是谷歌瀏覽器的原因了,我用IE還試了試百度瀏覽器都沒問題;唯獨谷歌瀏覽器不行,是谷歌瀏覽器訊息接收的機制不同還是谷歌加了什么不想被傳入訊息的東西?
有沒有老師能指點一下?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/85583.html
標籤:基礎類
