CSharp
2017.12.29 16:19

윈도우 타이틀명으로 창닫기

조회 수 1548 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

예제코드

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);



public void CloseWindowByTitleText(string titleTxt)
{
    try
    {
        if (titleTxt.Length > 0)
        {
            IntPtr hWnd = FindWindow(null, titleTxt);

            if (hWnd != IntPtr.Zero)
            {
                SetForegroundWindow(hWnd); // 윈도우 활성화
                SendMessage(hWnd, 0x0010, 0, 0); // 종료 메시지 보냄
                // SendKeys.Send("{ENTER}"); // 엔터키를 누름
                // SendMessage(hWnd, 0x102, (int)Keys.Enter, 0); // 엔터키 메시지를 보냄
            }
        }
    }
    catch (Exception err)
    {
        Console.WriteLine(err.StackTrace);
    }
}

CSharp
2017.11.10 10:43

Properties config 파일 위치 열기

조회 수 339 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
string path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
MessageBox.Show(path);
if (File.Exists(path)) {
    Process.Start(new ProcessStartInfo("explorer.exe", " /select, " + path));
}

CSharp
2013.04.26 11:36

비동기 소켓 클라이언트

조회 수 52874 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

비동기 소켓 클라이언트 클래스 만들어 봄.

.NET Compact Framework 2.0 용

사용법)

private void SockDataReceived(Socket sock, byte[] data, int readBytes)
{
  // 수신된 메시지 처리
}

...
AsyncSocketClient asc = new AsyncSocketClient();
asc.StartSend("192.168.1.100", 7788, "hello world\r\n", this.SockDataReceived, true);
...

현재 ASCII 엔코딩만 지원함.ㅋㅋㅋ

public class AsyncSocketClient
    {
        private byte[] txMessage;
        private Socket client;
        private Boolean doEndConnection;
        private DataReceivedCallback dataReceivedCallback;

        public delegate void DataReceivedCallback(Socket sock, byte[] data, int bytesRead);
        private class StateObject
        {
            // Client socket.
            public Socket workSocket = null;
            // Size of receive buffer.
            public const int BufferSize = 256;
            // Receive buffer.
            public byte[] buffer = new byte[BufferSize];
            // Received data string.
            public StringBuilder sb = new StringBuilder();
        }

        public AsyncSocketClient()
        {
            this.txMessage = null;
            this.client = null;
            this.doEndConnection = false;
            this.dataReceivedCallback = null;
        }

        public void SetDataReceivedCallback(DataReceivedCallback callback)
        {
            this.dataReceivedCallback = new DataReceivedCallback(callback);
        }

        private void ConnectCallback(IAsyncResult ar)
        {
            Socket s = (Socket)ar.AsyncState;
            try
            {
                s.EndConnect(ar);

                // 연결되었으면
                if (s.Connected)
                {
                    // 전송할 메시지가 있으면
                    if (this.txMessage != null)
                    {
                        // 전송한다.
                        s.Send(this.txMessage);
                    }
                    if (this.dataReceivedCallback != null)
                    {
                        // 수신시작
                        StateObject state = new StateObject();
                        state.workSocket = s;
                        s.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(this.ReceiveCallback), state);
                    }
                }
                else
                {
                    // 소켓 리소스 해제
                    s.Shutdown(SocketShutdown.Both);
                    s.Close();
                }
            }
            catch (Exception) { }
        }

        private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                StateObject state = (StateObject)ar.AsyncState;
                Socket client = state.workSocket;

                int bytesRead = client.EndReceive(ar);

                if (bytesRead > 0)
                {
                    // There might be more data, so store the data received so far.
                    state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));

                    // 응용의 콜백 호출
                    if (this.dataReceivedCallback != null)
                    {
                        byte[] recvData = Encoding.ASCII.GetBytes(state.sb.ToString());
                        this.dataReceivedCallback(client, recvData, recvData.Length);
                    }

                    if (this.doEndConnection)
                    {
                        client.Shutdown(SocketShutdown.Both);
                        client.Close();
                    }
                    else
                    {
                        // Get the rest of the data.
                        client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(this.ReceiveCallback), state);
                    }
                }
                else
                {

                    if (client.Connected)
                    {
                        client.Shutdown(SocketShutdown.Both);
                        client.Close();
                    }
                }
            }
            catch (Exception e)
            {
                e.ToString();
            }
        }

        /// <summary>
        /// 현재 연결되어 있는 상태에서 전송하고 싶은 때 사용하라
        /// </summary>
        /// <param name="msg">전송하고싶은 문자열</param>
        /// <returns></returns>
        public Boolean Send(String msg)
        {
            if (this.client == null) return false;
            if (this.client.Connected == false) return false;
            return this.client.Send(Encoding.ASCII.GetBytes(msg)) > 0;
        }

        /// <summary>
        /// 최초 전송시작시 사용하라
        /// </summary>
        /// <param name="serverIP">대상 IP</param>
        /// <param name="port">대상 포트</param>
        /// <param name="msg">전송할 메시지</param>
        /// <param name="rxCallback">데이터 수신 콜백</param>
        /// <param name="doEndConnection">데이터 수신후 접속종료 여부</param>
        /// <returns></returns>
        public Boolean StartSend(String serverIP, int port, String msg, DataReceivedCallback rxCallback, Boolean doEndConnection)
        {
            // 이미 연결되어 있으면 소켓을 종료시킨다.
            if (this.client != null && this.client.Connected)
            {
                this.client.Shutdown(SocketShutdown.Both);
                this.client.Close();
            }

            this.client = null;
            this.doEndConnection = doEndConnection;
            this.SetDataReceivedCallback(rxCallback);

            try
            {
                // 소켓 생성
                IPAddress ipAddress = IPAddress.Parse(serverIP);
                IPEndPoint ipEP = new IPEndPoint(ipAddress, port);
                this.client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                // 전송할 데이터 지정
                this.txMessage = System.Text.Encoding.ASCII.GetBytes(msg);
                // 연결 시작
                IAsyncResult asyncResult = client.BeginConnect(ipEP, new AsyncCallback(this.ConnectCallback), this.client);
            }
            catch (Exception)
            {
                if (this.client != null)
                {
                    if (this.client.Connected)
                    {
                        this.client.Shutdown(SocketShutdown.Both);
                        this.client.Close();
                    }
                }
                return false;
            }
            return true;
        }
    }

조회 수 28014 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

Thread 안에서 컨트롤 속성을 변경하고 싶을 때는 아래와 같이 한다.

delegate void SetTextCallback(string text);

// This event handler creates a thread that calls a 
// Windows Forms control in a thread-safe way. 
private void setTextSafeBtn_Click( 
            object sender, 
            EventArgs e)
{
    this.demoThread = 
    new Thread(new ThreadStart(this.ThreadProcSafe));

    this.demoThread.Start();
}
// This method is executed on the worker thread and makes
// a thread-safe call on the TextBox control.
private void ThreadProcSafe()
{
    this.SetText("This text was set safely.");
}

// This method demonstrates a pattern for making thread-safe
// calls on a Windows Forms control. 
//
// If the calling thread is different from the thread that
// created the TextBox control, this method creates a
// SetTextCallback and calls itself asynchronously using the
// Invoke method.
//
// If the calling thread is the same as the thread that created
// the TextBox control, the Text property is set directly.

private void SetText(string text)
{
    // InvokeRequired required compares the thread ID of the
    // calling thread to the thread ID of the creating thread.
    // If these threads are different, it returns true.
    if (this.textBox1.InvokeRequired)
    { 
         SetTextCallback d = new SetTextCallback(SetText);
         this.Invoke(d, new object[] { text });
    }
    else
    {
         this.textBox1.Text = text;
    }
}
TAG •

조회 수 28208 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

...
         public string decodeEuckrUrl(string url) {
            System.Text.Encoding euckr = System.Text.Encoding.GetEncoding(51949);
            byte[] euckrBytes = System.Web.HttpUtility.UrlDecodeToBytes(url);
            return euckr.GetString(euckrBytes);
        }
...


...
    MessageBox.Show(decodeEuckrUrl("SellPrice=3%2C100%BF%F8); // 결과 : SellPrice=3,100원 
...



크리에이티브 커먼즈 코리아 저작자표시 Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-영리-동일조건변경허락/3.0에 따라 이용하실 수 있습니다


TAG •

CSharp
2008.10.23 10:42

Windows Mobile / 인터넷 연결하기

조회 수 49336 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

SCH-M480 (블랙잭 2)에서 RAS로는 전화접속 인터넷 연결이 되지 않았다. 몇 시간을 찾아 헤메다가..

C#에서는 OpenNETCF 의 Smart Device Framework를 사용하면 된다고 어느 페이지에서 찾았다.

이렇게 쉬운데, RAS연결이 안된다고 고민했다니, 윽..

우선, http://www.opennetcf.com 에서 Smart Device Framework 2.2를 받아서 자신의 PC에 설치하고,

VS2005 프로젝트에서 참조를 C:\Program Files\OpenNETCF\Smart Device Framework\2.2\Bin\OpenNETCF.Net.dll 추가한다.

버튼하나를 만들어 클릭하면 전화접속 인터넷 연결이 되도록했다.

Example)

using OpenNETCF.Net;
// ... 생략
 private ConnectionManager m_cm = null;  // 맴버변수
// ... 생략

    public Form1() // 생성자
    {
        // 위 부분 생략함.
        m_cm = new ConnectionManager();  // ConnectionManager 객체 생성
        m_cm.Connected += new System.EventHandler(CM_Connected); // 연결이 완료 이벤트 핸들러 등록
        m_cm.ConnectionFailed += new System.EventHandler(CM_ConnectionFailed); // 연결 실패 이벤트 핸들러 등록
        m_cm.Disconnected += new System.EventHandler(CM_Disconnected); // 연결 끊어짐 이벤트 핸들러 등록
        m_cm.Timeout = 20000; // 연결시 타임아웃 지정... 단위는 밀리초인 듯.
    }
    private void CM_Connected(object sender, EventArgs e)
    {
        // TODO: 연결이 완료되었을 때 하고 싶은 일 아래 추가.
        MessageBox.Show("네트워크 연결이 완료되었습니다: " + m_cm.Status);
    }
    private void CM_ConnectionFailed(object sender, EventArgs e)
    {
        // TODO: 연결이 실패했을 때 하고 싶은 일 아래 추가.
        MessageBox.Show("네트워크 연결을 하지 못했습니다.(" + e.ToString() + ")");
    }
    private void CM_Disconnected(object sender, EventArgs e)
    {
        // TODO: 연결이 종료되었을 때 하고 싶은 일 아래 추가
        MessageBox.Show("네트워크 연결이 종료 되었습니다.(" + e.ToString() + ")");
    }
    // 버튼을 클릭했을 때
    private void button1_Click(object sender, EventArgs e)
    {
        m_cm.Connect(); // 연결을 함.
    }
// ... 생략

참고사이트

http://www.opennetcf.com/library/sdf/

http://www.opennetcf.com/

크리에이티브 커먼즈 코리아 저작자표시 Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경허용/3.0에 따라 이용하실 수 있습니다


조회 수 37324 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
.NET Compact Framework 에서의 폼 로딩시 크기를 화면에 맞추려고 바보같이 Form의 크기를 수동으로 맞추었었다. emoticon

아래와 같은 코드를 사용하면 화면에 꽉찬 Form 을 볼 수 있다.

form1.Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
form1.Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height- 2*SystemInformation.MenuHeight;

SystemInformation.MenuHeight 는 메뉴 한 줄의 높이인데, Windows Mobile Device에서 상단,하단의 Bar의 높이인 것 같다.


CSharp
2008.10.11 12:43

System.Text.Encoding 클래스

조회 수 25270 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
사용예)
message = "안녕";
byte[] data = System.Text.Encoding.GetEncoding(949).getBytes(message);

코드 페이지는 http://msdn.microsoft.com/ko-kr/library/system.text.encoding.aspx 를 참조하세요.emoticon
TAG •

CSharp
2008.10.01 14:11

The nullable syntax

조회 수 17234 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
우리말로 풀어보면 null 이 될 수 있는 문법인데요.

찾아보니깐, .NET framework 2.0 부터 아래 코드가 가능하게 되었다고 나오네요.

 int? foo = null;

데이터 타입들 중에 null을 가질 수 없는 것들 중에 널 값을 가지게 선언한다는 의미인 것 같네요.

그렇다면 아래 표현이 가능하여 집니다.

int? foo = null;
if (foo == null) {
  MessageBox.Show("foo is null");
}

DB 처리시 데이터 타입이 null이 될 수 있다면, 유용하게 사용될 수 있겠는데요. emoticon

Board Pagination Prev 1 Next
/ 1