'Common C#/C# 유용한 퍼온자료'에 해당되는 글 4건

  1. 2009.05.22 크레들리 연결 상태 체크
  2. 2009.02.24 ㅠㅠ
  3. 2008.12.10 C# API 사용하기 #2
  4. 2008.12.10 API 이용 정보 #1

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;

namespace MobileGlass7.HiCommon
{
    sealed class ActiveSyncState
    {
       // RegistryKey SyncState;

        internal string GetState
        {
            get
            {
                string value;

                if (!Registry.LocalMachine.OpenSubKey(@"System\State\HardWare").Equals(null))
                    value = Registry.LocalMachine.OpenSubKey(@"System\State\HardWare").GetValue("Cradled").ToString();
                else
                    value = "";
                return value;
            }
        }
     }
}
----------------------------------------------------------------------------------------------------------------
<META http-equiv="Content-Type"> <META content="DEXTWebEditor" name="GENERATOR">

안녕하세요.

 

PDA가 PC에 연결된 크래들에 꼽히고 싱크가 정상적으로 되면 Event를 받는 부분을 몰라..

2일째 질문&답변을 참조하였습니다.

 

그 결과... 아래 함수를 알수 있었습니다.

CeRunAppAtEvent();

그러나 위 API함수는 이벤트가 발생할때 특정 프로그램을(*.exe)파일을 실행시켜 주는 것 같았습니다.

 

또 다른 방법은 Register의 Flag 상태를 체크하여 Active Sync가 되었는지, 되지 않았는지 체크 하는 방법도 있었습니다.

(가능하다는 글만 봤지, 자세히 기재된 내용을 찾아 보기 힘들었습니다.)

제가 해보고 싶은것은 Register의 Flag값을 참조하여 Active연결 상태를 검사하는 부분을 구현하고 싶습니다.

 

하지만,

Active Sync가 정상적으로 된 후, PDA의 어느쪽 Register값을 참조해야 하는지 모르겠습니다.

 

윽~~~

지금 부지런히 레지스터 트리 검색하고 있는데 찾기가 힘드네요..

좀 알려주시면 감사하겠습니다.

 

 

이 글에 평점 주기:  
 [답변][re]참고해보세요.. 2008-07-30 오후 3:08:52
지태성 (nix30)   번호: 28137   / 평점:  (-)  
<META http-equiv="Content-Type"> <META content="DEXTWebEditor" name="GENERATOR">

다음의 registry 값을 확인해 보시면 됩니다.

"HKLM\System\State\Hardware\Cradled", 크래들이 연결되면 값이 1로 변경이 됩니다.

다만, 위 registry 값은 Windows Mobile 5.0 부터 지원되는 것으로 알고 있으니, 님께서 사용하고 계시는 단말기의 OS 버전을 확인해 보신 후 사용해 보시기 바랍니다.

 

참고해 보시기 바랍니다.

감사합니다.

 

이 글에 평점 주기:  
         [답변]에구~ 찾아봐도 없습니다.ㅠ.ㅠ 2008-08-03 오후 10:15:34
김수종 (wowhul)   번호: 28153   / 평점:  (-)  
<META http-equiv="Content-Type"> <META content="DEXTWebEditor" name="GENERATOR">

우선 답변 대단히 감사합니다.

 

말씀 하신 OS버젼의 문제인것 같습니다.

제가 개발하고 있는 PDA는 산업용 PDA로써 Windows CE 5.0입니다.

꼭 생긴게 Windows 95폼이랑 비슷합니다.^^

어떻게 생긴 OS버젼인지 아시죠^^

 

근데 알려주신 레지스터와 그 부근을 모두 싹 찾아 봤지만, Cradle에 관련된 레지스터는

아직도 못 찾았습니다. ㅠ.ㅠ

어디에 숨어 있는지 너무 너무~~ 궁금합니다.

알려주시면 대단히 감사하겠습니다.

 

 

 

 

이 글에 평점 주기:  
                 [답변][re]참고해보세요.. 2008-08-04 오전 9:49:31
지태성 (nix30)   번호: 28158   / 평점:  (-)  
<META http-equiv="Content-Type"> <META content="DEXTWebEditor" name="GENERATOR">

제가 알려드린 Registry 값은 Windows Mobile 5.0 부터 지원되는 Registry 값으로. Windows CE 5.0에서는 지원되지 않습니다. 아무래도 다른 방법을 찾아 보셔야 할 것 같습니다.

 

다른 하나의 방법이라면, 현재 PDA에서 사용하고 있는 IP를 체크하는 방법입니다. 현재, 정확한 IP 주소가 생각나지는 않지만, ActiveSync가 연결되면 고정적인 IP 주소를 할당받게됩니다. 한 번, 참조해 보세요.

 

참고해 보시기 바랍니다.

감사합니다.

 

 

이 글에 평점 주기:  
                         [답변]친절한 답변 대댠히 감사합니다. 2008-08-04 오후 4:49:07
김수종 (wowhul)   번호: 28168   / 평점:  (-)  
<META http-equiv="Content-Type"> <META content="DEXTWebEditor" name="GENERATOR">

해당 레지스터를 찾지 못하여

다른 방법으로 해결을 햇습니다.

 

1. FindWindow()

2. IP주소 확인

 

위 두단계를 거쳐 원하는 부분을 구현하였습니다.

 

다시 감사합니다.


Posted by penguindori

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Xml;
using System.IO;

namespace Hynix.Core
{
    /// <summary>
    /// Sql Command 실행을 도와주는 클래스
    /// </summary>
    public class SqlHelper
    {
        public static void ExcuteCommand(string strConn, string strCmd)
        {
            ExcuteCommand(strConn, strCmd, false, null);
        }

        public static void ExcuteCommand(SqlTransaction tran, string strCmd)
        {
            ExcuteCommand(tran, strCmd, false, null);
        }

        public static void ExcuteCommand(SqlTransaction tran, string strCmd, bool IsSP, SqlParameter[] oParams)
        {
            SqlCommand oCmd = new SqlCommand(strCmd, tran.Connection, tran);
            oCmd.CommandTimeout = int.Parse(Config.Instance.GetValue("TIMEOUT"));

            if (IsSP == true) { oCmd.CommandType = CommandType.StoredProcedure; }

            if (oParams != null)
            {
                for (int i = 0; i < oParams.Length; i++)
                {
                    oCmd.Parameters.Add(oParams[i]);
                }
            }

            oCmd.ExecuteNonQuery();
        }

        public static void ExcuteCommand(string strConn, string strCmd, bool IsSP, SqlParameter[] oParams)
        {
            if (strConn.IndexOf("Connect Timeout") < 0)
            {
                strConn += ";Connect Timeout=" + Config.Instance.GetValue("TIMEOUT") + ";";
            }

            SqlConnection oConn = new SqlConnection(strConn);
            SqlCommand oCmd = new SqlCommand(strCmd, oConn);
            oCmd.CommandTimeout = int.Parse(Config.Instance.GetValue("TIMEOUT"));

            if (IsSP==true)
            {
                oCmd.CommandType = CommandType.StoredProcedure;

                if (oParams != null)
                {
                    for (int i = 0; i < oParams.Length; i++)
                    {
                        oCmd.Parameters.Add(oParams[i]);
                    }
                }
            }

            oConn.Open();
            oCmd.ExecuteNonQuery();
            oConn.Close();
        }

        public static DataSet ExcuteDataSet(string strConn, string strCmd)
        {
            return ExcuteDataSet(strConn, strCmd, false, null);
        }

        public static DataSet ExcuteDataSet(string strConn, string strCmd, bool IsSP, SqlParameter[] oParams)
        {
            if (strConn.IndexOf("Connect Timeout") < 0)
            {
                strConn += ";Connect Timeout=" + Config.Instance.GetValue("TIMEOUT") + ";";
            }

            SqlConnection oConn = new SqlConnection(strConn);
            SqlCommand oCmd = new SqlCommand(strCmd, oConn);
            oCmd.CommandTimeout = int.Parse(Config.Instance.GetValue("TIMEOUT"));

            if (IsSP==true)
            {
                oCmd.CommandType = CommandType.StoredProcedure;

                if (oParams != null)
                {
                    for (int i = 0; i < oParams.Length; i++)
                    {
                        oCmd.Parameters.Add(oParams[i]);
                    }
                }
            }

            SqlDataAdapter da = new SqlDataAdapter(oCmd);

            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }
    }
}

Posted by penguindori

C#에서 Win32 API 사용하기

개요

Win32 API를 불러올 때, 함수의 명칭, 인자, 리턴 값을 가지고 불러오게 되어 있다. 하지만, C#에서 타입들이 모두 객체(Object)의 형식이며, 일반적인 C 의 데이터 형과 상이한 모양을 가진다. 이러한 문제들을 해결할 수 있는 것이 PInvoke 기능이다.

PInvoke( Platform Invocation Service)는 관리화 코드에서 비관리화 코드를 호출할 방법을 제공한다. 일반적인 용도는 Win32 API의 호출을 위해 사용한다.

namespace PinvokeExample

{

using System;

             using System.Runtime.InteropServices; // 반드시 입력해야 한다.

             public class Win32

             {

                           [DllImport(“user32.dll”)]

                           public static extern int FindWindow(string a, string b);

                          

             }

}

위 예제는 FindWindow라는 user32.dll C함수를 사용하는 모습을 보여주고 있다. 실제 FindWindow의 선언은 다음과 같다.

             HWND FindWindow(LPCSTR swClassName, LPCSTR swTitle);

HWND는 윈도우 핸들을 표현하는 32비트 정수 이므로, int형으로 치환되고 LPCSTR 형은 NULL로 끝나는 문자열을 표현한다. 이때 PInvoke string을 자동으로 LPCSTR로 치환해 주는 역할을 하게 된다.

이 문서에서는 이처럼 Win32 API 함수의 여러 유형들을 어떻게 C#에서 사용 할 것인지에 대하여 알아보자.


Posted by penguindori

Pinvoke 라는 기법을 사용하시면 됩니다.

 

Pinvoke 는 닷넷에서 자체적으로 제공되지 않는 외부 함수를 호출하는 방법입니다.

 

관리 코드가 아닌 비 관리 코드를 사용하는 방법이라 보시면 되겠습니다.  api 호출 등이 Pinvoke 죠.

 

닷넷에서 시스템 관련 작업이나  윈도용 어플리케이션을 개발하다보면 부득이하게 Pinvoke 기법을 쓸 수 밖에 없죠.

 

특히  c 를 하다 넘어가면  api 때문에 빈번하게 Pinvoke 를 활용하는데 그에 해당하는 문서 중에선 정리가 잘된

 

있어서 퍼 옵니다.

 

"c계열이 최고다"는 아니지만 c# 이나 asp.net 부터 프로그래밍을 배운 분들이더라도 앞으로 윈도 프로그래밍을

 

하실거면 각종 API 관련 공부를 해두시는게 개발하는데 큰 도움이 됩니다.

 

닷넷 프레임웍이 버젼업하면서 라이브러리에서 제공되는 클래스&메소드가 늘어가긴 한다지만 제공 하기 전까진

 

Pinvoke 활용도가 높을겁니다. 

 

더 상세 정보는 http://www.pinvoke.net/ 여기로..

 

---------------------------------------------------------------------------

 

 

Posted by penguindori