📄 ncpa.c
字号:
psh.nStartPage = 0;
psh.ppsp = psp;
psh.pfnCallback = NULL;
InitPropSheetPage(&psp[0], IDD_NETPROPERTIES, NICPropertyPageProc,(LPARAM)tpszCfgInstanceID);
PropertySheet(&psh);
return;
}
static INT_PTR CALLBACK
NICStatusPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
PROPSHEETPAGE *psp= (PROPSHEETPAGE *)lParam;
EnableWindow(GetDlgItem(hwndDlg,IDC_ENDISABLE),FALSE);
SetWindowLongPtr(hwndDlg,DWL_USER,(DWORD_PTR)psp->lParam);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_PROPERTIES:
{
TCHAR *tpszCfgInstance;
tpszCfgInstance = (TCHAR*)GetWindowLong(hwndDlg,DWL_USER);
DisplayNICProperties(hwndDlg,tpszCfgInstance);
}
break;
}
break;
}
return FALSE;
}
static INT_PTR CALLBACK
NICSupportPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
TCHAR Buffer[64];
PIP_ADAPTER_INFO pAdapterInfo = NULL;
ULONG adaptOutBufLen;
DWORD ErrRet = 0;
pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
adaptOutBufLen = sizeof(IP_ADAPTER_INFO);
if (GetAdaptersInfo( pAdapterInfo, &adaptOutBufLen) == ERROR_BUFFER_OVERFLOW)
{
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (adaptOutBufLen);
}
if ((ErrRet = GetAdaptersInfo(pAdapterInfo, &adaptOutBufLen)) != NO_ERROR)
{
MessageBox(hwndDlg, _T("error adapterinfo") ,_T("ncpa.cpl"),MB_ICONSTOP);
if (pAdapterInfo) free(pAdapterInfo);
return FALSE;
}
if (pAdapterInfo)
{
/*FIXME: select the correct adapter info!!*/
if (pAdapterInfo->DhcpEnabled)
LoadString(hApplet, IDS_ASSIGNED_DHCP, Buffer, sizeof(Buffer) / sizeof(TCHAR));
else
LoadString(hApplet, IDS_ASSIGNED_MANUAL, Buffer, sizeof(Buffer) / sizeof(TCHAR));
SendDlgItemMessage(hwndDlg, IDC_DETAILSTYPE, WM_SETTEXT, 0, (LPARAM)Buffer);
_stprintf(Buffer, _T("%S"), pAdapterInfo->IpAddressList.IpAddress.String);
SendDlgItemMessage(hwndDlg, IDC_DETAILSIP, WM_SETTEXT, 0, (LPARAM)Buffer);
_stprintf(Buffer, _T("%S"), pAdapterInfo->IpAddressList.IpMask.String);
SendDlgItemMessage(hwndDlg, IDC_DETAILSSUBNET, WM_SETTEXT, 0, (LPARAM)Buffer);
_stprintf(Buffer, _T("%S"), pAdapterInfo->GatewayList.IpAddress.String);
SendDlgItemMessage(hwndDlg, IDC_DETAILSGATEWAY, WM_SETTEXT, 0, (LPARAM)Buffer);
free(pAdapterInfo);
}
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_PROPERTIES:
{
}
break;
case IDC_DETAILS:
{
MessageBox(hwndDlg,_T("not implemented: show detail window"),_T("ncpa.cpl"),MB_ICONSTOP);
}
break;
}
break;
}
return FALSE;
}
static VOID
DisplayNICStatus(HWND hParent,TCHAR *tpszCfgInstanceID)
{
PROPSHEETPAGE psp[2];
PROPSHEETHEADER psh;
TCHAR tpszSubKey[MAX_PATH];
HKEY hKey;
DWORD dwType = REG_SZ;
TCHAR tpszName[MAX_PATH];
DWORD dwSize = sizeof(tpszName);
// Get the "Name" for this Connection
_stprintf(tpszSubKey,_T("System\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection"),tpszCfgInstanceID);
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,tpszSubKey,0,KEY_QUERY_VALUE,&hKey)!=ERROR_SUCCESS)
return;
if (RegQueryValueEx(hKey,_T("Name"),NULL,&dwType,(BYTE*)tpszName,&dwSize)!=ERROR_SUCCESS)
_stprintf(tpszName,_T("[ERROR]"));
//_stprintf(tpszName,_T("[ERROR]") _T(__FILE__) _T(" %d"),__LINE__ );
else
_tcscat(tpszName,_T(" Status"));
RegCloseKey(hKey);
ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;
psh.hwndParent = hParent;
psh.hInstance = hApplet;
// FIX THESE REACTOS HEADERS !!!!!!!!!
psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
psh.pszCaption = tpszName;//Caption;
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
psh.nStartPage = 0;
psh.ppsp = psp;
psh.pfnCallback = NULL;
InitPropSheetPage(&psp[0], IDD_CARDPROPERTIES, NICStatusPageProc, (LPARAM)tpszCfgInstanceID);
InitPropSheetPage(&psp[1], IDD_CARDSUPPORT, NICSupportPageProc, (LPARAM)tpszCfgInstanceID);
PropertySheet(&psh);
return;
}
//
// IPHLPAPI does not provide a list of all adapters
//
#if 0
static VOID
EnumAdapters(HWND hwndDlg)
{
TCHAR pszText[MAX_ADAPTER_NAME_LENGTH + 4];
IP_ADAPTER_INFO *pInfo;
ULONG size;
INT nIndex;
size=sizeof(Info);
if(GetAdaptersInfo(Info,&size)!=ERROR_SUCCESS)
{
MessageBox(hwndDlg,L"IPHLPAPI.DLL failed to provide Adapter information",L"Error",MB_ICONSTOP);
return;
}
pInfo = &Info[0];
while(pInfo)
{
swprintf(pszText,L"%S",Info[0].Description);
nIndex = SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_ADDSTRING,0,(LPARAM)pszText);
SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_SETITEMDATA,nIndex,(LPARAM)pInfo);
pInfo = pInfo->Next;
}
}
#endif
static void
NetAdapterCallback(void *pCookie,HKEY hBaseKey,TCHAR *tpszSubKey)
{
TCHAR tpszDisplayName[MAX_PATH];
//TCHAR tpszDeviceID[MAX_PATH];
TCHAR tpszCfgInstanceID[MAX_PATH];
TCHAR *ptpszCfgInstanceID;
HKEY hKey;
DWORD dwType = REG_SZ;
DWORD dwSize = sizeof(tpszDisplayName);
int nIndex;
HWND hwndDlg = (HWND)pCookie;
DWORD dwCharacteristics;
DPRINT("NetAdapterCallback: %S\n", tpszSubKey);
if(RegOpenKeyEx(hBaseKey,tpszSubKey,0,KEY_QUERY_VALUE,&hKey)!=ERROR_SUCCESS)
return;
DPRINT("NetAdapterCallback: Reading Characteristics\n");
dwType = REG_DWORD;
dwSize = sizeof(dwCharacteristics);
if(RegQueryValueEx(hKey,_T("Characteristics"),NULL,&dwType,(BYTE*)&dwCharacteristics,&dwSize)!=ERROR_SUCCESS)
dwCharacteristics = 0;
if (dwCharacteristics & NCF_HIDDEN)
return;
if (!(dwCharacteristics & NCF_VIRTUAL) && !(dwCharacteristics & NCF_PHYSICAL))
return;
DPRINT("NetAdapterCallback: Reading DriverDesc\n");
dwType = REG_SZ;
dwSize = sizeof(tpszDisplayName);
if (RegQueryValueEx(hKey,_T("DriverDesc"),NULL,&dwType,(BYTE*)tpszDisplayName,&dwSize)!= ERROR_SUCCESS)
_tcscpy(tpszDisplayName,_T("Unnamed Adapter"));
// get the link to the Enum Subkey (currently unused)
//dwType = REG_SZ;
//dwSize = sizeof(tpszDeviceID);
//if(RegQueryValueEx(hKey,_T("MatchingDeviceId"),NULL,&dwType,(BYTE*)tpszDeviceID,&dwSize) != ERROR_SUCCESS) {
// MessageBox(hwndDlg,_T("Missing MatchingDeviceId Entry"),_T("Registry Problem"),MB_ICONSTOP);
// return;
//}
// get the card configuration GUID
dwType = REG_SZ;
dwSize = sizeof(tpszCfgInstanceID);
if(RegQueryValueEx(hKey,_T("NetCfgInstanceId"),NULL,&dwType,(BYTE*)tpszCfgInstanceID,&dwSize) != ERROR_SUCCESS) {
MessageBox(hwndDlg,_T("Missing NetCfgInstanceId Entry"),_T("Registry Problem"),MB_ICONSTOP);
return;
}
ptpszCfgInstanceID = _tcsdup(tpszCfgInstanceID);
//
// **TODO** **FIXME** TBD
// At this point, we should verify, if the device listed here
// really represents a device that is currently connected to the system
//
// How is this done properly ?
nIndex = (int) SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_ADDSTRING,0,(LPARAM)tpszDisplayName);
SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_SETITEMDATA,nIndex,(LPARAM)ptpszCfgInstanceID);
RegCloseKey(hKey);
}
static void
EnumAdapters(HWND hwndDlg)
{
LPTSTR lpRegPath = _T("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}");
EnumRegKeys(NetAdapterCallback,hwndDlg,HKEY_LOCAL_MACHINE,lpRegPath);
return;
}
static INT_PTR CALLBACK
NetworkPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
NMHDR* pnmh;
int nIndex;
switch(uMsg)
{
case WM_INITDIALOG:
{
EnableWindow(GetDlgItem(hwndDlg,IDC_ADD),FALSE);
EnableWindow(GetDlgItem(hwndDlg,IDC_REMOVE),FALSE);
EnumAdapters(hwndDlg);
SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_SETCURSEL,0,0);
}
break;
case WM_NOTIFY:
pnmh=(NMHDR*)lParam;
switch(pnmh->code)
{
case PSN_APPLY:
case PSN_RESET:
while(SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_GETCOUNT,0,0)>0)
{
TCHAR *tpszString;
tpszString = (TCHAR*)SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_GETITEMDATA,0,0);
if(tpszString)
free(tpszString);
SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_DELETESTRING,0,0);
}
break;
}
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_NETCARDLIST:
if(HIWORD(wParam)==LBN_DBLCLK) {
nIndex = (int) SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_GETCURSEL,0,0);
if(nIndex!=-1)
DisplayNICStatus(hwndDlg,(TCHAR*)SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_GETITEMDATA,nIndex,0));
}
break;
case IDC_PROPERTIES:
nIndex = (int) SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_GETCURSEL,0,0);
if(nIndex!=-1)
DisplayNICStatus(hwndDlg,(TCHAR*)SendDlgItemMessage(hwndDlg,IDC_NETCARDLIST,LB_GETITEMDATA,nIndex,0));
break;
}
break;
}
return FALSE;
}
/* First Applet */
static LONG CALLBACK
DisplayApplet(VOID)
{
PROPSHEETPAGE psp[1];
PROPSHEETHEADER psh = {0};
TCHAR Caption[1024];
LoadString(hApplet, IDS_CPLSYSTEMNAME, Caption, sizeof(Caption) / sizeof(TCHAR));
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_PROPSHEETPAGE;
psh.hwndParent = NULL;
psh.hInstance = hApplet;
psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
psh.pszCaption = Caption;
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
psh.nStartPage = 0;
psh.ppsp = psp;
psh.pfnCallback = NULL;
InitPropSheetPage(&psp[0], IDD_PROPPAGENETWORK, NetworkPageProc,0);
return (LONG)(PropertySheet(&psh) != -1);
}
/* Control Panel Callback */
LONG CALLBACK
CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
{
UNREFERENCED_PARAMETER(hwndCPl);
switch (uMsg)
{
case CPL_INIT:
{
return TRUE;
}
case CPL_GETCOUNT:
{
return sizeof(Applets)/sizeof(APPLET);
}
case CPL_INQUIRE:
{
CPLINFO *CPlInfo = (CPLINFO*)lParam2;
CPlInfo->lData = 0;
CPlInfo->idIcon = Applets[(int)lParam1].idIcon;
CPlInfo->idName = Applets[(int)lParam1].idName;
CPlInfo->idInfo = Applets[(int)lParam1].idDescription;
break;
}
case CPL_DBLCLK:
{
Applets[(int)lParam1].AppletProc();
break;
}
}
return FALSE;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
hApplet = hinstDLL;
break;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -