关于SendMessage的问题(在线)

XBox360 2005-11-09 03:17:08
偶用WinExec(“RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,4”, SW_SHOWNORMAL);
打开了Internet属性页,并显示“连接”那页。
现在想进一步打开“局域网设置(L)”页面(快捷键为L)。
于是用下面方法
HANDLE handle;
handle = FindWindow(NULL,"Internet 属性");
if (handle != 0){
SendMessage(handle,WM_SYSKEYDOWN,VK_MENU,0);//alt
SendMessage(handle,WM_SYSKEYDOWN,'l',0);//l
}
结果不行,应该怎么做?谢谢了!
或者有没有其他办法?
...全文
179 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
XBox360 2005-11-09
  • 打赏
  • 举报
回复
两分钟没看,中间又多了一位高手~~~
谢谢Maconel(Maconel) 和alloutoflove(andrew)
你们的方法也可以
XBox360 2005-11-09
  • 打赏
  • 举报
回复
有老妖在线问题解决得就是快……
什么时候能像老妖那样什么都知道……
alloutoflove 2005-11-09
  • 打赏
  • 举报
回复
自做聪明的偶竟然用两条消息..........哇哈哈...闪一边凉快去了^_^
alloutoflove 2005-11-09
  • 打赏
  • 举报
回复
继续收回,测试花了好久=_=
alloutoflove 2005-11-09
  • 打赏
  • 举报
回复
sorry, 收回上面的话=_=

HANDLE handle;
handle = FindWindow(NULL,"Internet 属性");
if (handle != 0)
{
HWND hConnect = FindWindowEx(handle, NULL, NULL, "连接");
if (hConnect)
{
HWND hwnd = FindWindowEx(hConnect, NULL, "Button", "局域网设置(&L)...");
if (hwnd)
{
SendMessage(hwnd, WM_LBUTTONDOWN, 0, 0);
SendMessage(hwnd, WM_LBUTTONUP, 0, 0);
}
}
}
Maconel 2005-11-09
  • 打赏
  • 举报
回复
又比老妖慢了。
Maconel 2005-11-09
  • 打赏
  • 举报
回复
用spy++看看就知道了,“Internet 属性”这个窗体下有个叫“连接”的窗体,“连接”下又有一个叫“局域网设置(&L)...”的按钮,这个按钮就是你要点的。
用sendmessage发送按键消息的方法我不知道行不行,但是我想,起码应该给“连接”窗体发吧。
其实应该这样做:
使用FindWindowEx函数找到“连接”窗体,再找到按钮,给按钮发送点击消息,代码如下:

HANDLE handle;
handle = FindWindow(NULL,"Internet 属性");
if (handle != 0){
handle = FindWindowEx(handle, NULL, NULL, "连接");
if (handle != NULL){
handle = FindWindowEx(handle, NULL, NULL, "局域网设置(&L)...");
if (handle != NULL){
SendMessage(handle, BM_CLICK, NULL, NULL);
}
}
}
ccrun.com 2005-11-09
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
// 以下是查找窗口 Button 的代码:
HWND MyFindWindow()
{
const int MyMaxParentWinCount = 3;
// 父窗口类名数组
char *A_szClassName[MyMaxParentWinCount] =
{
"#32770",
"#32770",
"Button"
};
// 父窗口标题数组
char *A_szWinName[MyMaxParentWinCount] =
{
"Internet 属性",
"连接",
"局域网设置(&L)..."
};
// 首先求得顶级父窗口
HWND hLastWin = FindWindow(A_szClassName[0], A_szWinName[0]);
// 逐次用FindWindowEx函数求出各级子窗口
for(int i=1; i<MyMaxParentWinCount; i++)
{
hLastWin = FindWindowEx(hLastWin, NULL,
A_szClassName[i], A_szWinName[i]);
}
return hLastWin;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
WinExec("RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,4", SW_SHOWNORMAL);
Sleep(1000); // 延时一秒
HWND hLastWin = MyFindWindow();
if(hLastWin)
SendMessage(hLastWin, BM_CLICK, 0, 0);
}
alloutoflove 2005-11-09
  • 打赏
  • 举报
回复
刚发现,你用
handle = FindWindow(NULL,"Internet 属性");
应该找不到那个对话框的句柄的,因为不是顶层窗口...再想想其它的办法=_=
alloutoflove 2005-11-09
  • 打赏
  • 举报
回复
VK_L就是大写"L", 不过可能不行...
如果可以拿到那个按钮的HWND,则给它发一个WM_LBUTTONDOWN,然后再发一个WM_LBUTTONUP应该就可以了吧?
XBox360 2005-11-09
  • 打赏
  • 举报
回复
试过,换成VK_L编译不通过,是不是要include什么?
alloutoflove 2005-11-09
  • 打赏
  • 举报
回复
所"l"换成VK_L行不?

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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