!怎么获得当前焦点窗口?

lht405220319 2011-02-15 12:39:20
!怎么获得当前焦点窗口?
注意!如果这个窗口有子窗口,那就是那个子焦点窗口!
GetForegroundWindow()这个函数只能获得当前焦点窗口父窗口,不能捕获子窗口~~~~
...全文
1304 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
lht405220319 2011-02-17
  • 打赏
  • 举报
回复
这个我也想过,但是如果用户是鼠标党,右键复制,不肯能又去捕捉那个吧~~~
lht405220319 2011-02-17
  • 打赏
  • 举报
回复
好了,3Q,为什么我老是把虚拟键码搞错
Lactoferrin 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 lht405220319 的回复:]
前面的问题都解决了!!!!

现在我想知道,模拟ctrl+v,为什么我不能成功,参见32楼
[/Quote]

参见#27

微软不建议使用keybd_event
你的应是
keybd_event(VK_CONTROL,0,0,0);
keybd_event(0x56,0,0,0);
keybd_event(0x56,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
Lactoferrin 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 lht405220319 的回复:]
这个我也想过,但是如果用户是鼠标党,右键复制,不肯能又去捕捉那个吧~~~
[/Quote]你捕捉那个干什么,你是自己要粘贴,又不是监视用户的粘贴
lht405220319 2011-02-17
  • 打赏
  • 举报
回复
前面的问题都解决了!!!!

现在我想知道,模拟ctrl+v,为什么我不能成功,参见32楼
心留 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
GetLastActivePopup()
[/Quote]

同意
lht405220319 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 lactoferrin 的回复:]
通常粘贴的快捷键都是ctrl+v,只要模拟这个按键就可以把剪贴板的东西粘上去
[/Quote]

这是个方法,但是为什么没用?
我这样写的:

keybd_event(VK_CONTROL,0,0,0);
keybd_event(0x39,0,0,0);//0x39
keybd_event(0x39,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
这个函数是发送给当前焦点窗口的,焦点窗口不是调用这个函数窗口
你妹的特盗不 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lht405220319 的回复:]
楼上的楼上我:
HWND hwnd = GetForegroundWindow()->GetFocus()->GetSafeHwnd();
SendMessage(hwnd,WM_PASTE,0,0);
可是还是没任何数据粘贴上去???
[/Quote]

An application sends a WM_PASTE message to an edit control or combo box to copy the current content of the clipboard to the edit control at the current caret position. Data is inserted only if the clipboard contains data in CF_TEXT format.

lht405220319 2011-02-16
  • 打赏
  • 举报
回复
我的意思是你那个程序可以在记事本粘贴,但是某些程序上例如VC就不能粘贴为什么?怎么让所有程序都能粘贴?
Lactoferrin 2011-02-16
  • 打赏
  • 举报
回复
我的程序是什么?那个控制台程序?控制台程序一般情况下不能接受粘贴,并且控制台窗口过程也根本不是控制台程序的
Lactoferrin 2011-02-16
  • 打赏
  • 举报
回复
通常粘贴的快捷键都是ctrl+v,只要模拟这个按键就可以把剪贴板的东西粘上去
lht405220319 2011-02-16
  • 打赏
  • 举报
回复
粘贴的按钮那些我都用钩子实现了,现在的问题是怎么在所有程序中实现像粘贴一样的把剪贴板数据放入当前编辑框光标位置,数据我已经从剪贴板中取出这里暂时为m_cbstr(这就是从剪贴板中取出的数据),怎么打印在编辑框光标位置?
Lactoferrin 2011-02-16
  • 打赏
  • 举报
回复
vc不处理wm_paste,粘贴不一定要使用wm_paste

这是模拟快捷键的粘贴

int wmain(int argc, _TCHAR* argv[])
{
RegisterHotKey(0,0,0,0x41);

MSG msg = {0};INPUT Input[4];
Input[0].type=INPUT_KEYBOARD;
Input[0].ki.wVk=VK_CONTROL;
Input[0].ki.dwFlags=0;
Input[0].ki.wScan=MapVirtualKeyExW(VK_CONTROL,0,0);
Input[0].ki.time=0;
Input[0].ki.dwExtraInfo=0;

Input[1].type=INPUT_KEYBOARD;
Input[1].ki.wVk=0x56;
Input[1].ki.dwFlags=0;
Input[1].ki.wScan=MapVirtualKeyExW(0x56,0,0);
Input[1].ki.time=0;
Input[1].ki.dwExtraInfo=0;

Input[2].type=INPUT_KEYBOARD;
Input[2].ki.wVk=0x56;
Input[2].ki.dwFlags=KEYEVENTF_KEYUP;
Input[2].ki.wScan=MapVirtualKeyExW(0x56,0,0);
Input[2].ki.time=0;
Input[2].ki.dwExtraInfo=0;

Input[3].type=INPUT_KEYBOARD;
Input[3].ki.wVk=VK_CONTROL;
Input[3].ki.dwFlags=KEYEVENTF_KEYUP;
Input[3].ki.wScan=MapVirtualKeyExW(VK_CONTROL,0,0);
Input[3].ki.time=0;
Input[3].ki.dwExtraInfo=0;
while (GetMessage(&msg, NULL, 0, 0) != 0)
{
if (msg.message == WM_HOTKEY)
{
HWND h; DWORD a;
printf("a");
SendInput(4,Input,sizeof(INPUT));
}
}

UnregisterHotKey(0,0);

return 0;
}
lht405220319 2011-02-16
  • 打赏
  • 举报
回复
回LS那个粘贴问题已经解决,我现在想知道的是,为什么在记事本内能粘贴的东西到其他程序例如VC里就不能粘贴了?
jspkiss 2011-02-15
  • 打赏
  • 举报
回复
嗯,上面的可以
Lactoferrin 2011-02-15
  • 打赏
  • 举报
回复
HWND h; DWORD a;
h= GetForegroundWindow(); //得到前台的窗口句柄
a=GetWindowThreadProcessId(h,0);
AttachThreadInput(GetCurrentThreadId(),a,1);
h=GetFocus();//得到有焦点的窗口句柄
AttachThreadInput(GetCurrentThreadId(),a,0);

完了后h就是你要的
Eleven 2011-02-15
  • 打赏
  • 举报
回复
GetLastActivePopup()
lht405220319 2011-02-15
  • 打赏
  • 举报
回复
原因找到了,是因为我把SendMessage(m_hwnd,WM_PASTE,0,0)写在了CloseClipboard前面,没关闭之前发送那个焦点窗口是无法打开剪贴板的,放到后面就可以了。

但是我想问一下为什么在VC中粘贴就不行呐?包括你的程序也不行。
lht405220319 2011-02-15
  • 打赏
  • 举报
回复
回17楼:
我试过了你的可以,但是为什么我里面就不行,我自己找找原因,我弄好了再把分给了。
lht405220319 2011-02-15
  • 打赏
  • 举报
回复
自己顶上去
加载更多回复(15)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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