// 取網路卡序號, 網路線拔掉會找不到該網卡 // function GetAdapterNumber(var xCardNo: Integer; xAdapterList: TStringList= nil): String; // 取網路卡資訊, 1: 序號 其他的還沒寫, 網路線拔掉一樣可找到該網卡 public static string GetAdapterData(byte Value, ref int xCardNo, bool xCanUseWireless, List <string> xAdapterList, string xMacAddress) { string result; int mSize; TIP_ADAPTER_INFO mpInfo; object mPData; int mErrorCode; int mIndex; string mAdapterNum; bool mDoit; int mCardNo; LibPOSFunc.Units.LibPOSFunc.WriteToAlertFile("取得網卡", "C:\\LOG"); if (xCanUseWireless) { LibPOSFunc.Units.LibPOSFunc.WriteToAlertFile("允許在VISTA之後的OS下使用無線網卡", "C:\\LOG"); } else { LibPOSFunc.Units.LibPOSFunc.WriteToAlertFile("不允許在VISTA之後的OS下使用無線網卡, 但非VISTA之後的OS不在此限", "C:\\LOG"); } //@ Undeclared identifier(3): 'Win32MajorVersion' //@ Undeclared identifier(3): 'Win32MinorVersion' //@ Unsupported function or procedure: 'Format' LibPOSFunc.Units.LibPOSFunc.WriteToAlertFile("OS版本: " + Format("%d.%d", new object[] { Win32MajorVersion, Win32MinorVersion }), "C:\\LOG"); mIndex = 0; result = ""; //@ Unsupported function or procedure: 'Win32Platform' //@ Undeclared identifier(3): 'VER_PLATFORM_WIN32_NT' //@ Unsupported function or procedure: 'Win32Platform' //@ Undeclared identifier(3): 'VER_PLATFORM_WIN32_WINDOWS' mDoit = ((Win32Platform == VER_PLATFORM_WIN32_NT) || (Win32Platform == VER_PLATFORM_WIN32_WINDOWS)); if (mDoit) { if ((xAdapterList != null)) { xAdapterList.Clear(); } mSize = sizeof(mpInfo); try { //@ Unsupported function or procedure: 'AllocMem' mpInfo = AllocMem(mSize); // 做一次初始化, 取得需要的 Size mErrorCode = GetAdaptersInfo(mpInfo, mSize); //@ Undeclared identifier(3): 'ERROR_BUFFER_OVERFLOW' if ((mErrorCode == ERROR_BUFFER_OVERFLOW)) { //@ Unsupported function or procedure: 'FreeMem' FreeMem(mpInfo); //@ Unsupported function or procedure: 'AllocMem' mpInfo = AllocMem(mSize); mErrorCode = GetAdaptersInfo(mpInfo, mSize); } mPData = mpInfo; //@ Undeclared identifier(3): 'NO_ERROR' if (mErrorCode == NO_ERROR) { mCardNo = xCardNo; // 用來做判斷用的, 拿掉的話, 就不能抓到全部的網卡了 while ((mPData != null)) { TIP_ADAPTER_INFO _wvar1 = ((mPData) as TIP_ADAPTER_INFO); // // // type TIP_ADAPTER_INFO = record // struct _IP_ADAPTER_INFO* Next; // DWORD ComboIndex; // Char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; // char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; // UINT AddressLength; // BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; // DWORD Index; // UINT Type; // UINT DhcpEnabled; // PIP_ADDR_STRING CurrentIpAddress; // IP_ADDR_STRING IpAddressList; // IP_ADDR_STRING GatewayList; // IP_ADDR_STRING DhcpServer; // BOOL HaveWins; // IP_ADDR_STRING PrimaryWinsServer; // IP_ADDR_STRING SecondaryWinsServer; // time_t LeaseObtained; // time_t LeaseExpires; // IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; // end; LibPOSFunc.Units.LibPOSFunc.WriteToAlertFile("網卡號 : " + mAdapterNum, "C:\\LOG"); //@ Unsupported function or procedure: 'Format' LibPOSFunc.Units.LibPOSFunc.WriteToAlertFile("網卡順序: " + Format("%d", new int[] { mIndex }), "C:\\LOG"); if ((mCardNo == -1) || (mCardNo > -1) && (mIndex == xCardNo)) { //@ Unsupported function or procedure: 'format' mAdapterNum = format("%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x", new byte[] { _wvar1.Address[1], _wvar1.Address[2], _wvar1.Address[3], _wvar1.Address[4], _wvar1.Address[5], _wvar1.Address[6] }); // 取網卡號 if ((Value & 1) == 1) { // 檢查是否為符合的網卡 // 20111124 Add By Yen For 排除非實體網卡 // if CheckAdapterType(mAdapterNum) then if (CheckAdapterType(mAdapterNum, _wvar1.aType, xCanUseWireless)) { LibPOSFunc.Units.LibPOSFunc.WriteToAlertFile("這是符合要求的網卡: " + mAdapterNum, "C:\\LOG"); if (result == "") { result = mAdapterNum; xCardNo = mIndex; } if ((xAdapterList != null)) { xAdapterList.Add(mAdapterNum); } } // end of CheckAdapterType // end of if (Value and 1)= 1 then } else if ((Value & 2) == 2) { // 取指定網卡使用的IP if (xMacAddress == mAdapterNum) { result = _wvar1.CurrentIPAddress.IpAddress; } } } // end of if (xCardNo= -1) or (xCardNo> -1) and (mIndex= xCardNo) then mPData = _wvar1.Next; mIndex++; } // end of With // end of if } else { GetAdapterData_Show_AdapterInfoError(mErrorCode); } } finally { //@ Unsupported function or procedure: 'FreeMem' FreeMem(mpInfo); } } else { Yen_MessageDlg("OS 不符合! 無法執行本作業", "錯誤", System.Windows.Forms.MessageBoxIcon.Error, new System.Windows.Forms.MessageBoxButtons[] { System.Windows.Forms.MessageBoxButtons.OK }); } return(result); }
public static extern int GetAdaptersInfo(TIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen);