using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SpeechLib;
using System.Windows.Forms;

namespace VoiceRecognize
{  
    class MyVoiceRecognize
    {
        public delegate void _GetRecognize(string Recognize);
        public event _GetRecognize GetRecognize;
       
        private SpeechLib.SpSharedRecoContext objRecoContext;
        private SpeechLib.ISpeechRecoGrammar grammar;
        private SpeechLib.ISpeechGrammarRule menuRule;
        object PropValue;       
        int count;
        string Recognize;

        public MyVoiceRecognize()
        {
            objRecoContext = null;
            grammar = null;
            menuRule = null;
            PropValue = "";
            count = 0;
            Recognize = string.Empty;
        }

        public void ListenStart()
        {                  
            objRecoContext = new SpeechLib.SpSharedRecoContext();           
            objRecoContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(Reco_Event);

            grammar = objRecoContext.CreateGrammar(0);
            menuRule = grammar.Rules.Add("MenuCommands", SpeechRuleAttributes.SRATopLevel | SpeechRuleAttributes.SRADynamic, 1);
           
            menuRule.InitialState.AddWordTransition(null, "Exit", " ", SpeechGrammarWordType.SGLexical, "Exit", ++count, ref PropValue, 1.0F);           
            grammar.Rules.Commit();
            grammar.CmdSetRuleState("MenuCommands", SpeechRuleState.SGDSActive);
        }

        public void ListenStop()
        {
            objRecoContext.Recognition -= Reco_Event;
            objRecoContext = null;
        }


        public void AddWord(string addword)
        {           
            menuRule.InitialState.AddWordTransition(null, addword, " ", SpeechGrammarWordType.SGLexical, addword, ++count, ref PropValue, 1.0F);
            grammar.Rules.Commit();
            grammar.CmdSetRuleState("MenuCommands", SpeechRuleState.SGDSActive);
        }

        private void Reco_Event(int StreamNumber, object StreamPosition, SpeechRecognitionType RecognitionType, ISpeechRecoResult Result)
        {           
            Recognize = Result.PhraseInfo.GetText(0, -1, true);
            GetRecognize(Recognize);           
        }
    }
}

Posted by ... XJAPAN

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace NativeMethods
{  
    class NativeMouseEvent
    {
        //Mouse Event
        public const int MOUSEEVENTF_MOVE = 0x0001; // Mouse Move
        public const int MOUSEEVENTF_LEFTDOWN = 0x0002; // Mouse Left Down
        public const int MOUSEEVENTF_LEFTUP = 0x0004; // Mouse Left Up
        public const int MOUSEEVENTF_RIGHTDOWN = 0x0008; // Mouse Right Down
        public const int MOUSEEVENTF_RIGHTUP = 0x0010; // Mouse Right Up
        public const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; // Mouse Middle Down
        public const int MOUSEEVENTF_MIDDLEUP = 0x0040; // Mouse Middle Up
        public const int MOUSEEVENTF_WHEEL = 0x0800; // Mouse Wheel
        public const int MOUSEEVENTF_ABSOLUTE = 0x8000; // Mouse Absolute

        [DllImport("User32")]
        public static extern void mouse_event(int dwFlags,int dx,int dy,int dwData,int dwExtraInfo);
    }
}

Posted by ... XJAPAN

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace NativeMethods
{
    class NativeKeyboardEvent
    {
        //dwFlags
        public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //
        public const int KEYEVENTF_KEYUP = 0x0002; // Key Up
       
        //bVK
        public const int VK_LEFT = 0x25; // Left Key
        public const int VK_UP = 0x26; // Up Key
        public const int VK_RIGHT = 0x27; // RIght Key
        public const int VK_DOWN = 0x28; // Down Key

        public const int VK_TAB = 0x09; // Tab Key
        public const int VK_RETURN = 0x0D; // Enter Key
        public const int VK_SPACE = 0x20; // Space Key

        [DllImport("User32")]
        public static extern void keybd_event(int bVk, int bScan, int dwFlags, int dwExtraInfo);
        //public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
    }
}

Posted by ... XJAPAN

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace NativeMethods
{
    class NativeCursorEvent
    {
        [DllImport("User32")]
        public static extern void SetCursorPos(MyPoint pt);

        [DllImport("User32")]
        public static extern int GetCursorPos(out MyPoint pt);
    }
}

Posted by ... XJAPAN

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Synthesis;

namespace MyVoice
{
    public partial class MyVoice : UserControl
    {
        //Attribute
        SpeechSynthesizer voice;               
       
        public MyVoice()
        {
            InitializeComponent();
            this.Visible = false;
            voice = new SpeechSynthesizer();
        }

        public void ReadString(string s)
        {           
            voice.Speak(s); // 인자로 넘어온 S 를 읽어준다.
        }
    }
}

Posted by ... XJAPAN

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MyTranslator
{
    public partial class Form1 : Form
    {      
        bool first;
        HtmlElement element = null;
        string originalurl = "http://translate.google.co.kr/#auto|en|";
        MyVoice.MyVoice voice;

        public Form1()
        {
            InitializeComponent();
            Load += new EventHandler(Form1_Load);
        }

        void Form1_Load(object sender, EventArgs e)
        {
            first = false;
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
            voice = new MyVoice.MyVoice();
        }

        void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (!first)
            {
                Updated();
                first = true;
            }
        }

        private void GetText()
        {
            textBox2.Text = element.InnerHtml;
            voice.ReadString(textBox2.Text);
        }

        private void Updated()
        {
            HtmlElementCollection htmlElementRoot;
            HtmlDocument hd = webBrowser1.Document;
            htmlElementRoot = hd.GetElementsByTagName("HTML");
            HtmlElement root = htmlElementRoot[0];

            SearchTextArea(root);
        }

        private void SearchTextArea(HtmlElement root)
        {
            foreach (HtmlElement x in root.Children)
            {
                if (x.TagName == "TEXTAREA")
                {
                    if (x.GetAttribute("Id") == "suggestion")
                    {
                        element = x;
                    }
                }
                SearchTextArea(x);
            }
        }
      
        private void button1_Click_1(object sender, EventArgs e)
        {
            string now = originalurl + textBox1.Text;
                        webBrowser1.Navigate(now);
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            GetText();
        }
    }
}

Posted by ... XJAPAN

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using IWshRuntimeLibrary;
using System.Windows.Forms;
using System.Diagnostics;

namespace MyLink
{
    public class MyLinker
    {
        ToolStripMenuItem TopMenu, SubMenu;
        string LinkPath;
        WshShellClass WshShell;
       
        public MyLinker(ref MenuStrip menuStrip1)
        {           
            LinkPath = string.Empty;
            WshShell = new WshShellClass();

            //최상위 메뉴 추가
            TopMenu = new ToolStripMenuItem("프로그램 바로가기");
            menuStrip1.Items.AddRange(new ToolStripItem[] { TopMenu });
            LoadLink();
        }

        public void LoadLink()
        {                       
            //디렉토리가 없다면 만들어주자
            if (!Directory.Exists(Application.StartupPath + "\\Link\\"))
            {
                Directory.CreateDirectory(Application.StartupPath + "\\Link\\");
            }
            else // 있으면 탐색시작
            {
                string[] dirs = Directory.GetFiles(Application.StartupPath + "\\Link\\");

                foreach (string dir in dirs)
                {
                    string filename = Path.GetFileNameWithoutExtension(dir); //  경로문자열에서 확장명부분을 제외한 파일이름을 반환합니다.

                    //하위메뉴 추가.
                    SubMenu = new ToolStripMenuItem(filename);
                    SubMenu.Click += new EventHandler(temp2_Click);
                    TopMenu.DropDownItems.AddRange(new ToolStripItem[] { SubMenu });
                }
            }
        }

        void temp2_Click(object sender, EventArgs e)
        {
            ToolStripItem item = sender as ToolStripItem;
            Process.Start(Application.StartupPath + "\\Link\\" + item.Text + ".lnk");
        }

        public void MakeLink(OpenFileDialog openFileDialog1)
        {
            openFileDialog1.Filter = "All Files(*.*)|*.*";
            openFileDialog1.Title = "Select Files...";
            openFileDialog1.FileName = String.Empty;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                LinkPath = openFileDialog1.FileName; // 전체 경로 (파일명 포함)
                string filename = openFileDialog1.SafeFileName.Substring(0, openFileDialog1.SafeFileName.LastIndexOf("."));

                MakeShortcut(filename);
            }
        }

        private void MakeShortcut(string filename)
        {
            IWshRuntimeLibrary.IWshShortcut MyShortcut;
            MyShortcut = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateShortcut(Application.StartupPath + "\\Link\\" + filename + ".lnk");
            MyShortcut.TargetPath = LinkPath;
            MyShortcut.Description = filename;
            MyShortcut.Save();

            //하위메뉴 추가.
            SubMenu = new ToolStripMenuItem(filename);
            SubMenu.Click += new EventHandler(temp2_Click);
            TopMenu.DropDownItems.AddRange(new ToolStripItem[] { SubMenu });
        }
   
    }
}

Posted by ... XJAPAN

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace TestEvent
{
    class HotKey
    {
        public static int WM_HOTKEY = 0x312; // HotKey 가 눌렸을 경우.
       
        //핫키 구분변수
        public static int Hotkey1 = 0x2000;
        public static int Hotkey2 = 0x3000;

        //조합가능 버튼
        public const int CRTL = 1;
        public const int ALT = 2;
        public const int SHIFT = 4;

        //내가 사용할 키보드
        public const int SPACE = 32;
        public const int X = 88;

        [DllImport("user32")]
        public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);

        [DllImport("user32")]
        public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
    }
}

Posted by ... XJAPAN

- Form

 

1. MDI 폼의 경우 자식 폼에 MDI 부모 품을 설정 하는 방법
//
자식 폼의 생성자에서 부모 폼의 인스턴스를 넘겨 주어 설정하도록 한다.

public ChildForm( MainForm frm )

{

        InitializeComponent();

 

        this.MdiParent = frm;

……….

}

 

2. 다이얼로그 폼 사용

LogInForm frm = new LogInForm();

frm.StartPosition = FormStartPosition.CenterScreen;  // 다이얼로그 폼을 중심으로 이동

frm.ShowDialog();

                    

if( DialogResult.OK == frm.DialogResult )

{

      ………………………………………

}

 

- 컨트롤

 

1. 리스트, 리스트뷰 컨트롤

 

- 컬럼 지정

: 리스트 및 리스트 컨트롤의 컬럼을 프로그래밍으로 지정 할 수 있지만 디자인 모드에서 더욱 쉽게

추가 할 수 있다. 예는 리스트 뷰로 하지만 리스트 컨트롤과 방법은 같다.

 

리스트 컨트롤을 지정한다.

 

속성 창에서 Colummns 속성을 클릭 한다.

 

 

ColumnHeader 컬렉션 편집기가 나타난다.

 

여기서 컬럼을 추가 하기 위해 추가버튼을 누르면 오른쪽에 속성을 주는 부분이 나온다. 컬럼명과 넓이 등을 지정하면 된다.

*
프로그래밍적 방법
 
ListView.Columns.Add( "이름", 40, HorizontalAlignment.Center );

 

 

- 데이터 모두 삭제
ListView.Items.Clear();

 

 

- 데이터 추가

ListViewItem lvi = new ListViewItem();

lvi.SubItems.Add( 최흥배 );

lvi.SubItems.Add( 프로그래머팀 );

lvi.SubItems.Add( 서버파트 );

ListView.Items.Add( lvi );

ListView.Refresh();

 

 

- 데이터 추가 2

: 위의 방식은 컬럼의 첫번째가 이미지 리스트인 경우는 좋지만 리스트 뷰의컬럼에 어떤 문자를

나타내고 싶은 경우는 되지 않는다. 이런 경우 ListVieeItem의 생성자의 인자에 첫 컬럼에 나타내고 싶은

문자를 지정해 줘야 한다.

ListViewItem lvi = new ListViewItem( iCount.ToString() );

lvi.SubItems.Add( 최흥배 );

lvi.SubItems.Add( 프로그래머팀 );

lvi.SubItems.Add( 서버파트 );

ListView.Items.Add( lvi );

ListView.Refresh();

 

 

- 삽입된 모든 데이터 순회
int iItemNum = ListView.Items.Count;

for( int i = 0; i < iItemNum; ++i )

{

        iYear = Convert.ToInt32(ListView.Items[i].SubItems[ 0 ].Text );

        ………..

|

 

 

- 기존 데이터 수정

……….

ListView.Items[i].SubItems[ 0 ].Text = iYear.ToString();

……..

 

 

- 특정 데이터 삭제 ( 순회 방법을 foreach를 사용함 )

………

foreach( ListViewItem lvi in ListView.Items )

{

        if( lvi.SubItems[ 0 ].Text == 2005 )

               ListView.Items.Remove( lvi );

}

…………

 

 

- 리스트 뷰의 특정 행을 선택한 경우 알고 싶을 때
ListView.SelectedListViewItemCollection  Items = ListView.SelectedItems;


// 리스트 뷰의 컨트롤 속성이 멀티 선택 가능 상태에서 복수 개 선택을 하였다면 선택된 것이 다 나온다.
foreach
( ListViewItem lvi in Items )

{

…….

}

 

2. 콤보 박스

 

- 콤보 박스의 데이터 모두 삭제

: combobox.Items.Clear();

 

 

- 데이터 추가

: combobox.Items.Add( LIFEOnline );

 

 

- 목록 중 지정된 데이터 목록을 찾아서 선택 되도록 하기

int index = combobox.Items.IndexOf(LIFEOnline );

if( index < 0 )

return;

 

combobox.SelectedIndex = index;

 

3. 그리드 컨트롤

 

- 그리드 컨트롤을 실행 시 데이터 추가

DataGrid grid = new DataGrid();

DataTable dt = new DataTable();

DataRow dr;

 

// 컬럼 헤드를 추가

dt.Columns.Add( new DataColumn("아이템", typeof(string)) );

dt.Columns.Add( new DataColumn("Code", typeof(Int32)) );

                               

// 레코드 추가                                

dr = dt.NewRow();

  

dr[ 0 ] = ;  // 아이템 컬럼에 아이템 이름 추가

dr[ 0 ] = 110;    // 코드 컬럼에 코드 번호 추가

                               

dt.Rows.Add(dr);  // 레코드를 추가 한다.

 

DataView dv = new DataView(dt); // 데이터 뷰를 만든다.

grid.DataSource= dv;               // 그리드 컨트롤에 추가

 

- 그리드 컨트롤의 컬럼 스타일 지정

그리드 컨트롤에 데이터를 넣르면 컬럼이 지멋대로 되는 경우가 있다.. 이럴 때 원하는 스타일로

컬럼을 지정하면 된다..다만 꼭 데이터를 다 넣은 후에 해야 된다. 그전에 하면 데이터를 넣으면서
원하지 않는 상태로 변경되어 버린다.

…………………………………………………………….

DataGridTableStyle gtStyle1 = new DataGridTableStyle(); 

 

gtStyle1.GridColumnStyles.Add(new DataGridTextBoxColumn());

gtStyle1.GridColumnStyles[0].MappingName = 아이템; // 이 이름이 컬럼 스타일을 바꾸기를 원하는 컬럼의

                                                                          // 텍스트와 꼭 같아야 된다.

gtStyle1.GridColumnStyles[0].HeaderText = 아이템;    // 컬럼의 텍스트를 지정한다.

gtStyle1.GridColumnStyles[0].Alignment = HorizontalAlignment.Center; // 중간 정렬

gtStyle1.GridColumnStyles[0].Width = 70;                               // 폭 지정

gtStyle1.GridColumnStyles[0].NullText = string.Empty;


gtStyle1.GridColumnStyles.Add(new DataGridTextBoxColumn());

gtStyle1.GridColumnStyles[0].MappingName = Code;    // 이 이름이 컬럼 스타일을 바꾸기를 원하는 컬럼의

                                                                 // 텍스트와 꼭 같아야 된다.

gtStyle1.GridColumnStyles[0].HeaderText = Code;       // 컬럼의 텍스트를 지정한다.

gtStyle1.GridColumnStyles[0].Alignment = HorizontalAlignment.Center; // 중간 정렬

gtStyle1.GridColumnStyles[0].Width = 70;                               // 폭 지정

gtStyle1.GridColumnStyles[0].NullText = string.Empty;

 


grid.TableStyles.Add(gtStyle1);            //
그리드 컨트롤에 세팅 한다.

……………………………………………………………..

 

- ADO.NET

1.
오라클 DB 연결

string strCommonConnection = Data Source=ORA10;User ID=admin;assword=1111;

OracleConnection OraCommonDBConnt = new OracleConnection( strCommonConnection );

OraCommonDBConnt.Open();

 

2. 오라클 DB 끊기

if( ConnectionState.Open == OraCommonDBConnt.State  )

        OraCommonDBConnt.Close();

 

 

3. DataSet을 사용한 쿼리 작업

OracleDataAdapter OraDataAdapter = new OracleDataAdapter();

OracleCommand cmd = new OracleCommand();

cmd.Connection = OraCommonDBConnt;

cmd.CommandText = SELECT * FROM Member;

OraDataAdapter.SelectCommand =  cmd;

OraDataAdapter.Fill( ResultDataSet , strTableName );

 

 

4. DataReader를 사용한 쿼리 작업

OracleDataAdapter OraDataAdapter = new OracleDataAdapter();

OracleCommand cmd = new OracleCommand();

cmd.Connection = OraCommonDBConnt;

cmd.CommandText = SELECT * FROM Member;

DataReader outDataReader = cmd.ExecuteReader();

              

if( false == outDataReader.HasRows )

return false;



………….

// 원하는 필드의 인덱스 번호를 알아낸다.

int IndexDex   = outDataReader.GetOrdinal("Dex");

…………..

 

 

while( dataReader.Read() )

{

   …………………..

    CharInfo.DEX = outDataReader.GetInt32( IndexDex );

   ……………….

}

 

5. 테이블의 데이터 모두 삭제

string strContext = "DELETE FROM " + TableName;

OracleCommand cmd = new OracleCommand();

cmd.Connection = OraCommonDBConnt;

cmd.CommandText = strContext;

cmd.ExecuteNonQuery();

 

6. DataSet의 내용을 DataGrid 컨트롤에 넣기

GridQueryResult.SetDataBinding( ResultDataSet, strTableName );

 

7. 간단하게 DataSet을 이용한 테이블의 데이터 갱신

// 이전에 쿼리 작업을 한 DataAdapter를 사용해야 된다. 그렇지 않을 경우 DataAdapter에 업데이트 및 삭제 로직을

// 등록 해줘야 된다.

// 이 작업은 쿼리를 하여 DataGrid 컨트롤에 넣은 경우 DataGrid의 데이터를 수정 한 후 이 내용을 DB에 업데이트

// 하고 싶을 때 사용한다.

OracleCommandBuilder cb = new OracleCommandBuilder( OraDataAdapter );

cb.RefreshSchema();

OraDataAdapter.Update( dataset, TableName );

 

8. DataSet의 내용을 XML 파일로 저장

DataSet ds = new DataSet();

……….

ds.WriteXml( filename );
//
이후 위의 7번 방식을 이용해서 데이터를 추가 한다.

……

 

9. 테이블의 모든 데이터를 지우고 XML의 데이터를 추가 하기

// 테이블의 레코드를 모두 지운다.

……….

// ds 라는 DataSet에서 XML 파일을 읽어 들인다.

DataSet ds = new DataSet();

ds.ReadXml( textBoxFilePath.Text );

 

 

- 파일

 

1. 클래스 단위로 파일에 쓰기

이 직렬화 방식은 꼭 .NET 플랫폼에서 서로 파일을 읽고 쓸 때만 사용 가능하다.
만약 .NET으로 만든 프로그램에서 아래와 같이 파일을 만들고 이것을 네이티브에서

읽으면 앞에 다른 값이 들어가 있다( 정확하게는 직렬화 되는 클래스의 메타 정보가

들어가 있다 ).


FileStream GloveFile = new FileStream( "0.ipt", FileMode.Create);

BinaryFormatter formatter = new BinaryFormatter();

formatter.Serialize( GloveFile, ItemFileclass );

 

2. 현재 실행 하고 있는 프로그램의 실행 경로 얻기

Environment.CurrentDirectory

이용하면 실행 경로를 얻을 수 있다.

 

- 네트워크

1. 웹에 있는 파일을 받기

정확하게 말하면 http 프로토콜을 이용하여 웹에 있는 파일을 다운로드 하는 방식을 말한다.

WebRequest myWebRequest = WebRequest.Create("http://jacking75.cafe24.com/Index.hml");

WebResponse myWebResponse = myWebRequest.GetResponse();

 

Stream ReceiveStream = myWebResponse.GetResponseStream();

 

ReceiveStream 객체를 파일 스트림을 이용하여 파일로 저장 하던가 다른 스트림으로 사용하면 된다.

 

- ETC

 

1. C#에서의 XML 주석 코드 제작을 위한 주석 작성 요령

: public bool IsEnableExecute( int iReqList )
 {

    …………

}

가 있다면

/// <summary>

/// 현재 수행하는 기능을 수행 가능한가

/// <summary>

/// <param name="iReqList">수행할 기능의 인덱스</param>

/// <returns name="true">수행가능</returns>

/// <returns name="false">수행불능</returns>

public bool IsEnableExecute( int iReqList )
{

    …………

}

이렇게 작성한다.

 

2. 다른 클래스에 있는 const로 정의한 상수를 이용 방법
:
상수는 다음과 같이 정의 되어 있다.

public class PacketDefine

{

   Public const int Packet_First = 0;

   ………..

}

 

이것을 Command 클래스에서 사용 할려면

…………

Int packetfirst = PacketDefine.Packet_First;

………….

 

사용한다.

 

3. 데이터 변환.

: 데이터 변환을 위해서는 Convert의 멤버를 사용한다.

Convert.Toxxx( xxx )를 사용하면 된다.
) 스트링을 int 변환
Convert.ToInt32( string );

 

3. 바이트 배열을 지정된 위치와 크기로 복사할 경우
:
Buffer.BlockCopy( ……. );

 

4. 클래스의 크기를 알고 싶을 때

: Marshal.SizeOf(LoginPacket)

LoginPacket인스턴스 화된 객체이어야만 한다. LoginPacket의 클래스인 LOGIN_PACKET를 사용하면 안된다.

 

5. 외부 프로그램 실행

: 여기서 인터넷 익스플로어를 실행해서 본인의 홈페이지에 가는 것을 예를 들겠다.

System.Diagnostics.Process IEProcess = new System.Diagnostics.Process();

IEProcess.StartInfo.FileName = "iexplore.exe";

IEProcess.StartInfo.Arguments = "http://jacking75.cafe24.com ";

IEProcess.Start();

 

6. 메시지 박스

- 일반 메시지 박스 사용

 MessageBox.Show( "클라이언트에서 사용할 스킬 정보를 파일로 저장 하겠습니까 ?" );

 

- YES / NO 버튼 사용

 if( DialogResult.Yes == MessageBox.Show( "클라이언트에서 사용할 스킬 정보를 파일로 저장 하겠습니까 ?",

                                                            "이진 파일 저장", MessageBoxButtons.YesNo ) )

 

7. 한글 파일 출력 문제

- 정확한 이유는 모르지만 한글을 파일에 입력할 때 인코딩을 Default 방식으로 지정하면

한글 XP에서는 한글을 아스키 코드 값으로 제대로 인식하지만 윈도우 2003에서는 한글을

유니코드 방식으로 인식하여 한글 1글자를 아스키 코드 1글자로 인식하는 경우가 있다.


string strValue =
;

encodedBytes = System.Text.Encoding.Default.GetBytes(strValue);        

 

한글 XP에서 읽는다면 encodedBytes의 길이가 2개로 나오지만 윈도우 2003에서는

길이가 1로 된다.

 

이 문제를 해결할려면 인코딩 방식을 명시적으로 지정해야 된다.

string strValue = ;

encodedBytes = System.Text.Encoding.GetEncoding(949).GetBytes(strValue);

 

8. 폼의 마우스 커서 변경

- 화살표 마우스 커서      this.Cursor = Cursors.Arrow;

- 모래시계 커서                this.Cursor = Cursors. WaitCursor;

- 손 커서                         this.Cursor = Cursors. Hand;

- 기본 커서                      this.Cursor = Cursors. Default;

등등…….

 

9. 네이티브의 time(&time_t)에서 얻은 초단위의 시간을 C#에서 사용

- time함수를 이용하여 얻은 시간은 시작이 1970년부터이고 C#의 경우는

0 11부터이다..그래서 서로 호환이 되지 않느다. 이것을 해결할려면

다음과 같이 하면 된다.

 

int iTime = C타임함수값;    
DateTime dt = new DateTime(1970, 1, 1, 9, 0, 0); // 
한국은 GMT+9시간
dt = dt.AddSeconds(iTime)

Posted by ... XJAPAN
이전버튼 1 이전버튼