SetForegroundWindow激活窗口时,输入焦点没有被激活到对应窗口,使用SetFocus设置也失败,如何解决?

GK_ZXT 2014-04-12 06:26:00
	DWORD msID = GetCurrentProcessId();

HWND msHWND = GetTopWindow(0);

while(msHWND)
{
DWORD pid = 0;
DWORD dwTheardId = GetWindowThreadProcessId(msHWND,&pid);

if (pid == msID)
{
break;
}

msHWND = GetNextWindow( msHWND , GW_HWNDNEXT);
}

if (NULL == msHWND)
{
return;
}

HWND hCurWnd = NULL;
DWORD dwMyID;
DWORD dwCurID;

hCurWnd = GetForegroundWindow();
dwMyID = GetCurrentThreadId();
dwCurID = GetWindowThreadProcessId(hCurWnd, NULL);

AttachThreadInput(dwCurID, dwMyID, TRUE);

SetFocus(msHWND); //返回NULL,设置失败
SetForegroundWindow(msHWND);//设置后能成功激活进程窗口,但是无法将输入焦点转移到进程窗口

AttachThreadInput(dwCurID, dwMyID, FALSE);


想实现成手动激活我的程序为当前窗口,并且能够直接键盘输入。现在能激活窗口,但是无法输入,必须手动点击窗口后才能将键盘交点转移到我的窗口上。

SetFocus描述中:该窗口必须与调用线程的消息队列相关。不是很清楚是指什么意思。
...全文
745 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2014-05-13
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
schlafenhamster 2014-04-12
  • 打赏
  • 举报
回复
SetFocus(msHWND); //返回NULL,设置失败 SetForegroundWindow(msHWND);//设置后能成功激活进程窗口,但是无法将输入焦点转移到进程窗口 AttachThreadInput(dwCurID, dwMyID, FALSE); 改成: SetForegroundWindow(msHWND);//设置后能成功激活进程窗口,但是无法将输入焦点转移到进程窗口 AttachThreadInput(dwCurID, dwMyID, FALSE); SetFocus(msHWND); //返回NULL,设置失败 试试

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧