퇴근5분전


http://social.msdn.microsoft.com/forums/en-US/wpf/thread/a80296be-e810-449a-843e-bba4a31c1b0e/ 

KeyEventArgs enter = new KeyEventArgs( Keyboard.PrimaryDevice , Keyboard.PrimaryDevice.ActiveSource , 0, Key.Enter );
enter.RoutedEvent = Keyboard.KeyDownEvent;
enter.Source = 대상객체;
InputManager.Current.ProcessInput(enter);


 Grid 를 만들고 나서... 이거 저거 하다보니... 망했다.

그래서 이번 플젝은 그냥 예전 사용하던 툴을 꺼내 일부 필요한 부분만 추가해 넣은 후 사용하기로 함..

굿센용 4개의 레이어에 대한 컨트롤을 직접 만들고 이에 대한 반영을 하려고 했는데... 꼬였다...


아래 사진 둘은 그리드를 만든것임.
현재 WPF 의 레이아웃 컨트롤인 그리드의 모방하여 만든것임.

높이값이나 가로 값이 지정되지 않으면 자동으로 분할되도록 만들었으며

중간에 Row 0과 Row2는 값이 할당되어 있어 자동분할에서 제외되는 것을 아래 그림으로 보여준다.

이건 CodeGen을 만들때 이 레이아웃 컨트롤의 Cell에 따라 컨트롤들이 자리잡게 되며

각각 배치된 컨트롤엔 WPF 그리드 컨트롤처럼 하위 컨트롤은 Index, Span의 프로퍼티를 가지게 되어
자신의 위치값등을 조정할 수 있다.

 그리드를 만들때 Row와 Col과 그리고 Cell의 기술에 있다.

초기 만든 그리드는 구조를 잘못잡아서 컨트롤과의 상호작용을 표현하기 어려웠는데 ... 바로 잡았다.


 


WPF용으로 만들고 있는 코드제너레이터의 디자이너 UI임. 역시나 UI그리는 내 솜씨(?)는 ... 

 
도구상자, 속성창은 디자이너에 도킹 설정/해제가 가능하고
아래는 WPF 레이아웃 컨트롤 GRID를 내 입맛대로 그려둔 것 임.
 
 컨텐츠를 보강하고 프로젝트에 맞도록 컨트롤을 도구상자에 등록하며

이후 디자인이 완료되면 Xaml로 즉시 뽑고, 또 개발 프레임웍에 맞춘 코드컨버터를 이용하게되면

현업 프로젝트를 수행시 코드 노가다를 안해도 된다.

물론 CnP( Copy & Paste )라는 막강 기술이 있지만... 역시나 손이 많이 가는 작업이다..

설게 구상대로 라면 SP 작업이 완료되면 바로 프로젝트를 찍어낼 수 있게 되며, 최소한의 수작업!만 있게 된다.

고로... 업무구현에 좀더 열을 올릴수 있게되며,

새 프로젝트 현장에 가서도 해당 개발 프레임웍 구성을 분석 후 필요한 컨텐츠 보강후 바로 사용가능할 듯 하다.

프로젝트 기간에 10% 정도만 분석에 사용하여도 나머지 90%를 거저 먹는 꼴이 될...

오늘도 자뻑!!!




새 프로젝트로 생성 시
 작업효율을 높이려면 코드스나이프를 이용해 반복작업을 줄여야 하고...
 sp별로 파라미터 생성을 도구없이 한다면... 순수 타이핑 또는 카피하여 수정 ... 
 : 매 프로젝트마다 새로 만들면 CnP가 ... 반복적이어야 함. 

템플릿으로 생성 시
 기존 새프로젝트를 생성 후 템플릿 형태로 모두 구현하여 테스트 한 이후 템플릿으로 내보내고나면
 새프로젝트 생성시 프로젝트 언어 선택시 VisualStudio 를 선택하면 등록된 템플릿이 나타남.
 이걸 추가한 후에도 참조링크를 별도로 설정하고 컨트롤명을 바꾸고, SP등은 동일한 방법을 이용해야 함.
 : 초기작업( 새프로젝트를 만들어서 원하는 템플릿 형태로 소스를 수정) 이후 sp고치는 작업등... 은 수동...

코드젠으로 생성하면... 
 프로젝트에 사용되는 컨트롤들을 모두 코딩해서 변환하고, 
 원하는 모양으로 우선 디자인 하고, 이것을 cs단에서 핸들링 할 소스에 대한 
 코드변환기를 직접 만들어 코드젠에 적
템플릿화 하고.. 이를 이용해서 소스변환을 시도할 수 있음.
 : 초기 준비작업( 컨트롤 만들고, 변환기 만들고 ... )이 후 작업은 일사천리...


카운터의 카테고리를 가져온것임.
이를 이용해 값을 쉽게 가져올 수 있음.


 <<프로그램으로 카테고리의 카운터값, 인스턴스값을 추출해서 보여주는 프로그램>>



성능카운터를 이용해서 카테고리를 가져온 결과...

CategoryName="Telephony"
CategoryName="Terminal Services"
CategoryName="LogicalDisk"
CategoryName="Thread"
CategoryName="SMSvcHost 4.0.0.0"
CategoryName="SQLServer:Resource Pool Stats"
CategoryName="Job Object"
CategoryName="UDPv4"
CategoryName="UDPv6"
CategoryName="Browser"
CategoryName="SQLAgent:Jobs"
CategoryName="System"
CategoryName="Teredo Client"
CategoryName="RAS Port"
CategoryName="SQLServer:Replication Dist."
CategoryName="SQLAgent:Statistics"
CategoryName="MSDTC Bridge 3.0.0.0"
CategoryName="SQLServer:Catalog Metadata"
CategoryName="SQLServer:Buffer Partition"
CategoryName="Synchronization"
CategoryName="ICMPv6"
CategoryName="SQLServer:Backup Device"
CategoryName="Search Indexer"
CategoryName="SQLServer:Replication Agents"
CategoryName="Memory"
CategoryName=".NET CLR Networking 4.0.0.0"
CategoryName="Processor"
CategoryName="SQLServer:Replication Snapshot"
CategoryName="SQLServer:Replication Logreader"
CategoryName="SQLServer:Broker TO Statistics"
CategoryName="SQLServer:Cursor Manager by Type"
CategoryName="SQLAgent:JobSteps"
CategoryName="IPv4"
CategoryName="SQLServer:Broker Statistics"
CategoryName="Process"
CategoryName="ServiceModelEndpoint 3.0.0.0"
CategoryName="Print Queue"
CategoryName="ICMP"
CategoryName="Generic IKEv1, AuthIP, and IKEv2"
CategoryName="ReadyBoost Cache"
CategoryName="Per Processor Network Interface Card Activity"
CategoryName="USB"
CategoryName="NBT Connection"
CategoryName="SQLServer:Broker/DBM Transport"
CategoryName="IPsec IKEv2 IPv6"
CategoryName="SQLServer:Workload Group Stats"
CategoryName="IPsec IKEv2 IPv4"
CategoryName="Job Object Details"
CategoryName="SQLServer:Buffer Manager"
CategoryName="ServiceModelService 3.0.0.0"
CategoryName="SQLAgent:Alerts"
CategoryName="SQLServer:Broker Activation"
CategoryName="WFP"
CategoryName="SQLServer:Plan Cache"
CategoryName="Pacer Pipe"
CategoryName="Processor Information"
CategoryName="Paging File"
CategoryName="Power Meter"
CategoryName="Redirector"
CategoryName="SQLServer:Cursor Manager Total"
CategoryName="SQLServer:Wait Statistics"
CategoryName="IPsec AuthIP IPv4"
CategoryName="IPsec AuthIP IPv6"
CategoryName="SQLServer:Transactions"
CategoryName="PhysicalDisk"
CategoryName="TCPv6"
CategoryName="WFPv4"
CategoryName="WFPv6"
CategoryName="SQLServer:Databases"
CategoryName="SQLServer:SQL Errors"
CategoryName="Server Work Queues"
CategoryName="MSDTC Bridge 4.0.0.0"
CategoryName="Server"
CategoryName="IPsec IKEv1 IPv4"
CategoryName="Terminal Services Session"
CategoryName="IPsec IKEv1 IPv6"
CategoryName="Per Processor Network Activity Cycles"
CategoryName="Teredo Server"
CategoryName="SQLServer:Exec Statistics"
CategoryName="SQLServer:Memory Manager"
CategoryName="SQLServer:Replication Merge"
CategoryName="Windows Workflow Foundation"
CategoryName="Teredo Relay"
CategoryName="SQLServer:User Settable"
CategoryName="DTC(Distributed Transaction Coordinator)"
CategoryName=".NET Data Provider for Oracle"
CategoryName="Event Tracing for Windows"
CategoryName="RAS Total"
CategoryName="Cache"
CategoryName="Objects"
CategoryName="SQLServer:Database Mirroring"
CategoryName="SQLServer:Access Methods"
CategoryName="SMSvcHost 3.0.0.0"
CategoryName="TCPv4"
CategoryName="SQLServer:Buffer Node"
CategoryName="SQLServer:General Statistics"
CategoryName="IPv6"
CategoryName="Network Interface"
CategoryName="SQLServer:SQL Statistics"
CategoryName=".NET CLR Data"
CategoryName="SQLServer:Latches"
CategoryName="SQLServer:Deprecated Features"
CategoryName="SQLServer:CLR"
CategoryName="ServiceModelOperation 3.0.0.0"
CategoryName="SQLServer:Locks"
CategoryName=".NET CLR Networking"
CategoryName=".NET Data Provider for SqlServer"
CategoryName="IPsec Driver"
CategoryName="Event Tracing for Windows Session"
CategoryName="IPHTTPS Global"



'# 3) .Net ( Vs 2008 ) > C#' 카테고리의 다른 글

LINQ] GroupBy  (0) 2011.10.12
컨텐츠 판넬 이전/ 다음 구현..  (0) 2011.09.14
vs2008] WMI 관련..  (0) 2011.08.16
노트북 셋팅..  (0) 2011.08.02
[LINQ] group by 여러조건 넣기.  (0) 2010.11.08



WMI 로 쿼리 할수 있는 객체 정보를 볼수 있는 쿼리는 다음과 같음.

 //WMI ~~
            using (System.Management.ManagementObjectSearcher s = new System.Management.ManagementObjectSearcher())
            {
                s.Query = new System.Management.ObjectQuery(
@"SELECT * FROM Meta_Class WHERE __Class LIKE ""%Win32%"" ");

                //s.Query = new System.Management.ObjectQuery(@"SELECT * FROM Win32_Process WHERE NAME = ""NateOnMain.exe"" ");
                //s.Query = new System.Management.ObjectQuery("Select * from Win32_Processor");
                //Win32_Processor
                var k = s.Get();
                foreach (var M in k)
                {
                    foreach (var Q in M.Qualifiers)
                    {
                        string text = string.Format(
                              "Q}} Name:{0}, Value:{1}",
                              Q.Name,
                              Q.Value
                          );
                        this.textBox1.AppendText(text + Environment.NewLine);
                    }

                    foreach (var P in M.Properties)
                    {
                        string text = string.Format(
                            "P}} Name:{0}, Value:{1}",
                            P.Name,
                            P.Value
                        );

                        this.textBox1.AppendText(text + Environment.NewLine);
                    }

                    this.textBox1.AppendText(
                        Environment.NewLine
                        );
                }
            }


위처럼 하면 쿼리 할수 있는 객체들로 나타나고.. 이를 바탕으로 정보를 쿼리 할 수 있음.

여기서 
 디스크 정보를 알고 싶을때 : Win32_LogicalDisk  관련 객체를 위 쿼리결과에서 찾아보고

파라미터명으로 GetPropertyValue를 통해서 값을 취할수 있다. 

  s.Query = new System.Management.ObjectQuery("Select * from Win32_LogicalDisk");
                var k = s.Get();
                foreach (var M in k)
                {
                    this.textBox1.AppendText("> " + M.GetPropertyValue("Caption") + Environment.NewLine);
                    this.textBox1.AppendText(
                        Environment.NewLine
                        );
                }

> \\DOKEBI-PC\ROOT\cimv2:Win32_LogicalDisk
Q} Name:dynamic, Value:True
Q} Name:Locale, Value:1033
Q} Name:provider, Value:CIMWin32
Q} Name:SupportsUpdate, Value:True
Q} Name:UUID, Value:{8502C4B7-5FBB-11D2-AAC1-006008C78BC7}
P} Name:Access, Value:
P} Name:Availability, Value:
P} Name:BlockSize, Value:
P} Name:Caption, Value:
P} Name:Compressed, Value:
P} Name:ConfigManagerErrorCode, Value:
P} Name:ConfigManagerUserConfig, Value:
P} Name:CreationClassName, Value:
P} Name:Description, Value:
P} Name:DeviceID, Value:
P} Name:DriveType, Value:
P} Name:ErrorCleared, Value:
P} Name:ErrorDescription, Value:
P} Name:ErrorMethodology, Value:
P} Name:FileSystem, Value:
P} Name:FreeSpace, Value:
P} Name:InstallDate, Value:
P} Name:LastErrorCode, Value:
P} Name:MaximumComponentLength, Value:
P} Name:MediaType, Value:
P} Name:Name, Value:
P} Name:NumberOfBlocks, Value:
P} Name:PNPDeviceID, Value:
P} Name:PowerManagementCapabilities, Value:
P} Name:PowerManagementSupported, Value:
P} Name:ProviderName, Value:
P} Name:Purpose, Value:
P} Name:QuotasDisabled, Value:
P} Name:QuotasIncomplete, Value:
P} Name:QuotasRebuilding, Value:
P} Name:Size, Value:
P} Name:Status, Value:
P} Name:StatusInfo, Value:
P} Name:SupportsDiskQuotas, Value:
P} Name:SupportsFileBasedCompression, Value:
P} Name:SystemCreationClassName, Value:
P} Name:SystemName, Value:
P} Name:VolumeDirty, Value:
P} Name:VolumeName, Value:
P} Name:VolumeSerialNumber, Value:


'# 3) .Net ( Vs 2008 ) > C#' 카테고리의 다른 글

컨텐츠 판넬 이전/ 다음 구현..  (0) 2011.09.14
Vs2008] 성능 카운터  (0) 2011.08.16
노트북 셋팅..  (0) 2011.08.02
[LINQ] group by 여러조건 넣기.  (0) 2010.11.08
MS-Chart Demo  (0) 2010.11.05


음..

... 하긴 해야 되는데... 짐쌀까? ...

왠지모르게 성우랑 굿센이랑 나랑 꼬인것 같은 기분이 드네..

집앞 플젝으로 옮겨볼까나..?

후 ~

'--- 취미 > 생각하기' 카테고리의 다른 글

흠.. 덥다...  (0) 2012.07.29
ERP 개발이 드디어 2월 29일 종료되었다.  (0) 2012.03.02
7월 28일 목포의 하늘  (0) 2011.07.29
책 4권 구입...  (0) 2011.07.22
불치병 _ 사마천  (0) 2011.06.15


Win7 으로 복구시스템을 돌려 초기상태로 복구.

VS 2008 설치
MSSQL 2008을 설치... 중 에러!!

...

설치하다보니 VS2008 SP1을 설치하라고 해서 받아서 설치...   중 에러!!
( 무한..?루프 또는 생각보다 설치시간이오래 걸려서 ... 노트북 전원 off시간은 2시간 제한 되있음 )

찾아보니...    SP1을 설치할때 무한 도는 것처럼 되는것은 이전에 깔린 HotFix 문제로 이를 패치하여 제거하는 패치가 따로 있었고 이를 설치 하여 해결함.


모두 설치 완료...

'# 3) .Net ( Vs 2008 ) > C#' 카테고리의 다른 글

Vs2008] 성능 카운터  (0) 2011.08.16
vs2008] WMI 관련..  (0) 2011.08.16
[LINQ] group by 여러조건 넣기.  (0) 2010.11.08
MS-Chart Demo  (0) 2010.11.05
포스트 잇 처럼 메모하는 레이아웃!!  (0) 2010.09.30


ArrayList 에 담아 있는 데이타를 순서에 맞춰 정렬하는 부분에 대해 구현한 것임.

간단하다... 아래처럼 하면

 간단히 담는놈(ArrayList)에 담겨질놈(SortunitClass)을 담아서,
정렬할 방법을 가지고 있는 놈( SortunitClassCompare )에게 넘겨준다.



// 훈스에 올라온 질문글에 대한 답글로 단 소스임.
  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            ArrayList ar = new ArrayList();

            ar.Add(new SortunitClass() { Index = 9, Data = "아홉" });
            ar.Add(new SortunitClass() { Index = 3, Data = "셋" });
            ar.Add(new SortunitClass() { Index = 5, Data = "다섯" });
            ar.Add(new SortunitClass() { Index = 11, Data = "열하나" });
            ar.Add(new SortunitClass() { Index = 1, Data = "하나" });

            ar.Sort(new SortunitClassCompare());
        }
    }

    public class SortunitClassCompare : IComparer, IComparer<SortunitClass>
    {
        public int Compare(SortunitClass x, SortunitClass y)
        {
            return x.Index.CompareTo(y.Index);
        }

        public int Compare(object x, object y)
        {
            return Compare((SortunitClass)x, (SortunitClass)y);
        }
    }


    public struct SortunitClass 
    {
        public int Index { get; set; }
        public string Data { get; set; }
    }

'# 4) .Net ( Vs 2010 ) > C#' 카테고리의 다른 글

.Net] 버튼 Pressed Event!!  (0) 2012.05.09
.NET ] 멀티 랭귀지 지원 ...  (0) 2012.03.06
[IPC] Event 추가 ~~  (0) 2011.05.14
LINQ] 로또 구하기?  (1) 2011.04.25
[C#]Box 그리기...  (0) 2010.11.29