如何得到一个窗体的句柄
如何得到一个窗体的句柄。又如何往一个窗体上发消息。我听说有两中方法,一种是SendMessage。还有一种我不知道。各位老师能不能给我讲解一下这两个方法是如何使用的。最好能举个例子。谢谢了 问题点数:0、回复次数:6Top
1 楼pp616(坏蛋)回复于 2003-11-01 01:16:57 得分 0
得到窗口句柄简单点可以用FindWindow 或 FindWindowEx
功能比较强的还是EnumWindows 和 EnumChildWindows
发送消息可以用SendMessage 或是 PostMessage
SendMessage 和 PostMessage的区别在于PostMessage函数只是向消息队列添加了一条消息。而不保证消息能顺利到达。而SendMessage函数能确定对方收到消息。
因此PostMessage函数执行过后立即返回。
而SendMessage发出消息要等对方的消息处理函数返回后才返回。同时可以得到一个对方的返回值。
具体的代码Msdn中都有例子。你可以去看看。
Top
2 楼Friecin(雪客)回复于 2003-11-01 02:17:03 得分 0
FindWindow("你要找的窗口的Caption",NULL);
如果找到了,就返回一个窗口的Handle.Top
3 楼Friecin(雪客)回复于 2003-11-01 02:19:50 得分 0
看看这些:
http://search.csdn.net/expert/topic/55/5505/2003/6/9/1895870.htm
http://search.csdn.net/expert/topic/55/5501/2003/5/4/1739909.htm
http://search.csdn.net/expert/topic/55/5505/2003/4/4/1617121.htmTop
4 楼yjy1001(蓝鲸--优秀得郁闷的鱼)回复于 2003-11-01 13:23:35 得分 0
HWND Notepad = ::FindWindow("NotePad", NULL);
//若<记事本>在打开中,即带到最前面
if(::ShowWindow(Notepad,SW_SHOWNORMAL))
{
//确认<记事本>被调用至最前面&取得焦点
::BringWindowToTop(Notepad);
//仿真键盘键入,将一串字符串送到<记事本>中
String Text("WELCOME TO NOTEPAD");
for(int x = 1; x <= Text.Length(); x++)
{
keybd_event(Text[x], 0, 0, 0);//发送 模拟按键消息。
keybd_event(Text[x], 0, KEYEVENTF_KEYUP, 0);
}
//在<记事本>中,跳到下一行
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
SendMessage(Notepad,WM_CLOSE,0,0);//发送 关闭记事本的消息。
}
else
ShowMessage("抱歉!请先打开<记事本>,\n这只是个功能简单的小程序。");
具体请 查看帮助。Top
5 楼yasaka(马蹄南去人北望)回复于 2003-11-01 13:36:11 得分 0
这是比较基础的东西,大部分API书上都查得到的Top
6 楼aliker(吹口琴的猫)回复于 2003-11-01 15:36:23 得分 0
HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);
第一个参数为要得到的窗体的类名,第二个参数为要得到的窗体的标题名。
具体在BCB环境下输入FindWindow,然后选中FindWindow,按F1,看帮助,很详细的。Top




