본문 바로가기

.NET

Retrieve all computers on network Introduction 이번시간에는 "찌니남편"님께서 방명록을 통해 질문해주신 내용대로, 네트워크 상의 컴퓨터 목록을 가져오는 방법에 대해 소개합니다. 윈도우를 제어하는 작업이다보니 이를 구현하는 방법은 다양하지만 이번시간에는 간단히 .Net Framework상에서 제공하는 기능들을 이용해 네트워크 상에 존재하는 컴퓨터이름, 아이피주소, 연결상태등을 확인하는 방법에 대해 설명드리겠습니다. 아래는 이번시간에 구현할 내용의 결과물 이미지 입니다. Using Active Directory Services Interfaces Active Directory Service Interfaces(ADSI)는 여러 네트워크 공급업체들이 제공하는 다양한 디렉터리 서비스의 기능을 이용해 네트워크 자원을 관리하는 디렉터리 서.. 더보기
Get Type From COM Object(System.__ComObject) Introduction .Net Framework를 이용해 COM객체를 사용하다보면, Object 형식으로 객체가 리턴되는 경우가 있는데 이 객체를 활용하기 위해서는 적절한 Type으로 캐스팅이 필요한 상황이 됩니다. 다행히 Object객체가 어떤 Type의 객체인지 알고 있는 상황이라면 간단하게 캐스팅문법을 이용해 캐스팅 해서 사용할 수 있지만, Type을 모르고 있다면 문제가 발생합니다. 일반적인 .Net Framework환경에서 였다면 간단히 GetType메서드를 통해 해당 객체의 Type을 확인 할 수 있지만, COM 객체의 경우 GetType메서드를 호출하게 되면 System.__ComObject 를 리턴하기 때문에 확인 할 수가 없습니다. Microsoft KB문서(http://support... 더보기
Global Hooking in .NET Introduction 이번 시간에는 전역 후킹(Global Hooking)에 대해서 알아보도록 하겠습니다. C/C++ 에서는 Win32 API를 이용하여 손쉽게 전역 후킹을 할 수 있습니다. 물론 .NET 에서도 Win32 API의 DLL 파일을 Import 하여 후킹이 가능합니다. 하지만 약간의 문제가 있습니다. 지역 후킹이 아닌 전역 후킹에서는 CallBack Procedure 를 DLL 파일로 만들어야 한다는 것이지요. 이런 이유로 .NET 에서는 전역 후킹이 안된다는 이야기가 많이 있습니다. 저 역시 초기에 이런 문제에 부딪혔습니다. Microsoft 에서 전역 후킹에 대해서 찾아보니 심지어 이런 내용이 있었습니다. (http://support.microsoft.com/kb/318804) 물론 .. 더보기
Compress and Decompress Data Using GZipStream Introduction 이번시간에는 .Net Framework에서 제공하는 GZipStream을 이용해 간단하게 데이터를 압축하고 압축을 푸는 동작에 대해 소개합니다. GZipStream은 파일을 손실 없이 압축하거나 압축을 풀기 위해 사용되는 gzip 데이터 형식을 사용합니다. gzip 형식에 대한 자세한 내용은 RFC 1952, "GZIP file format specification 4.3"에서 확인 하실 수 있습니다. 참고로 GZip에서는 4GB이상의 파일 압축을 지원하지 않습니다. Compress/Decompress Extension Method 아래 코드는 BaseStream에 저장된 내용을 압축하거나, 압축을 푼뒤 결과를 OutputStream에 저장하는 Extension Method입니다... 더보기
Load Assembly in Runtime using AppDomain Introduction Application을 개발할때 여러 프로젝트에서 동일한 기능을 공유하거나, 관리상의 목적으로 하여금 DLL 형태로 분리해 개발을 하는 경우가 있습니다. .Net으로 개발된 Application은 참조된 DLL(Assembly)을 로드할때 기본적으로 System32나, Application Root, GAC에 등록되어 있는 DLL을 검색하는데, 검색에 실패할경우 "FileNotFoundException"을 발생시킵니다. 만약, Application에서 참조하는 DLL(Assembly)의 경로가 위에서 언급한 위치와 다른 위치에 설치하고자 한다면 AppDomain을 이용해 런타임에 직접 Assembly를 Load하는 방식으로 해결 할 수 있습니다. What is AppDomain? .. 더보기