반응형

안녕하세요.

 

코딩하는남자 코딩연습생입니다

 

간혹 쿼리 작성하시다 보면 서브쿼리나 하위쿼리를 많이 사용하게 되는데

 

이때 의미 없이 속도가 느려지거나 하는 경우가 발생합니다

 

이렇때 쿼리 튜닝을 하게 되는데 오라클의 경우에는 힌트 사용이나 조건절을 변경해서

 

성능 튜닝을 하게 됩니다

 

하지만 MSSQL의 경우에는 힌트 사용이 안되는거 같더라구요

 

그래서 이럴때는 넌클러스터 인덱스를 생성해서 해당 쿼리에 지정하여 적용할 수가 있습니다

 

지정 방법은 간단합니다

 

 

[Query]

SELECT TOP 1 *	FROM 테이블이름 K WITH(NOLOCK, INDEX=인덱스명)

 

이렇게 지정하게 되면 해당 쿼리가 해당 인덱스를 우선시하여 검색을 하게 되어서 쿼리 성능이 빨라지더라구요

 

혹시 잘 사용되던 쿼리가 갑작이 느려지거나 할 경우 또는 쿼리 튜닝을 해야 할 경우 한번 사용해 보세요

 

감사합니다

반응형
반응형

안녕하세요

 

코딩하는남자 코딩연습생입니다

 

저번 시간에 리소스파일을 이용한 C# 프로젝트 다국어 적용을 게시했는데

 

폼에서 컨트롤을 하나씩 지정하는것이 어려워 폼내의 모든 컨트롤을 찾아서

 

리소스의 항목과 비교해서 다국어를 적용하도록 구현해 봤는데요

 

C# 다국어 적용 관련 글은 아래 링크를 확인해 보시기 바랍니다

 

https://codingman.tistory.com/30

 

[C#] Resources를 통한 다국어 기능 구현

안녕하세요. 코딩하는남자에 코딩연습생입니다 이번에 회사에서 관리하는 MES 프로그램에 갑작스런 외국인 사용자가 추가 되어 기존 한국어/인도네시아어만 사용되고 있었는데 중국어를 추가해야 될 일이 발생했어..

codingman.tistory.com

 

C#에서 폼내의 모든 컨트롤 찾기에 대한 관련 글도 링크를 확인해 보시기 바랍니다

 

https://codingman.tistory.com/43

 

[C#]Winform 모든 컨트롤 정보 가져오기

안녕하세요 코딩하는남자 코딩연습생입니다 이번에 할려고 하는것은 Winform에서 폼내의 모든 컨트롤의 이름을 가져올려고 합니다 보통 컨트롤 이름 가져오기 할께 사용하는 코드로는 Control GetControlByName(st..

codingman.tistory.com

그런 다음 이 본문의 가장 중요한

 

리소스파일에서 항목을 가져오는 방법의 구문은 다음과 같습니다

 

 

[Source Code]

string fullName = "POPMachine.Language.Str";
System.Reflection.Assembly Assem = System.Reflection.Assembly.GetExecutingAssembly();
ResourceManager appResourceMgr = new ResourceManager(fullName, Assem);
appResourceMgr.GetString("항목이름");

 

이구문을 사용하면 리소스파일내에서 원하는 항목만 빼올수가 있습니다

 

GetString를 사용하면 됩니다

 

감사합니다~

반응형
반응형

안녕하세요

 

코딩하는남자 코딩연습생입니다

 

이번에 할려고 하는것은 Winform에서 폼내의 모든 컨트롤의 이름을 가져올려고 합니다

 

보통 컨트롤 이름 가져오기 할께 사용하는 코드로는

 

Control GetControlByName(string Name)
{
    foreach (Control c in this.Controls)
        if (c.Name == Name)
            return c;

    return null;
}

이런식으로 구현을 하는데 이렇게 하게 되면

 

컨테이너컨트롤에 한해서 한 컨터이너컨트롤 내부의 컨트롤들만 불러오게 되더라구요

 

여기서 컨테이너컨트롤이라는건 Panle, groupbox, TableLayoutPanel, 등을 말하는것으로써

 

컨트롤을 감싸는 컨트롤을 칭하는것입니다

 

컨테이너 컨트롤을 포함한 모든 컨트롤을 불러오는 방법을 설명할 것입니다

 

클래스 파일을 생성합니다

 

 

[Source Code]

         public static Control[] GetAllControlsUsingRecursive(Control containerControl)
        {
            List<Control> allControls = new List<Control>();

            foreach (Control control in containerControl.Controls)
            {
                allControls.Add(control);

                if (control.Controls.Count > 0)
                {
                    allControls.AddRange(GetAllControlsUsingRecursive(control));
                }
            }

            return allControls.ToArray();
        }

 

이렇게 클래스 구문을 작성해주고

 

본문에서 다음과 같이 호출하여 리턴 받을 수 있습니다

 

[Source Code]

            Control[] controls = MyApp.GetAllControlsUsingRecursive(this);

            foreach (Control control in controls)
            {
                if (control.Name != "")
                {
                    if (control.Name.Substring(0, 3) == "lbl" || control.Name.Substring(0, 3) == "cmd")
                    {
                        control.Text = appResourceMgr.GetString(control.Name);
                    }
                }
            }

 

저의 경우네는 레이블과 버튼의 정보만 가져오고 싶어서

 

레이블의 명칭의 시작을 lbl로 구성하고 버튼의 시작 명칭을 cmd로 구성하였기에

 

IF문을 통해 해달 컨트롤을 걸러냈습니다

 

이렇게 하면 본문의 호출할려는 폼의 모든 컨트롤을 GetAllControlsUsingRecursive로 리턴해주고

 

GetAllControlsUsingRecursive에서는 재귀호출을 사용하여 컨테이너컨트롤 내부의 컨트롤 까지 검색하여

 

리턴해주게 됩니다

 

컨트롤 검색이나 명칭변경 또는 컨트롤 제어를 위해 고민중이시라면

 

다음과 같은 구문을 사용하여 검색하게 되면 좋을거 같습니다

 

감사합니다

반응형
반응형

안녕하세요

 

코딩하는남자 코딩연습생입니다

 

12.13일 다음 애드핏 심사 요청 후 5일이 지난 지금!!!

 

연재 시간 17:07분에 드뎌!!! 승인이 되었습니다

 

3번의 재 심사 후로 드디어 심사 승인이 되었네요

 

저는 이상하게 구글 애드센스보다 다음 애드핏이 더 힘들게 승인 받앗습니다ㅎㅎ

 

2번 재심사에서 보류 처리 되고 "최신 콘텐츠 부족" 경고를 먹은뒤에

 

회심에 폭풍 포스팅이후 승인 되엇습니다ㅎ

 

혹시 저와 같이 최신 콘텐츠 부족으로  고생하시는분은은

 

현재 심사 중인 심사건을 삭제 하신뒤에 다시 심사 요청은 하시고

 

그다음에 신규 포스팅은 4~6개 정도 올리시면 심사가 되는듯해요

 

현재까지 제가 분석해본걸로는

 

[▣승인 조건]

① 모든 카테고리에 3개이상의 포스팅이 있어야 합니다

② 포스팅의 게시글 조건이 문자 1000자 이상이 되어야 한다(저는 부족했어요)

③ 최신 컨텐츠가 일일 5개 이상이 되어야 한다

 

이정도 조건이 되는거 같습니다

 

계속해서 심사 보류가 되시느 분들은 저와 같이 한번 해보세요

 

재심사 하지 마시고 현재 심사건을 취소하시고 신규로 심사 등록을 하신뒤에 최신 포스팅은 5~6개 정도 올리시고

 

기다려 보시면 될거 같습니다

 

앞으로도 1일1포스팅을 목표로 열심히 하겠습니다

 

감사합니다

반응형
반응형

안녕하세요

 

코딩하는 남자 "코딩연습생"입니다

 

저번 시간에 윈도우 핸들러를 통해 카카오톡PC 버전에서 메세지 보내기를 게시했는데요

 

이번에는 텔레그램 API를 통해 C#에서 메세지를 보내는 방법을 구현해 볼려고 합니다

 

요즘은 모둔 매신져들이 PC와 연계를 많이 하고 있는 추세이고 코딩에 대한 API도 많이 제공되고 있어서

 

무한한 가능성이 생겨나고 있는거 같습니다

 

다시 본론으로 돌아와서 텔레그램을 C#으로 불러오기 위해서는 몇가지 설정이 입니다

 

[사전 준비 사항]

 

1. 텔레그램 가입하기

2. Bot을 통한 나만의 Bot을 생성한다

3. API Key를 부여 받는다

 

이렇게 3가지를 사전 준비해야 합니다 방법은 아주 간단합니다

 

텔레그램을 가입하기 위해 텔레그램 싸이트 접속

: https://web.telegram.org

 

Telegram Web

Welcome to the Web application of Telegram messenger. See https://github.com/zhukov/webogram for more info.

web.telegram.org

 

위 링크로 접속하셔서 가입 or 로그인을 해줍니다

 

 

로그인 뒤에 옆 친구리시트 중에 다음과 같은 BotFather를 클릭해 줍니다

 

번역하면 봇아버지ㅋㅋ

 

그다음 봇 아버지에게 다음과 같이 말을 겁니다

 

 

/start 텔레그램을 시작하겠다는 말을 봇아버지에게 하는거죠

 

 

그다음 봇아버지에게 /newBot이라고 말은 걸면 아버지가 물어볼꺼에요 봇이름은 무엇으로 할거니?

 

라고..

 

거기에 Bot 이름을 입력해주시면 되는데

 

이름_Bot 이름 뒤에 꼭 _Bot이라고 붙여 주셔야 합니다

 

그렇게 Bot이 생성이 되면 HTTP API 라는 키를 알려줍니다

 

여기까지 되셧으면 사전 준비는 완료

 

다음은 비쥬얼 스튜디오로 가서 프로젝트를 하나 생성해 줍니다

 

그 다음 Nuget을 통해 TelegramBot을 참조 추가 해줍니다

 

 

저는 이미 설치가 되어 있으서 업데이트라고 나오는데

 

여러분은 아마 설치라고 나오실겁니다

 

 

설치하게 되면 Telegram.Bot이라는 참조가 생성이 됩니다

 

그다음 텔레그램을 제어하기 위한 Class를 생성할겁니다

 

저는 src라는 폴더 아래 TelegramBot.cs라는 파일을 생성했습니다

 

[SourceCode]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Cache;
using System.IO;

 

프로젝트 using 선언문을 선언해주고

 

    public class TelegramBot
    {
        private static readonly string _baseUrl = "https://api.telegram.org/bot";
        private static readonly string _token = "879350682:AAEgVohD-XAq6g_Fq4vEHecuiiqLCnZ6CEU";
        public static string _chatId = string.Empty;

        /// <summary>
        /// 텔레그램봇에게 메시지를 보냅니다.
        /// </summary>
        /// <param name="text">보낼 메시지</param>
        /// <param name="errorMessage">오류 메시지</param>
        /// <returns>결과</returns>
        public static bool SendMessage(string text, out string errorMessage)
        {
            return SendMessage(_chatId, text, out errorMessage);
        }

        /// <summary>
        /// 텔레그램봇에게 메시지를 보냅니다.
        /// </summary>
        /// <param name="chatId">chat id</param>
        /// <param name="text">보낼 메시지</param>
        /// <param name="errorMessage">오류 메시지</param>
        /// <returns>결과</returns>
        public static bool SendMessage(string chatId, string text, out string errorMessage)
        {
            string url = string.Format("{0}{1}/sendMessage", _baseUrl, _token);

            HttpWebRequest req = WebRequest.Create(new Uri(url)) as HttpWebRequest;
            req.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
            req.Timeout = 30 * 1000;
            req.Method = "POST";
            req.ContentType = "application/json";

            string json = String.Format("{{\"chat_id\":\"{0}\", \"text\":\"{1}\"}}", chatId, EncodeJsonChars(text));
            byte[] data = UTF8Encoding.UTF8.GetBytes(json);
            req.ContentLength = data.Length;
            using (Stream stream = req.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
                stream.Flush();
            }

            HttpWebResponse httpResponse = null;
            try
            {
                httpResponse = req.GetResponse() as HttpWebResponse;
                if (httpResponse.StatusCode == HttpStatusCode.OK)
                {
                    string responseData = null;
                    using (Stream responseStream = httpResponse.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(responseStream, UTF8Encoding.UTF8))
                        {
                            responseData = reader.ReadToEnd();
                        }
                    }

                    if (0 < responseData.IndexOf("\"ok\":true"))
                    {
                        errorMessage = String.Empty;
                        return true;
                    }
                    else
                    {
                        errorMessage = String.Format("결과 json 파싱 오류 ({0})", responseData);
                        return false;
                    }
                }
                else
                {
                    errorMessage = String.Format("Http status: {0}", httpResponse.StatusCode);
                    return false;
                }
            }
            catch (Exception ex)
            {
                errorMessage = ex.Message;
                return false;
            }
            finally
            {
                if (httpResponse != null)
                    httpResponse.Close();
            }
        }

        private static string EncodeJsonChars(string text)
        {
            return text.Replace("\b", "\\\b")
                .Replace("\f", "\\\f")
                .Replace("\n", "\\\n")
                .Replace("\r", "\\\r")
                .Replace("\t", "\\\t")
                .Replace("\"", "\\\"")
                .Replace("\\", "\\\\");
        }
    }

이렇게 Class 파일을 하나생성해 줍니다

 

그 다음 메인폼으로 이동한뒤에

 

using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.ReplyMarkups;

 

Telegram.Bot을 화면에 삽입 시켜 줍니다

 

private void Telegram_Send()
        {
            string text = Messge;
            string errorMessage = null;
            bool ret = TelegramBot.SendMessage(text, out errorMessage);


            switch (TelegramBot._chatId)
            {
                case "chatId1":
                    Who = "사용자1";
                    break;
                case "chatId2":
                    Who = "사용자2";
                    break;
                case "chatId3":
                    Who = "사용자3";
                    break;
                case "chatId4":
                    Who = "사용자4";
                    break;
                case "chatId5":
                    Who = "사용자5";
                    break;
            }

            //Log 기록.
            TelegramBot._chatId = "chatId_Bot";
            text = "[" + Who + "] 전송시간 : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            bool ret2 = TelegramBot.SendMessage(text, out errorMessage);

        }

 

이렇게 하면 전송하게 됩니다

 

여기서 chatId라는게 나오는데요

 

상대방의 고유 계정 ID라고 보시면 될거 같은데요 나의 ID를 보는 방법은 다음과 같습니다

 

친구 검색하기에서 "get id"라고 검색을 하면 아래 그림과 같은 Bot이 나오는데 추가해줍니다

 

 

추가하게 되면 친구 리스트에 다음과 같이 나오게 되겟죠?

 

대화창으로 이동한뒤 /start라고 쳐주면 

 

Your Chat ID = "xxxxxxxxx"라고 알려줍니다

 

저 코드가 chatId가 되는겁니다

 

그리고 단체그룹방에 메세지를 보고 싶을 경우에는

 

해당 그룹방에 나의 Bot을 추가한뒤에 

 

인터넷 주소창에

 

https://api.telegram.org/bot"API 토큰값"/getUpdates

 

이렇게 입력을 하게 되면

 

빨간색 테두리안에 해당 대화방의 Chatid가 나오게 됩니다

 

반응형
반응형

안녕하세요

 

코딩하는남자 코딩 연습생입니다!

 

이번에 게시할 주제는 카카오PC 버전을 이용해서

 

현재 활성화된 대화창을 찾아 자동으로 메세지를 보내는 방법을 구현해 봤습니다

 

응용 부분은 사내 알림, 시스템 관리자 알림, 등 카카오톡을 활용해서 시스템 알림 기능을 만들기 위해 시도해 봤는데요

 

결론은 실패 입니다ㅎㅎ

 

카카오 챗봇에서 연속 메세지가 다중 발생하면 계정에 Block을 걸어 계정을 사용하지 못하게 정책이 잡혀 있더라구요

 

아마 악성 이용을 방지 하지 위함인거 같습니다

 

그래도 응용하면 나중에 다른 다른 어플리케이션을 제어할수도 있기에

 

방법을 공유해볼께요

 

 

 

 

[Source Code]

using System.Runtime.InteropServices;

 

윈도우에 실행 중인 창에 대한 핸들러를 사용하기 위한 DllImport 함수를 사용하기 위한 선언문

 

        [DllImport("user32.dll")]
        public static extern int FindWindow(string lpClassName, string lpWindowName);
        //FindWindow (최상위 창 핸들값 가져오는 API)

        [DllImport("user32.dll")]
        public static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
        //FindWindowEX (인자로 받아온 핸들의 자식의 핸들값 가져오는 API)

        [DllImport("user32.dll")]
        public static extern int SendMessage(int hwnd, int wMsg, int wParam, string lParam);
        //SendMessage

        [DllImport("user32.dll")]
        public static extern uint PostMessage(int hwnd, int wMsg, int wParam, int lParam);
        
        //윈도우를 포커스를 지정하여 최상위로 오도록 한다
        [DllImport("user32.dll")]
        private static extern bool SetForegroundWindow(int hWnd);

        //최소화된 윈도우를 활성화 시킴
        [DllImport("user32.dll")]
        private static extern bool ShowWindowAsync(int hWnd, int nCmdShow);

 

DllImport를 사용해 다음과 같이 핸들러 추가

 

        // user create.
        string Title = string.Empty;
        string massage = string.Empty;

        const int WM_KEYDOWN = 0x100;
        const int WM_KEYUP = 0x101;
        const Int32 VK_RETURN = 0x0D;
        const int VK_ENTER = 0x0D;

 

제목과 보낼 메세지를 담을 변수와 키보드 코드를 이미 지정합니다

 

        public void sendKatalk(string title, string msg)
        {
            int hd01 = FindWindow(null, title);
            int hd03 = FindWindowEx(hd01, 0, "RichEdit20W", "");

            //ShowWindowAsync(hd01, 1);
            SetForegroundWindow(hd01);

            //maessage send.
            SendMessage(hd03, 0x000c, 0, msg);

            //sleep Time 3sec.
            Thread.Sleep(3000);

            PostMessage(hd03, 0x0100, 0xD, 0x1C001);

            //sleep Time 3sec.
            Thread.Sleep(3000);
        }

 

FindWindow를 통해 title의 이름을 가진 활성화 창을 찾습니다

 

그 다음 SetForegroundWindow를 통해 title이름을 가진 창을 최상위로 활성화 시킵니다

 

그 뒤에 SendMessage를 이용해서 hd03에서 RichEdit20W 부분 위치에 msg라는 값을 넣어줍니다

 

마지막으로 PostMessage를 통해 RichEdit20W에 엔터 명령어를 보내주면 메세지 보내기 성공!!

 

저는 Theread를 사용해서 사용자이름을 불러와 자동으로 대화창을 활성화 시키고 그 활성화 된

 

대화창에 메세지를 생성하여 보내도록 구현햇습니다

 

궁금하신 내용은 댓글을 통해 문의 주시면 아는 범위에서 답변 드리도록 하겠습니다

 

감사합니다

반응형
반응형

안녕하세요

 

코딩하는남자 코딩연습생입니다

 

12.13일 다음애드핏 심사 요청 후 4일이 지낫습니다

 

보통 1~2일 안에 심사 결과가 나오는데 이번에는 좀 오래 걸리네요

 

이유가 뭘까요?

 

10월에 1차 심사요청에는 "컨텐츠 부족"

 

11월에 2차 심사요청 이번에는 "최신 컨텐츠 부족"

 

그래서 1일 3 컨텐츠 업로드 후에 재 심사

 

결과는 역시 "최신 컨텐츠 부족"...

 

아~ 내 블로그 시작한지 얼마 안되고 일일 방문자수가 30명 정도?? 밖에 안되서

 

많은 컨텐츠가 필요하구나 싶어

 

12월까지 게시글을 총 40개까지 늘려서 재심사 신청

 

하지만 결과는 또 최신 컨텐츠 부족... 구글 폭풍 검색 했더니 "최신 컨텐츠 부족" 심사 결과 이후에

 

5~6개 컨텐츠 업로드후에 재 심사 요청하면 보통 승인이 난다고 하네요

 

그래서 12월13일!!!! 폭풍 게시 5개 업로드 후에 심사요청했는데..

 

현재까지 심새대기 중입니다ㅎㅎㅎ

 

다른분들은 구글애드고시가 제일 힘들고 다음 애드핏은 좀 수월하다고 하시는데..

 

전 반대이네요ㅎㅎ

 

어쨋든 수익을 위해서 블러그를 하는게 아니라 나 자신 개발과 코딩 정보 공유를 위해 운영하는거니깐

 

"욕심 내지 말고 꾸준히 늘 하던만큼만 하자"라고 다시 마음 다 잡고

 

열심히 하겠습니다

 

감사합니다

반응형
반응형

안녕하세요

 

코딩하는남자 코딩연습생입니다

 

저번 PPT 슬라이드 실행과 연계해서 네트워크 공유 폴더의 파일을 C#에서 Soket으로 접속하여 실행되도록

 

구현하는 방법을 이번에 설명을 해볼까 합니다

 

C#으로 PPT슬라이드로 파일 실행하기는 아래 링크로 확인하시면 됩니다

 

https://codingman.tistory.com/37

 

[C#]파워포인트 슬라이드 구현하기

안녕하세요 코딩하는남자 코딩연습생입니다 오늘 벌써 4번째 글을 쓰고 있는거 같습니다ㅎㅎㅎ 요즘 회사 일이 많아 1일1포스팅을 지킬려고 힘들게 노력하다가 1일 1포스팅은 무조껀 지키고 시간이 있을때 많이 포..

codingman.tistory.com

그럼 다시 본론으로 돌아와서 당연히 네트워크 공유 폴더에 접근 할려면 Soket부터 구현을 해야 겠죠?

 

 

[Source Code]

using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;

 

다음 3개의 using문을 선언해 줍니다.

 

다음은 네트워크 접속시 인증과 윈도우 인증을 위한 구문 입니다

 

   [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public struct NETRESOURCE
        {
            public uint dwScope;
            public uint dwType;
            public uint dwDisplayType;
            public uint dwUsage;
            public string lpLocalName;
            public string lpRemoteName;
            public string lpComment;
            public string lpProvider;
        }

        // API 함수 선언
        [DllImport("mpr.dll", CharSet = CharSet.Auto)]
        public static extern int WNetUseConnection(
                    IntPtr hwndOwner,
                    [MarshalAs(UnmanagedType.Struct)] ref NETRESOURCE lpNetResource,
                    string lpPassword,
                    string lpUserID,
                    uint dwFlags,
                    StringBuilder lpAccessName,
                    ref int lpBufferSize,
                    out uint lpResult);

        // API 함수 선언 (공유해제)
        [DllImport("mpr.dll", EntryPoint = "WNetCancelConnection2", CharSet = CharSet.Auto)]
        public static extern int WNetCancelConnection2A(string lpName, int dwFlags, int fForce);

        //PPT 함수 선언
        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        static extern IntPtr FindWindow(IntPtr ZeroOnly, string lpWindowName);
        //PPT 함수 선언
        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
        //PPT 함수 선언
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern bool SetWindowText(IntPtr hwnd, String lpString);

        [DllImport("user32")]
        private static extern bool SetForegroundWindow(IntPtr handle);

        [DllImport("User32")]
        private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

        private string FileName = "";

 

이렇게 구조체와 Dll파일을 Import 시켜줍니다

 

이제 준비가 되었으면 공유 폴더에 접속을 해야겠죠?

 

public int ConnectRemoteServer(string server)
        {
            int capacity = 64;
            uint resultFlags = 0;
            uint flags = 0;
            System.Text.StringBuilder sb = new System.Text.StringBuilder(capacity);
            NETRESOURCE ns = new NETRESOURCE();
            ns.dwType = 1;              // 공유 디스크
            ns.lpLocalName = null;   // 로컬 드라이브 지정하지 않음
            ns.lpRemoteName = server;
            ns.lpProvider = null;
            int result = 0;
            if (server == @"\\아이피주소\폴더명$")
            {
                result = WNetUseConnection(IntPtr.Zero, ref ns, "공유폴더접속암호", "폴더이름", flags,
                                            sb, ref capacity, out resultFlags);
            }
            else
            {
                result = WNetUseConnection(IntPtr.Zero, ref ns, "공유폴더접속암호", "폴더이름", flags, sb, ref capacity, out resultFlags);
            }
            return result;
        }

 

이제는 반대로 접속을 했다면 반대로 해제도 해야겠죠?

 

public void CencelRemoteServer(string server)
        {
            WNetCancelConnection2A(server, 1, 0);
        }

 

이제 버튼을 통해 공유 폴더에 접근하는 구문입니다

 

ConnectRemoteServer(@"\\아이피주소\폴더이름");

 

그 다음 저의 경우 공유폴더에 있는 ppt파일을 실행 시키도록 구현했는데요

 

위의 ppt만들기 링크와 이어져 있습니다

 

FileName = @"\\아이피번호\폴더이름\파일이름.PPT";
PowerPoint.Application pptapp = new PowerPoint.Application();
pptapp.Visible = MsoTriState.msoCTrue;
PowerPoint.Presentation pptPres = pptapp.Presentations.Open(FileName, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoCTrue);
PowerPoint.SlideShowWindow slideWindow = pptPres.SlideShowSettings.Run();

 

이렇게 하시면 공유폴더에 있는 특정 파일을 바로 파워포인트 슬라이드 모드로 실행이 됩니다

 

전에 글쓴 C#으로 파워포인트 슬라이드 실행하기와 이어서 같이 사용하시면

 

공유폴더에 있는 파일을 바로 파워포인트 슬라이드로 실행하는게 완성됩니다

반응형

+ Recent posts