1

コンピューターの MAC アドレスを検出する小さな Windows アプリケーションを作成しました。ASP.NET Web ページもあります。ログインページが読み込まれると、その実行可能ファイルが実行されます。

MACアドレス値を取得しようとしています。どうすればこれを達成できますか?

デスクトップ アプリケーションはその値を Web ページに返すことができますか?

これが私がこれまでに試したことです。

デスクトップ アプリケーション コード:

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;
}

戻り値は に代入されるだけLabelです。

可能であれば、誰でも私に提案できますか?どんな提案でも大歓迎です。

4

1 に答える 1

2

MACAddress というクエリ パラメータを受け入れるようにサイトを設定できます。デスクトップ アプリを Web サイトに POST させます。Cookie の値を POST します。これは役立つかもしれません:

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();
   }
}

あなたが理解していないことが何であるかわかりません(意地悪をしようとしているのではありません)。ここでは単純化していますが、POSTing は Web サイトにデータを送信するための HTTP プロトコルです。もう 1 つは GET (データを読み取るためのプロトコル) です。

それが役立つことを願っています!

-------Web 側を表示するように更新中...-----------

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 に答える