1

我已经构建了一个小型 Windows 应用程序,它可以找到计算机的 MAC 地址。我也有一个 ASP.NET 网页。当我的登录页面加载时,我正在运行该可执行文件。

我正在尝试获取 MAC 地址值。我怎样才能做到这一点?

我的桌面应用程序可以将该值返回到我的网页吗?

这是我到目前为止所尝试的。

桌面应用程序代码:

public string GetSystemMACID()
{
    string systemName = System.Windows.Forms.SystemInformation.ComputerName;
    try
    {
        ManagementScope theScope = new ManagementScope("\\\\" + Environment.MachineName + "\\root\\cimv2");
        ObjectQuery theQuery = new ObjectQuery("SELECT * FROM Win32_NetworkAdapter");
        ManagementObjectSearcher theSearcher = new ManagementObjectSearcher(theScope, theQuery);
        ManagementObjectCollection theCollectionOfResults = theSearcher.Get();

        foreach (ManagementObject theCurrentObject in theCollectionOfResults)
        {
            if (theCurrentObject["MACAddress"] != null)
            {
                 string macAdd = theCurrentObject["MACAddress"].ToString();
                 return macAdd.Replace(':', '-');
            }
        }
    }
    catch (ManagementException e)
    {
    }
    catch (System.UnauthorizedAccessException e)
    {

    }
    return string.Empty;
}

返回值只是分配给 a Label

如果可能的话,谁能建议我?欢迎任何建议。

4

1 回答 1

2

您可以将站点设置为接受名为 MACAddress 的查询参数。将桌面应用程序 POST 到网站;发布 cookie 的值。这可能会有所帮助:

using System.Net;

...

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.UseDefaultCredentials = true;
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Method = "POST";

byte[] requestBytes = Encoding.UTF8.GetBytes(queryString);
httpWebRequest.ContentLength = requestBytes.Length;

using (var requestStream = httpWebRequest.GetRequestStream())
{
    requestStream.Write(requestBytes, 0, requestBytes.Length);
    requestStream.Close();
}

查询字符串看起来像

"MACAddress=" + macAdd 

-------------根据要求更新---------------

在您的桌面应用程序中,添加 using 语句。您可能还需要在解决方案资源管理器中添加对 Dll 的引用。

然后,创建一个名为 PostMacAddress 的方法,如下所示:

public void PostMacAddress(string url, string macAdd)
{
   var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
   httpWebRequest.UseDefaultCredentials = true;
   httpWebRequest.ContentType = "application/x-www-form-urlencoded";
   httpWebRequest.Method = "POST";

   var queryString = "MACAddress=" + macAdd; 

   byte[] requestBytes = Encoding.UTF8.GetBytes(queryString);
   httpWebRequest.ContentLength = requestBytes.Length;

   using (var requestStream = httpWebRequest.GetRequestStream())
   {
      requestStream.Write(requestBytes, 0, requestBytes.Length);
      requestStream.Close();
   }
}

我不确定你不理解的是什么(不是故意的)。我在这里进行了简化,但是,POST 是一种用于将数据发送到网站的 HTTP 协议。另一种是 GET(读取数据的协议)。

希望有帮助!

--------更新以显示网页端......------------

在您的 Page_Load 方法中,您需要像这样获取 QueryString:

protected void Page_Load(object sender, EventArgs e)
{
     if (!String.IsNullOrEmpty(Request.QueryString["MACAddress"])
         lblMacAddress.Text = Request.QueryString["MACAddress"];
}
于 2012-08-22T12:21:57.953 回答