C语言FindWindow和SetFocus的问题?

C语言FindWindow和SetFocus的问题


胡子哥哥
浏览 854回答 2
2回答

回首忆惘然

FindWindow返回HWND类型的句柄。在MSDN上关于SetFocus函数的介绍,其中有一句很关键“该窗口必须与调用线程的消息队列相关。”意思就是说在窗口线程中才可以对这个窗口SetFocus(),估计你是别的线程中对查找到的窗口,然后使用SetFocus,所以失败了。SetFocus函数的说明:函数功能:该函数对指定的窗口设置键盘焦点。该窗口必须与调用线程的消息队列相关。函数原型:HWND SetFocus(HWND hWnd)。参数:hWnd:接收键盘输入的窗口指针。若该参数为NULL,则击键被忽略。返回值:若函数调用成功,则返回原先拥有键盘焦点的窗口句柄。若hWnd参数无效或窗口未与调用线程的消息队列相关,则返回值为NULL。若想要获得更多错误信息,可以调用GetLastError函数。

蛊毒传说

printf("%08X\n",shwnd);//用spy++测试了,句柄值是对的DWORD cmdpid;GetWindowThreadProcessId(cmd,&cmdpid);//当前控制台PIDDWORD notepid;GetWindowThreadProcessId(shwnd,¬epid);//输入栏PIDAttachThreadInput(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;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript