2 回答

TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊
FindWindow返回HWND類型的句柄。在MSDN上關(guān)于SetFocus函數(shù)的介紹,其中有一句很關(guān)鍵“該窗口必須與調(diào)用線程的消息隊列相關(guān)?!币馑季褪钦f在窗口線程中才可以對這個窗口SetFocus(),估計你是別的線程中對查找到的窗口,然后使用SetFocus,所以失敗了。
SetFocus函數(shù)的說明:
函數(shù)功能:該函數(shù)對指定的窗口設(shè)置鍵盤焦點。該窗口必須與調(diào)用線程的消息隊列相關(guān)。
函數(shù)原型:HWND SetFocus(HWND hWnd)。
參數(shù):
hWnd:接收鍵盤輸入的窗口指針。若該參數(shù)為NULL,則擊鍵被忽略。
返回值:若函數(shù)調(diào)用成功,則返回原先擁有鍵盤焦點的窗口句柄。若hWnd參數(shù)無效或窗口未與調(diào)用線程的消息隊列相關(guān),則返回值為NULL。若想要獲得更多錯誤信息,可以調(diào)用GetLastError函數(shù)。

TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊
printf("%08X\n",shwnd);//用spy++測試了,句柄值是對的
DWORD cmdpid;
GetWindowThreadProcessId(cmd,&cmdpid);//當(dāng)前控制臺PID
DWORD notepid;
GetWindowThreadProcessId(shwnd,?epid);//輸入欄PID
AttachThreadInput(cmdpid,notepid,TRUE);//連接控制臺和記事本輸入欄兩個線程
SetFocus(fhwnd);//焦點轉(zhuǎn)移到輸入欄
printf("%08X",SetFocus(fhwnd));//此處輸出0,調(diào)用失敗
keybd_event('A',0,0,0);//發(fā)送消息
keybd_event('A',0,KEYEVENTF_KEYUP,0);
AttachThreadInput(cmdpid,notepid,FALSE);//釋放連接
getchar();
return 0;
添加回答
舉報