win10下,如何用代码打开可用网络这个窗口?

lianghong 2020-02-19 01:36:32


win10下,如何用代码打开并显示可用网络这个窗口?如上图:
...全文
301 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2020-10-20
  • 打赏
  • 举报
回复
你可以使用Native Wifi API去枚举SSID列表~
Intel0011 2020-10-14
  • 打赏
  • 举报
回复
引用 楼主 lianghong 的回复:
win10下,如何用代码打开并显示可用网络这个窗口?如上图:
以上只是模拟鼠标左键单击动作 可以试一下取得句柄后再向其发送鼠标左键单击消息
Intel0011 2020-10-14
  • 打赏
  • 举报
回复
模拟点击一下
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>
#include <commctrl.h>
#include <locale.h>

#pragma comment(lib, "user32")

typedef struct TRAYDATA
{
   HWND hwnd;
   UINT uID;
   UINT uCallbackMessage;
   DWORD Reserved[2];
   HICON hIcon;
} TRAYDATA;

int _tmain(void)
{
   HWND hWnd = NULL;
   DWORD dwPID;
   DWORD dwCount;
   HANDLE hPro;
   LPVOID pTB;
   DWORD i;
   SIZE_T t;
   TBBUTTON tb = { 0 };
   TRAYDATA trayData = { 0 };

   RECT *pRect;
   RECT rc;

   #define SE_DEBUG_PRIVILEGE    20
   typedef LONG NTSTATUS;
   BOOL bResult;
   typedef NTSTATUS (WINAPI *_RtlAdjustPrivilege)(ULONG /*Privilege*/,
                                                  BOOL  /*Enable*/,
                                                  BOOL  /*CurrentThread*/,
                                                  PBOOL /*Enabled*/);

   _RtlAdjustPrivilege RtlAdjustPrivilege = (_RtlAdjustPrivilege)GetProcAddress(GetModuleHandle(TEXT("ntdll")), "RtlAdjustPrivilege");
   RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE, TRUE, FALSE, &bResult);

   _tsetlocale(LC_ALL, _T("chs"));

   hWnd = FindWindow(_T("Shell_TrayWnd"), NULL);
   hWnd = FindWindowEx(hWnd, NULL, _T("TrayNotifyWnd"), NULL);
   hWnd = FindWindowEx(hWnd, NULL, _T("SysPager"), NULL);
   hWnd = FindWindowEx(hWnd, NULL, _T("ToolbarWindow32"), NULL);

   GetWindowThreadProcessId(hWnd, &dwPID);
   dwCount = SendMessage(hWnd, TB_BUTTONCOUNT, 0, 0);
   //_tprintf(_T("%d\n"), dwCount);

   hPro = OpenProcess(PROCESS_ALL_ACCESS, 0, dwPID);
   pTB = VirtualAllocEx(hPro, NULL, sizeof(TBBUTTON), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
   pRect = VirtualAllocEx(hPro, 0, sizeof(RECT), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

   for (i = 0; i < dwCount; ++i)
   {  
      //获取BUTTON信息
      LRESULT ret = SendMessage(hWnd, TB_GETBUTTON, i, (LPARAM)(LPTBBUTTON)pTB);
      ReadProcessMemory(hPro, pTB, &tb, sizeof(TBBUTTON), &t);

      ReadProcessMemory(hPro,
                        (LPCVOID)tb.dwData, //取dwData字段指向的TRAYDATA结构
                        &trayData,
                        sizeof(TRAYDATA),
                        NULL);

      SendMessage(hWnd, TB_GETITEMRECT, i, (LPARAM)pRect); //发送消息获取托盘项区域数据
      ReadProcessMemory(hPro, pRect, &rc, sizeof(rc), NULL); //读取托盘区域数据
      //_tprintf(_T("%d %d %d %d\n"), rc.left, rc.top, rc.right, rc.bottom);
      
      if (IS_INTRESOURCE(tb.iString))
         _tprintf(_T("%d\n"), tb.iString);
      else
      {
         TCHAR str[MAX_PATH];
         ReadProcessMemory(hPro, (LPCVOID)tb.iString, str, MAX_PATH, &t); //tb.iString指向的是hPro空间
         //_tprintf(_T("%s\n"), str);
         
         if (_tcsstr(str, _T("Internet")))
         {
            POINT OldPoint, Point = { (rc.right - rc.left) * (i + 0.5), (rc.bottom - rc.top) * 0.5 };
            ClientToScreen(hWnd, &Point);
            GetCursorPos(&OldPoint);
            SetCursorPos(Point.x, Point.y);
            //Sleep(1000);
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
            SetCursorPos(OldPoint.x, OldPoint.y);
         }
      }
   }

   VirtualFreeEx(hPro, pRect, sizeof(RECT), MEM_DECOMMIT);  
   VirtualFreeEx(hPro, pRect, 0, MEM_RELEASE);  
   VirtualFreeEx(hPro, pTB, sizeof(TBBUTTON), MEM_DECOMMIT);
   VirtualFreeEx(hPro, pTB, 0, MEM_RELEASE);
   CloseHandle(hPro);

   return 0;
}
lianghong 2020-10-10
  • 打赏
  • 举报
回复
我是想要知道如果用代码弹出那个可用 wifi 菜单,而不是自己做一个这样的菜单。。。。
zgl7903 2020-02-19
  • 打赏
  • 举报
回复

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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