소스


TestUSB_Ver2.zip


소스

C# USB Serial number, Pnp number, Description 정보 출력 



using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestUSB_Ver2
{
    class USBSerialNumber   //USB 정보를 가져와서 출력해주는 클래스
    {
        public void main(object Main_USB_inter)
        {
            DataGridView USB_inter = Main_USB_inter as DataGridView; // Form object 상속 받음 
            USB_inter.Rows.Clear();
            
            // USB 정보 호출 
            var usbDevices = GetUSBDevices();
            int i = 1;
            foreach(var usbDevice in usbDevices)
            {
                USB_inter.Rows.Add(i, usbDevice.DeviceID, usbDevice.PnpDeviceID, usbDevice.Description);
                i++;
            }
            //// 

        }
        // USB 정보 가져오는 부분 
        static List GetUSBDevices()
        {
            List devices = new List();

            ManagementObjectCollection collection;
            using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub"))
                collection = searcher.Get();

            foreach (var device in collection)
            {
                devices.Add(new USBDeviceInfo(
                (string)device.GetPropertyValue("DeviceID"),
                (string)device.GetPropertyValue("PNPDeviceID"),
                (string)device.GetPropertyValue("Description")
                ));
            }

            collection.Dispose();
            return devices;
        }
    }
    class USBDeviceInfo
    {
        public USBDeviceInfo(string deviceID, string pnpDeviceID, string description)
        {
            this.DeviceID = deviceID;
            this.PnpDeviceID = pnpDeviceID;
            this.Description = description;
        }
        public string DeviceID { get; private set; }
        public string PnpDeviceID { get; private set; }
        public string Description { get; private set; }
    }
    // USB 정보 가져오는 부분--끝
}


소스 : http://jmoon.co.kr/106 / jmoon1601.tistory.com/106


C# 현재 연결되어 있는 IP주소와 MAC주소 가져오기


 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Net;
using System.Management;


// http://www.maniuk.net/2016/08/get-ip-address-by-mac-address-in-csharp.html //
namespace TestUSB_Ver2
{
    class Netinfo // IP주소와 MAC주소 가져오기 
    {
        
        public void main(object Main_Net_inter) //메인 호출 
        {
            DataGridView Net_inter = Main_Net_inter as DataGridView;
            Net_inter.Rows.Clear();

            IPHostEntry GetIP= Dns.GetHostEntry(Dns.GetHostName());

            string ipAddr = string.Empty;

            int Net_index = 1;

            for(int i = 0; i < GetIP.AddressList.Length; i++)
            {
                if(GetIP.AddressList[i].AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)  // IPv4에 해당하면 출력
                {
                    ipAddr = GetIP.AddressList[i].ToString(); // IPv4에 해당되는 IP 

                    Netinfo Mac = new Netinfo(); // 해당 IP에 대응되는 MAC 가져오기 
                    Net_inter.Rows.Add(Net_index, ipAddr, Mac.GetMac(ipAddr)); // DataGridView 출력  

                    Net_index++;
                }
            }
        }

        public string GetMac(string ip)   // MAC가져오는 메소드 
        {
            string rtn = string.Empty;
            ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'");
            ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);
            foreach (ManagementObject mo in query1.Get())
            {
                string[] address = (string[])mo["IPAddress"];
                if (address[0] == ip && mo["MACAddress"] != null)
                {
                    rtn = mo["MACAddress"].ToString();
                    break;
                }
            }
            return rtn;
        }
    }


 

Window forms에서 DataGridView로 IP주소와 그에 맞는 MAC주소를 가져온다.



using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using System.Drawing; using System.Security.Principal; using System.Management; namespace ConsoleApplication5 { class Program { public static ManagementObjectCollection WMIQuery(string strwQuery) { ObjectQuery oQuery = new ObjectQuery(strwQuery); ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oQuery); ManagementObjectCollection oReturnCollection = oSearcher.Get(); return oReturnCollection; } static void Main(string[] args) { string[] tt = { "00:00:00:00:00:00", "00:00:00:00:00:00" }; test(tt); Console.ReadLine(); } static void test(string[] args) { SelectQuery wmiQuery = new SelectQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL"); ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher(wmiQuery); foreach (ManagementObject item in searchProcedure.Get()) { Console.WriteLine(item["MACAddress"]); try { if (args.Contains(item["MACAddress"].ToString())) { //(item["MACAddress"]).Equals("00:00:00:00:00:00") item.InvokeMethod("Enable", null); } else { item.InvokeMethod("Disable", null); } } catch(NullReferenceException e) { item.InvokeMethod("Disable", null); } } } } }

string[] tt에 해당하는 mac 주소를 제외한 모든 네트워크 어뎁터의 연결을 끊어 버립니다.

제어판 ->네트워크 환경 -> 어뎁터 설정에 보시면 입력되어 있던 mac주소외에 어뎁터는 모두 연결이 끊깁니다. 

필요한 부분이 있으시면 필요에 맞게 고치시면 될 듯 싶습니다. 

참조 : Stack overflow, MSDN


ConsoleApplication5.zip


C# window forms  .dll 생성 및 참조 후  .dll파일 디버깅하는 방법 


새프로젝트에서 클래스 라이브러리로 생성



새 항목으로 사용자 정의 컨트롤로 만들면 Window form의 형태를 만들 수 있음




원하는 기능을 만들고 컴파일 (Ctrl+Shift+B)하고 실행하면 (Ctrl+F5) 출력 형식이 클래스 라이브러리인 프로젝트는 직접 시작할 수 없습니다. 라는 오류가 나타나며 컴파일은 되나 실행은 되지 않는다.

클래스 라이브러리로 컴파일을 하면 "/해당 프로젝트 경로/bin/debug(release)/XXXX.dll" 파일이 생기는 걸 확인 할 수 있다.





클래스 라이브러리 파일을 확인 하기위해서 새로운 프로젝트를 열고 Windows Forms 응용 프로젝트를 새로 만들어 준다.




도구 상자에서 항목 선택을 고른다.


.NET Framework 구성요소에서 찾아보기를 누른다.



아까 클래스라이브러리에서 컴파일했던 경로에서 .dll 파일을 찾는다. 

그 후 확인을 누르면 일반 밑에 무언가가 생긴 것을 확인할 수 있고 그것을 드래그 앤 드롭으로 놓으면 클래스 라이브러리에서 만든 폼창이 생기는 것을 확인 할 수 있다.






만약 클래스라이브러리(USB_info)에서 기능을 수정 후 컴파일을 하고, TEST2(Window Forms 프로젝트) 를 컴파일하면 따로 설정하지 않아도 클래스 라이브러리에서 수정된 것이 자동으로 적용이 된다. 


  • Datagridview 속성값 가운데 정렬


    DataGridview 클릭후 속성(F4)에서 모양->ColumnHeadersDefault값에서 레이아웃을 Middlecenter로 변경




  • Datagridview 속성창을 크기에 맞게 꽉 채우기

    Datagridview 클릭후 속성(F4)에서 레이아웃 -> Autosize columns을 Fill로 변경

    만약 특정 컬럼 크기를 조절하고 싶다면 Datagridview 클릭 후 -> 열 편집 -> 레이아웃 FillWeight 크기 수정




  • Datagridview에서 " * "를 없애거나 마지막 여백 줄 삭제

Datagridview 클릭 후 속성(F4) -> 동작에 AllowUserToAddRows를 "False"로 변경 




C# window form에서 panel을 이용하여 간단한 구성만들기



Windows Forms으로 새 프로젝트 생성



도구 상자에서 Panel을 드래그 앤 드롭으로 생성



패널이 생성된 것을 확인하고 속성(F4)를 눌러 레이아웃 -> Dock을 위치에 맞게 여러개 생성 



위의 방법으로 원하는 곳 구성 



가운데에 Datagridview를 시험삼아 생성-> 부모 컨테이너에서 도킹



그럼 나머지에 맞게 꽉 차게 들어감 


C# 네임스페이스에 형식 또는 네임스페이스 이름이 없습니다. 어셈블리 참조가 있는지 확인하세요. 해결 방법


최근에 C#으로 개발해야 할 일이 생겨서 열심히 코딩하는 중에 아래와 같은 에러를 발생하는 것을 확인 할 수 있었다.


분명히 ManagementObjectSearcher는 Using System.Management에 포함되어있는 기능인데 막상 
Using System.Management에서 오류를 뜨는 것을 확인해보면  'Using 지시문은 필요하지 않습니다.'이 뜨는 것을 알 수 있다.
분명 문서상으로는 Using System.management에서 가져오는 것이 맞는데
뭘 어떻게 해도 저
망할 빨간 줄이 없어지지 않는다.
하루종일 해결 못해서 진행을 못하다 능력 좋으신 분이 해결 방법을 찾아 주었다.아주 간단했다...;;
해결 방법은 다음과 같다.



솔루션에서 우클릭 -> 추가 -> 참조로 들어간다.




그럼 왼쪽에 어셈블리 -> framework가 있는데 여기서 해당되는 Using을 찾아서 체크해주고 확인을 누르면 적용 할 수 있다.
현재 필자는 System.Management가 필요하므로 체크하면 정상적으로 빨간줄이 안생기고 인식되는 것을 확인 할 수 있다.




  1. 강진일 2018.01.16 16:46

    와우 감사합니다.
    덕분에 아주 쉽게 해결했습니다.

  2. Jay 2018.08.20 21:40

    감사합니다!!!! 덕분에 해결 했습니다.

+ Recent posts