─━ IT ━─

인터넷(NET)으로 랜 전송 속도를 측정하는 IE 툴바를 만들다

DKel 2021. 8. 16. 00:59
반응형
처음에 지금까지는 IE툴바를 작성하기 위해서는 C++, ATL과 같은 지식이 필요했습니다.NET에서는 그러한 지식은 필요 없고 Pavel Zolnikov씨가 작성한 BandObjects라고 하는 프리 클래스 라이브러리를 이용하는 것으로 간단하게 툴바를 작성할 수 있습니다.여기에서는 샘플로 C#에서 Performance Counter를 사용한 LAN의 전송속도미터를 생성을 합니다.필요한 환경 Visual C# 2003(Visual Studio.NET 2003) 이후
Band Objects Band Objects 입수 빌드 Code Project 기사 ′Extending Explorer with Band Objects using .NET and Windows Forms′에서 Band Objects를 입수합니다.소스 코드로 배포되고 있으므로 먼저 Band Objects를 빌드합니다.<해동된 폴더> Band Objects Lib′안에 소스가 있으므로 솔루션을 열고 빌드를 합니다.′Band Object Lib.dll′과 ′Interop.SH Doc Vw.dll′이 만들어질 겁니다.프로젝트 생성 VS.NET(C#.NET)에서 신규 프로젝트를 생성합니다.[파일]→[신규 작성]→[프로젝트...]를 선택해,[프로젝트의 종류]로부터[Visual C # 프로젝트],[템플릿]으로부터[Windows 컨트롤 라이브러리]를 선택합니다.여기서는 예를 들어서 czPerformBar라고 하는 이름의 프로젝트를 생성을 하겠습니다.생성된 프로젝트의 디렉토리에 방금 빌드한 2개 파일과 ′<해동한 폴더>′에 있는 ′Band Objects.snk′ 파일을 복사를 합니다.복사 후 Band Object Lib을 참조 설정에 추가합니다.솔루션 탐색기의 [참조설정]을 우클릭하고 [참조추가]를 선택합니다.[참조]버튼을 누르고, 프로젝트안에 있는 「Band ObjectsLib.dll」를 선택하고, 추가합니다.컨트롤의 배치 다음은 컨트롤을 배치합니다.예로서 다음과 같이 배치해 보았습니다(색상은 자유로 좋습니다).코드 기술 이하의 using 문을 추가합니다.using Band Object Lib;
using System . Diagnostics ;
using System . Threading ;
using System.Runtime.Interop Services; 그런 다음 GUID를 만듭니다.[툴]→[GUID 의 작성]으로 작성할 수 있습니다.기술위치는 namespace cz PerformBar 뒤에 추가합니다.기술예
[Guid(′4BED 4CF4-038B-497b-AF65-D3F79E9056D9′)] GUID를 기술한 아래에, Band Objects의 동작을 정의합니다.기술예
[ BandObject ( ′ czPerformBar ′ , BandObjectStyle . Horizontal |
Band Object Style.Explorer Toolbar)] Band Objects 동작을 정의하는, Band Objects Style에는 다음과 같은 정수가 포함되어 있습니다.그 다음에, 클래스명등을 고쳐 씁니다.これ を 、 public class UserControl 1 : System . Windows . Forms . UserControl
{
(생략)
} 다음과 같이 변경합니다.클래스의 이름은 아무거나 상관없지만 Band Object를 상속받도록 하세요.기술예
public class czperformbar : BandObject
{
(생략)
함수도 다시 씁니다.이거를 public User Control 1()
{
(생략)
} 다음과 같이 변경합니다.기술예
public czperformbar ( )
{
(생략)
}}드디어, 코드를 기술해 나갑니다.일단 반 부분부터.public class czperformbar : BandObject
{

// 스레드 대기시간 (ms)
int intInterval = 500 ;

// 사용하는 네트워크 카드의 이름
string NICName = ′ Laneed LD - 10 _ 100AL PCI Fast Ethernet Adapter ′ ;

// 상행통신속도
PerformanceCounter TransUP =
new PerformanceCounter ( ′ Network Interface ′ ,
′ Bytes Sent / sec ′ , ′′ , ′ . ′ ) ;

// 하행통신속도
PerformanceCounter TransDOWN =
new PerformanceCounter ( ′ Network Interface ′ ,
′ Bytes Received / sec ′ , ′′ , ′ . ′ ) ;

(이하 생략) NICName 의 값에는, 사용하는 네트워크 카드의 이름을 넣어 주세요.퍼포먼스 카운터 목록에 들어있는 이름입니다.일반적으로는 디바이스 매니저에 표시되어 있는 카드명(어댑터명)이면 좋을 것으로 생각합니다.다음은 Performance Counter 입니다.Performance Counter는 지정된 퍼포먼스 카운터 값을 가져옵니다.위의 예에서 ′Network Interface′ 는 카테고리명입니다.취득하는 퍼포먼스 카운터의 카테고리를 지정합니다.카테고리명에는 그 밖에도 이하와 같은 것이 있습니다.Processer
TCP
Cache
ASP.NET ′Bytes Send/sec′은 카운터 이름입니다.위의 카테고리에 포함되는 오브젝트 이름입니다.예를 들어, 「Network Interface」카테고리의 경우, 이하와 같은 것이 있습니다.Bytes Received / sec
Bytes Send / sec
Bytes Total / sec
Packets Received / sec
Packets Send / sec
Packets Total/sec 세 번째 인수 빈 문자 ′ ′ ′ 인스턴스 이름입니다.여기에서는, 취득할 인스턴스를 설정합니다.여기서 NICName변수를 직접 지정하셔도 됩니다만, 여기는 굳이 다른 곳으로 지정합니다. ′. ′는 컴퓨터 이름입니다.취득하는 컴퓨터의 이름을 지정합니다. 「.′」이면, 자신의 PC의 퍼포먼스 카운터를 취득하게 됩니다.그러면, 메인 코드를 기술해 가겠습니다.czperformbar 클래스의 컨스트럭터의 Initialize Component() 뒤쪽에 아래와 같이 기술해 주세요.//각 퍼포먼스 카운터의 오브젝트에
// 인스턴스 이름으로 네트워크 카드의 이름을 연결합니다.
TransUP . InstanceName = NICName ;
TransDOWN.InstanceName = NICName; 또한 데이터를 실시간으로 수집하기 위해 쓰레드를 작성합니다.쓰레드의 본체 함수부터 만들어 갑시다.클래스 내에 새로운 함수를 만듭니다.′up-stream′의 취득 함수부터.private void trdgetNETSentBytePerSec ( )
{
float TransUPVal ;
while ( true )
{
// Get Transfer ( UP )
//퍼포먼스 카운터 값 가져오기
TransUPVal = TransUP . NextValue ( ) ;
// KByte로 바꾸기 위해 1024로 나누기
TransUPVal = TransUPVal / 1024 ;

// 라벨에표시
lblTransUP . Text =
TransUPVal . ToString ( ′ ### 0 . 00 ′ ) + ′ KByte / sec ′ ;
this . Refresh ( ) ;
System . Windows . Forms . Application . DoEvents ( ) ;
Thread.Sleep(intInterval); // 시간 대기
}
}다음은 ′내려오기′ 입니다.private void trdgetNETReceivedBytePerSec ( )
{
float TransDOWNVal ;
while ( true )
{
// Get Transfer ( DOWN )
//퍼포먼스 카운터 값 가져오기
TransDOWNVal = TransDOWN . NextValue ( ) ;
// KByte로 바꾸기 위해 1024로 나누기
TransDOWNVal = TransDOWNVal / 1024 ;
// 라벨에표시
lblTransDOWN . Text =
TransDOWNVal . ToString ( ′ ### 0 . 00 ′ ) + ′ KByte / sec ′ ;
this . Refresh ( ) ;
System . Windows . Forms . Application . DoEvents ( ) ;
Thread.Sleep(intInterval); // 시간 대기
}

} 코드적으로는 거의 동일합니다.뭔가 while (true) 이렇게 해서 무서운데.다음은 스레드를 움직이기 위한 기술입니다.先ほど の 、 TransUP . InstanceName = NICName ;
TransDOWN.InstanceName = NICName; 아래에 다음과 같이 기술합니다.// 上り通信速度取得スレッド
스레드 트랜UP 나사산 =
새 스레드(새 스레드 시작(this.trdget)NETSentBytePerSec));
TranUP 나사산.IsBackground=true;
TranUP 나사산.시작();

// 下り通信速度取得スレッド
스레드 트랜스DOWN 나사산 =
새 스레드(새 스레드 시작(this.trdget)NETReceivedBytePerSec));
transDOWN 나사산.IsBackground=true;
transDOWN 나사산.start();これでコードのほとんどはできました。次は、「Assembly.cs」の編集です。まず、アセンブリの署名をします。[assembly: AssemblyKeyFile(@′....BandObjects.snk′)는 BandObjects입니다.snk」を使用して厳密名(strong key)で署名します。ファイルのパスは、環境に応じて変更してください。アセンブリのバージョンも、明確に決めます。[assembly: 어셈블리 버전(′1.0.0.0′)作成したツールバーをビルドする前に、先にbandobjectlibを「regasm」と「gacutil」で登録する必要があります。そうでないと動きません(先にbandobjectlibをソリューションごとビルドすれば自動的に登録されるはずで]を選択し、ダイアログで、[プロジェクトの種類]から[visual c++ プロジェクト]、[テンプレート]から[空のプロジェクト (.net)]を選択します。追加したプロジェクトの構成プロパティの[全般]にある[構成の種類]を[ユーティリティ]にします。次に、今追加した「register」プロジェクトのプロパティを開き、構成プロパティから、[ビル]をクリックし、表示された入力欄に以下のように入力します。cd $(projectdir)....incomples
gacutil /if czPerformBar.dll
regasm czPerformBar.dllDLL은 cd $(ProjectDir)에 있습니다...indebug」の所は、各自、環境に応じてパスを変更してください。ビルド順序を、「czperformbar」が先、「register」が後になるように変更してください。これで、すべてビルド(ソリューションのビルド)して、ieをすべて閉じてieを再起動。ツールバーの右クリックメニューに作成したツールバーが表示されていれば、完了です。動作としては、こんな感じになります。まとめbandobjectsを使うと、.netで簡単にツールバーを作成することができました。この記事を参考にして、オリジナルのツールバーを作ってみてはいかがでしょうか。参考 資料 The Code Project 「 Extending Explorer with Band Objects using . NET and Windows Forms 」
IE Toolbar를 C#로 만드는
DOBON.NET 퍼포먼스 카운터에서 값을 취득하다
MSKB : 248993 [PRB] 퍼포먼스 모니터에 퍼포먼스 오브젝트가 표시되지 않음
반응형