星期一第一贴,怎么用程序打开网络设置对话框

David_Hu 2009-06-29 09:16:27
加精
任务栏会有WIFE和本地网络两个图标,我们双击它就会打开一个设置的对话框,现在我想用程序来控制打开它们,请问有什么方法?

我试过好多方法都没有成功,希望大家给点实际的建议,最好是自己动手试过的
因为那个窗体不是独立的EXE,它是附属Device.exe 的
...全文
602 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangcheng_ok 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wolong98 的回复:]
我的改动比较大,思路如下
修改 quickconfigui.c 文件中的
从 HRESULT GetDeviceSystrayIconByName(PTCHAR ptcDeviceName, SystrayIcon **pSysIcon)
函数拷贝一份修改为
HRESULT GetDeviceSystrayIconHwndByName(PTCHAR ptcDeviceName, HW……
[/Quote]这个能实现吗?
wolong98 2010-10-18
  • 打赏
  • 举报
回复
楼上的 看不到图片
zhongguokeji11 2010-10-18
  • 打赏
  • 举报
回复
请问谁知道在一个界面上通过一个按钮按下就可以弹出wifi的无线信息这个界面了,界面如图:

这个功能在wince5.0中可以用鼠标双击任务栏中的图标实现
gooogleman 2010-01-20
  • 打赏
  • 举报
回复
我觉得可以参照控制面板的蓝牙驱动去直接调用它就可以了。
leemuxiang 2010-01-08
  • 打赏
  • 举报
回复
楼主的这个问题解决的怎么样了,我把ethman.dll改成了一个应用程序,可以在没有explorer.exe 的情况下调用界面,主要解决wifi的设置问题,但是所用的资源都是netui.rc中的,因为源代码资源为英文,所以即使在中文系统中,界面也是英文,所以我的问题时,关于netui.rc 中英文资源对应的中文资源在哪里?
AksenXu 2009-10-16
  • 打赏
  • 举报
回复
可以使用CreateFileMapping的方式来调用出来。
在Quickconfigui.c中AddNetUISystrayIcon的时候,创建一个共享文件,然后将nid->hWnd写入到共享文件当中,如果有多个网卡的话,可以适当修改filemapping的结构来传输参数。

然后在应用程序当中,创建同样名字的CreateFileMapping,这样会打开netui.dll当中创建的共享文件,读取得到窗口HWND,然后
PostMessage(HWND, WM_WZCSYSTRAYICON, 1, WM_LBUTTONDBLCLK);
如果你只有一个网卡的话,
PostMessage(HWND_BROADCAST, WM_WZCSYSTRAYICON, 1, WM_LBUTTONDBLCLK);
这样不用做任何修改就可以得到网络设置框。


不能通过加API的方式,因为dll的全局变量不能简单的共享,所以LoadLibrary之后,读取不到之前系统初始化时候的网卡信息。
金笛子 2009-09-29
  • 打赏
  • 举报
回复
学习了
wolong98 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 hudaweikevin 的回复:]
引用 20 楼 wolong98 的回复:
我的改动比较大,思路如下
修改 quickconfigui.c 文件中的
从 HRESULT  GetDeviceSystrayIconByName(PTCHAR ptcDeviceName, SystrayIcon **pSysIcon)
函数拷贝一份修改为
  HRESULT GetDeviceSystrayIconHwndByName(PTCHAR ptcDeviceName, HWND *hwnd)

  函数内部 *pSYsIcon = curr; 修改为 *hwnd = curr->hMainWnd;

并且在 netui.def 增加 GetDeviceSystrayIconHwndByName 的函数

外部调用就是
HANDLE ha…


试过了,这样不可取,WIFI就用不了,他是新建的一个连接,设置的时候也不能关闭对话框,而且连不上网络
[/Quote]


或者 修改 ethman.dll 这个驱动,增加一个 ETM_IOControl 来获取内部 netui.dll
网络连接列表,(netui.dll 是被 ethman.dll 加载的)
David_Hu 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wolong98 的回复:]
我的改动比较大,思路如下
修改 quickconfigui.c 文件中的
从 HRESULT GetDeviceSystrayIconByName(PTCHAR ptcDeviceName, SystrayIcon **pSysIcon)
函数拷贝一份修改为
HRESULT GetDeviceSystrayIconHwndByName(PTCHAR ptcDeviceName, HWND *hwnd)

函数内部 *pSYsIcon = curr; 修改为 *hwnd = curr->hMainWnd;

并且在 netui.def 增加 GetDeviceSystrayIconHwndByName 的函数

外部调用就是
HANDLE ha…
[/Quote]

试过了,这样不可取,WIFI就用不了,他是新建的一个连接,设置的时候也不能关闭对话框,而且连不上网络
xumercury 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sunrain_hjb 的回复:]
SHELLEXECUTEINFO info;
TCHAR szControlPanelCmdLine[200];
swprintf( szControlPanelCmdLine, L"\\windows\\connpnl.cpl");
info.cbSize = sizeof( info );
info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
info.lpVerb = NULL;
info.lpFile = TEXT("ctlpnl.exe");
info.lpParameters = szControlPanelCmdLine;
info.lpDirectory = NULL;
info.nShow = SW_SHOW;
info.hInstApp = NULL;
if(ShellExecu…
[/Quote]
经典。学习了
wolong98 2009-07-03
  • 打赏
  • 举报
回复
补充
因为netui.dll 默认是被驱动 ethman.dll 加载进内核空间
跟用户程序自己加载 netui.dll 处于不同空间, 不能通过GetProcAddress(handle, _T("GetDeviceSystrayIconHwndByName"));
HWND hwnd;
fn_gethwnd(_T("CS89001", &hwnd);
::PostMessage(hwnd, WM_WZCSYSTRAYICON, 1, WM_LBUTTONDBLCLK); 来直接打开连接属性窗口,
需要先要通过
AddNetUISystrayIcon
RemoveNetUISystrayIcon

(AddNetUISystrayIcon 函数先修改为并不真正创建图标,不然图标跟ethman.dll创建的图标重复)
来创建自己的网络适配器任务栏图标列表。
然后才可以通过
fn_gethwnd(_T("CS89001", &hwnd);
::PostMessage(hwnd, WM_WZCSYSTRAYICON, 1, WM_LBUTTONDBLCLK); 来直接打开连接属性窗口,
wolong98 2009-07-03
  • 打赏
  • 举报
回复
我的改动比较大,思路如下
修改 quickconfigui.c 文件中的
从 HRESULT GetDeviceSystrayIconByName(PTCHAR ptcDeviceName, SystrayIcon **pSysIcon)
函数拷贝一份修改为
HRESULT GetDeviceSystrayIconHwndByName(PTCHAR ptcDeviceName, HWND *hwnd)

函数内部 *pSYsIcon = curr; 修改为 *hwnd = curr->hMainWnd;

并且在 netui.def 增加 GetDeviceSystrayIconHwndByName 的函数

外部调用就是
HANDLE handle = loadlibrary("netui.dll");
fn_gethwnd = GetProcAddress(handle, _T("GetDeviceSystrayIconHwndByName"));
HWND hwnd;
fn_gethwnd(_T("CS89001", &hwnd);
::PostMessage(hwnd, WM_WZCSYSTRAYICON, 1, WM_LBUTTONDBLCLK);
David_Hu 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wolong98 的回复:]
刚才没注意看清楚

上面是显示ip设置属性窗口,跟控制面板的中窗口一样

如果是点击任务栏的网络连接图标 来显示连接属性(这个对话框是不能设置,只能显示IP信息或者更新DHCP新IP)

这个要修改 netui.dll 才行, 再导出一个函数后
获取内部窗口句柄来对它发送消息来显示对话框

明天整理下资料发上来
[/Quote]

等你资料,如果真的要实现,我也觉得要重新修改或增加netui.dll的导出函数,只是这样调试比较麻烦
huangchengbo 2009-07-03
  • 打赏
  • 举报
回复
可能是吧
yinzisheng 2009-07-02
  • 打赏
  • 举报
回复
学习
qlzf11140820 2009-07-02
  • 打赏
  • 举报
回复

Shell32.Shell sh = new Shell32.Shell();
Shell32.Folder folder;
folder = sh.NameSpace(3); //该组件有很多的Namespace,对应关系如下:

// 0 桌面
//1 Internet Explorer
//2 程序
//3 控制面板
//4 打印机和传真
//5 我的文档
//6 收藏夹
//7 启动
//8 我最近的文档
//9 SendTo
//10 回收站
//11 「开始」菜单

希望对你有用。。
lhmeng0316 2009-07-02
  • 打赏
  • 举报
回复
ereaeafesaesafdfdsafdsafsa
wolong98 2009-07-02
  • 打赏
  • 举报
回复
刚才没注意看清楚

上面是显示ip设置属性窗口,跟控制面板的中窗口一样

如果是点击任务栏的网络连接图标 来显示连接属性(这个对话框是不能设置,只能显示IP信息或者更新DHCP新IP)

这个要修改 netui.dll 才行, 再导出一个函数后
获取内部窗口句柄来对它发送消息来显示对话框

明天整理下资料发上来
wolong98 2009-07-02
  • 打赏
  • 举报
回复
调用 CallAdapterIPProperties 即可
头文件是 netui.h

命令格式是 CallAdapterIPProperties(HWND hParent, LPTSTR szAdapterName)
hParent 父窗口句柄(将阻塞父窗口消息队列), 建议用单独线程来调用
LPTSTR szAdapterName 网卡名称,即 控制面板中网络连接中显示的名称

CallAdapterIPProperties 只适合显示 以太网之类网络设备属性(网卡 , PPPoE连接后的一个类型PPPoE Line0的网卡)

如果要显示 拨号连接的属性, 则不是这个函数,
明天会公司找资料看看
yzbsd 2009-07-02
  • 打赏
  • 举报
回复
mark
加载更多回复(11)

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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