2 u014248939 u014248939 于 2014.03.20 17:36 提问

关于SetFocus转移输入焦点的问题

这是一个转移输入焦点的程序,我想将当前控制台的输入焦点转移到记事本的输入栏,然后发送一条按键消息(发送字母a)给后台的记事本输入栏

#include
#include

extern "C" HWND WINAPI GetConsoleWindow();

int main()
{
Sleep(2000);
HWND cmd=GetConsoleWindow();//当前控制台句柄
HWND fhwnd=FindWindow("Notepad","test - 记事本");//记事本父窗口句柄
HWND shwnd=FindWindowEx(fhwnd,NULL,"Edit",NULL);//输入栏控件子窗口句柄

printf("%08X\n",shwnd);//用spy++测试了,句柄值是对的

DWORD cmdpid;
GetWindowThreadProcessId(cmd,&cmdpid);//当前控制台PID
DWORD notepid;
GetWindowThreadProcessId(shwnd,&notepid);//输入栏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;

}
但是程序的焦点没有转移
keybd_event发送消息是正常的,焦点在哪就发到哪
应该是SetFocus调用出了问题
我试过将输入栏子窗口的句柄换成父窗口的,但还是不行,明明句柄都是对的,而且线程也已经连接,为什么焦点转移不了呢?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!