winxp+sdk+vc6
这个函数调用了"连接"的属性对话框,用的上下文菜单那条路.
试试替换一下这句:cmi.lpVerb =MAKEINTRESOURCE(8) ;//"Properties";
8是模拟点击"属性(R)",不知道"禁止(B)"是多少.
hwnd传this就成.在2000下使用需要做点修改,而且我本来是用的无线网卡.
方法不好,投机取巧,不过能用.int ShowConfigDlg(HWND hwnd)
{
LPITEMIDLIST pidlControlPanel;
         IShellFolder2 *psfCtrlPanel;
IShellFolder *psfDesktop; HRESULT hr=S_OK;
BOOL bRet=false;
DWORD dwErr=0;
    LPMALLOC pMalloc; // Intialize the COM library
hr=CoInitialize(NULL);
// Get the memory management allocator
    hr=SHGetMalloc(&pMalloc); // Get the desktop folder
SHGetDesktopFolder(&psfDesktop);

// Retrieve the Control Panel folder
    hr=SHGetSpecialFolderLocation(NULL, CSIDL_CONTROLS, &pidlControlPanel);
    if (FAILED(hr))
return false;    // Get the IShellFolder interface
    hr=psfDesktop->BindToObject(pidlControlPanel, NULL, IID_IShellFolder, (LPVOID*)&psfCtrlPanel);
    psfDesktop->Release(); // Enum the "Control Panel" folder to get the "Network Connections" folder
LPENUMIDLIST ppenum=NULL;
    hr=psfCtrlPanel->EnumObjects(NULL,SHCONTF_FOLDERS,&ppenum); IShellFolder2 *psfFirstFolder = NULL;
ULONG celtFetched;
    
    LPITEMIDLIST pidlItems = NULL;    STRRET strDispName;
    ULONG uAttr;
//
// first search the "Network Connections" folder
//
while( hr = ppenum->Next(1,&pidlItems, &celtFetched) == S_OK && (celtFetched) == 1)
    {
        psfCtrlPanel->GetDisplayNameOf(pidlItems, SHGDN_INFOLDER, &strDispName);
        
CString str = strDispName.pOleStr; if(wcscmp(strDispName.pOleStr,L"网络连接"))
{
   continue;
}
        if(!psfFirstFolder)
        {
            uAttr = SFGAO_FOLDER;
            psfCtrlPanel->GetAttributesOf(1, (LPCITEMIDLIST *) &pidlItems, &uAttr);
            if(uAttr & SFGAO_FOLDER)
            {
                hr = psfCtrlPanel->BindToObject(pidlItems, NULL, IID_IShellFolder, (LPVOID *) &psfFirstFolder);
            }
        }
        pMalloc->Free(pidlItems);
break;
    }// if(ppenum)
// ppenum->Release(); //
// Search the connection you wanna configue, for example, "Local Area Connection"
//
    IContextMenu *pcm = NULL;
    BOOL bFind;
BOOL bJoynet;    if(psfFirstFolder)
    {
        hr = psfFirstFolder->EnumObjects(NULL,SHCONTF_NONFOLDERS, &ppenum);
        while( hr = ppenum->Next(1,&pidlItems, &celtFetched) == S_OK && (celtFetched) == 1)
        {
bFind = FALSE;
bJoynet = FALSE;
//hr = psfFirstFolder->GetDefaultSearchGUID(&guidTemp);
SHELLDETAILS shellDeatails;
//there are 5 state items
for(int i=1;i<6;i++)
{
psfFirstFolder->GetDetailsOf(pidlItems,i,&shellDeatails);

char state[50];
//char *cout = (char*)malloc(sizeof(char)*50);
char *cout = state;
hr = StrRetToStr(&(shellDeatails.str),pidlItems,&cout);
CString csState = cout;
if(csState.Compare(_T("已启用"))==0)
bFind = TRUE;
else
if(csState.Left(6).Compare(_T("Joynet"))==0)
bJoynet = TRUE;

}

//if is in use and is Joynet WLAN in use,than I get it.
if(bFind&&bJoynet)
{
hr=psfFirstFolder->GetUIObjectOf(NULL,1,(LPCITEMIDLIST*)&pidlItems,IID_IContextMenu,NULL,(void**)&pcm);
pMalloc->Free(pidlItems);
break;
}
        }
    }
//
// Invoke the Properites menu, whose index is 8 on the Windows XP professional (English) 
// NOTE: on other platforms, the index of the Properties menu might not be 8

    CMINVOKECOMMANDINFO cmi;
ZeroMemory(&cmi,sizeof(CMINVOKECOMMANDINFO));
cmi.cbSize = sizeof(CMINVOKECOMMANDINFO);
cmi.fMask = 0;
cmi.hwnd = hwnd;
cmi.lpVerb =MAKEINTRESOURCE(8) ;//"Properties";
cmi.lpParameters = NULL;
cmi.lpDirectory = NULL;
cmi.nShow = SW_SHOWNORMAL;
cmi.dwHotKey = 0;
cmi.hIcon = NULL;
if(pcm&&bFind&&bJoynet)
hr = pcm->InvokeCommand(&cmi); //
// Cleanup
//
    if(pMalloc)
pMalloc->Free(pidlControlPanel);
    if(psfCtrlPanel)
psfCtrlPanel->Release();
    if(psfFirstFolder)
psfFirstFolder->Release();
    if(pcm)
pcm->Release();    CoUninitialize(); if(bFind == FALSE||bJoynet == FALSE)
{
MessageBox(NULL,_T("无线网卡没有正确安装或者被禁用!"),_T("错误"),MB_ICONSTOP);
return -1;
} return 0;
}

解决方案 »

  1.   

    还有更好的方法吗?先谢谢“anywn_cwh(我有个问题) ”
      

  2.   

    InternetSetOption
    具体请查阅MSDN
      

  3.   

    void SetGlobalOffline(BOOL fGoOffline)
       {
          INTERNET_CONNECTED_INFO ci;      memset(&ci, 0, sizeof(ci));
          if(fGoOffline) 
          {
             ci.dwConnectedState = INTERNET_STATE_DISCONNECTED_BY_USER;
             ci.dwFlags = ISO_FORCE_DISCONNECTED;
          } 
          else 
         {
            ci.dwConnectedState = INTERNET_STATE_CONNECTED;
         }     InternetSetOption(NULL, 
             INTERNET_OPTION_CONNECTED_STATE, &ci, sizeof(ci));
       }
      

  4.   

    e_notimpl(e_notimpl),本地连接的handle如何得到,传null没有作用