2 回答

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

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