如何发送一个字符到某个窗口呢?

No9 2001-01-12 04:12:00
各位,请教一个非常简单的问题,如何发送一个字符到某个窗口呢,比如要发送字符“a”到一个记事本窗口上?
...全文
330 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
No9 2001-01-15
  • 打赏
  • 举报
回复
感谢finix的首次关注(但您将我的元素理解错了,不是向自己的控件发送)!
感谢newx,sxbyl和Phourm提供的有益参考!
No9 2001-01-14
  • 打赏
  • 举报
回复
看来目前对于Windows系统的理解大家几乎都差不多,如果没有什么新的创意了,那么明天我就要给分了,分数不多,仅仅是个意思,谢谢大家的参与!

casanova 2001-01-14
  • 打赏
  • 举报
回复
俺是这样确定要发送窗口的句柄的:
挂一个系统CBT钩子,截到所有焦点转移事件,这样你随时可以知道现在
哪个窗口有焦点,也就是要往哪个窗口发消息。
Sam_Yang 2001-01-13
  • 打赏
  • 举报
回复
用消息将缓冲区的指针发过去
sxbyl 2001-01-13
  • 打赏
  • 举报
回复
To:Bill1212 用Spy++,VC自带
Bill1212 2001-01-13
  • 打赏
  • 举报
回复
To phourm:
你是在那里查到这些类名的, 如:"NotePad", "Edit", "RichEdit20W"?
能告诉我方法吗?
Phourm 2001-01-13
  • 打赏
  • 举报
回复
也可以用剪切版啊!问题不在发送,而在于如何得到正确的窗口句柄。
toNo9:如果你是对于特定的窗口发消息,可以用spy++找到,如果你想对任一进程的任一窗口的话,不太好办!
No9 2001-01-13
  • 打赏
  • 举报
回复
难道没有人知道如何确定要发送窗口的句柄吗?
uaiia 2001-01-13
  • 打赏
  • 举报
回复
介绍两种可靠的方法(但麻烦)
1:用钩子发字符,向目标窗口回放键盘事件。
2:做一个ime 在ImeToAsciiEx函数发自己键盘事件。(非常可靠但麻烦)
No9 2001-01-13
  • 打赏
  • 举报
回复
我提出这个问题,主要有两个目的:
一个是如何确定要发送窗口的句柄,如Phourm所说,“//若是写字板将 "Notepad" 改为 "WordPadClass"、 "Edit" 改为"RichEdit20W"” ,关键是这么得到处理窗口的句柄,比如说“写字板”程序升级了,那么应该将"Edit" 改为什么呢?或者其它的编辑器如Ultaledit等该改为什么呢?
第二个目的是有什么更多的方法发送呢?我看目前的回答不外乎是常见的两种方法,使用PostMessage和keybd_event函数,有没有什么其它的方法呢?
Phourm 2001-01-12
  • 打赏
  • 举报
回复
//在打开的记事本文档中写入一个'A'
HWND hWnd=::FindWindow("Notepad",NULL);
HWND hWnd1=::FindWindowEx(hWnd,NULL,"Edit",NULL);
::PostMessage(hWnd1,0x102,65,0);
//若是写字板将 "Notepad" 改为 "WordPadClass"、 "Edit" 改为"RichEdit20W"
Robert2001 2001-01-12
  • 打赏
  • 举报
回复
to Bill1212 这里用不到这么复杂吧!
补充 一下DrawText 也行!
而且 不同的窗口也不一样啊!
比如你要是想向 一个COMBOX或者list box发送一个字符的话 就要用 WM_SETTEXT
freeclick 2001-01-12
  • 打赏
  • 举报
回复
to No9
请把问题描述的详细一些.
casanova 2001-01-12
  • 打赏
  • 举报
回复
大部分窗口可以用WM_CHAR的方法。
原来写过一个程序,可以将你输入的汉字,日文或英文翻译之后贴到
窗口里,就像用输入法一样。可是后来因为没有找到合适的词典,
就搁在一旁了,不过程序已经全写好了,谁要是不嫌累想给个词典,我就
把程序找出来,也发到csdn上大家玩玩。反正我觉得还挺好用,呵呵。
silver 2001-01-12
  • 打赏
  • 举报
回复
比较好的做法是用 keybd_event
sxbyl 2001-01-12
  • 打赏
  • 举报
回复
用FindWindowEx可以找到子窗口
vcmfc 2001-01-12
  • 打赏
  • 举报
回复
newx老哥用模拟键盘消息!
无我无人 2001-01-12
  • 打赏
  • 举报
回复
{
BYTE uVirtKey = 'a';
HWND hWndNotePad;

// Get notepad window handle by some way...
// hWndNotePad = xxx;

// Keyboard input is directed to notepad's window
SetForegroundWindow(hWndNotePad);

keybd_event((BYTE)uVirtKey, (BYTE)uScanCode, 0, NULL);
keybd_event((BYTE)uVirtKey, (BYTE)uScanCode, KEYEVENTF_KEYUP, NULL);

}
vcmfc 2001-01-12
  • 打赏
  • 举报
回复
我觉得关键在于你发到那个窗口到底会不会处理?,不处理就没戏了。
Phourm 2001-01-12
  • 打赏
  • 举报
回复
好象很困难,因为用PostMessage,发送消息都是发给框架窗口的(是框架窗口接收消息,而不是它的子窗口)。看看能不能找到子窗口发发!
加载更多回复(3)

16,473

社区成员

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

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

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