본문으로 바로가기

프로그램/C# 검색 결과

해당 글 37


using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace CaptionTimetableSupporet
{
    public partial class MainForm : Form
    {

        // P/Invoke constants
        private const int WM_SYSCOMMAND = 0x112;
        private const int MF_STRING = 0x0;
        private const int MF_SEPARATOR = 0x800;

        // P/Invoke declarations
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool AppendMenu(IntPtr hMenu, int uFlags, int uIDNewItem, string lpNewItem);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool InsertMenu(IntPtr hMenu, int uPosition, int uFlags, int uIDNewItem, string lpNewItem);

        // ID for the About item on the system menu
        private int SYSMENU_ABOUT_ID = 0x1;




        protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);

            // Get a handle to a copy of this form's system (window) menu
            IntPtr hSysMenu = GetSystemMenu(this.Handle, false);

            // Add a separator
            AppendMenu(hSysMenu, MF_SEPARATOR, 0, string.Empty);

            // Add the About menu item
            AppendMenu(hSysMenu, MF_STRING, SYSMENU_ABOUT_ID, "&About…");
        }

        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);

            // Test if the About item was selected from the system menu
            if ((m.Msg == WM_SYSCOMMAND) && ((int)m.WParam == SYSMENU_ABOUT_ID))
            {
                MessageBox.Show("Custom About Dialog");
            }

        }
    }
}
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[C#] 윈도우 OS 정보 얻기

category 프로그램/C# 2019/06/08 07:47

            OperatingSystem os = System.Environment.OSVersion;

            Console.WriteLine("플랫폼 : " + os.Platform);

            Console.WriteLine("서비스팩 : " + os.ServicePack);

            Console.WriteLine("버전 : " + os.Version);

            Console.WriteLine("버전 : " + os.Version);

            Console.WriteLine("버전 문자열 : " + os.VersionString);

            Console.WriteLine("CLR버전 : " + System.Environment.Version);

            Console.ReadLine();
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[C#] WebBrowser version 변경

category 프로그램/C# 2019/02/21 11:10
Program.cs 에서 다음을 사용하도록 합니다.

using System.Runtime.InteropServices;
using Microsoft.Win32;



레지스트리에 세팅하고 값이 정상적인지 체크하도록 하는 함수 입니다.

        private static void SetIEVersioneKeyforWebBrowserControl(string appName, int ieval)
        {
            string RegKeyPath = "";
            RegistryKey Regkey = null;

            try
            {
                // x86, x64 구분
                if (Environment.Is64BitProcess)
                {
                    RegKeyPath = @"SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
                }
                else
                {
                    RegKeyPath = @"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
                }

                //
                try
                {
                    Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(RegKeyPath, true);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(" 관리자 권한이 아니여서 접근이 불가능 합니다.");
                }
                finally
                {
                    // 레지스트리의 값을 체크
                    if (Regkey == null)
                    {
                        // 찾지 못할 경우 그냥 PASS
                    }
                    else
                    {
                        // 실행 프로세스가 등록되어 있는지 값을 가져오기
                        string FindAppkey = Convert.ToString(Regkey.GetValue(appName));

                        // 이미 세팅 되어 있을 경우
                        if (FindAppkey == ieval.ToString())
                        {
                            Regkey.Close();
                        }
                        else
                        {
                            // 값 세팅하기
                            Regkey.SetValue(appName, unchecked((int)ieval), RegistryValueKind.DWord);

                            //check for the key after adding 
                            FindAppkey = Convert.ToString(Regkey.GetValue(appName));
                            if (FindAppkey != ieval.ToString())
                            {
                                Console.WriteLine("IE 에뮬레이트 값을 설정하지 못하엿습니다.");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {

            }
            finally
            {
                //레지스트리 수정을 종료함.
                if (Regkey != null)
                {
                    Regkey.Close();
                }
            }
        }



프로그램 시작전에 체크헤서 체크 하도록 합니다.

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
 
            // 현재 프로세스 이름 획득
            var targetApplication = System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe";
            int browserver = 7;
            int ie_emulation = 11999;

            // 설치된 브라우저 버전 체크
            using (WebBrowser wb = new WebBrowser())
            {
                browserver = wb.Version.Major;
                if (browserver >= 11)
                {
                    ie_emulation = 11001;
                }
                else if (browserver == 10)
                {
                    ie_emulation = 10001;
                }
                else if (browserver == 9)
                {
                    ie_emulation = 9999;
                }
                else if (browserver == 8)
                {
                    ie_emulation = 8888;
                }
                else
                {
                    ie_emulation = 7000;
                }
            }

            // 레지스트리에 값 세팅
            SetIEVersioneKeyforWebBrowserControl(targetApplication, ie_emulation);

            // 프로그램 시작
            Application.Run(new MainForm());
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[C#] 관리자 권한으로 실행하기

category 프로그램/C# 2019/01/10 11:03
해당 작업은 Program.cs 에서 작업을 합니다.


using System.Security.Principal;
using System.Diagnostics;




        /// <summary>
        /// 관리자 권한 체크 
        /// </summary>
        /// <returns></returns>
        public static bool IsAdministrator()
        {
            WindowsIdentity identity = WindowsIdentity.GetCurrent();

            if (null != identity)
            {
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                return principal.IsInRole(WindowsBuiltInRole.Administrator);
            }

            return false;
        }



메인 실행전에 관리자 권한으로 실행 하도록 하면 됩니다.


        [STAThread]
        static void Main()
        {
                if (IsAdministrator() == false)
                {
                    try
                    {
                        ProcessStartInfo procInfo = new ProcessStartInfo();
                        procInfo.UseShellExecute = true;
                        procInfo.FileName = Application.ExecutablePath;
                        procInfo.WorkingDirectory = Environment.CurrentDirectory;
                        procInfo.Verb = "runas";
                        Process.Start(procInfo);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message.ToString());
                    }

                    return;
                }

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm());
        }



위 방법으로로 처리 할 수 있지만 다른 방법도 있습니다.

사용자 삽입 이미지

프로그램  속성에서 보안의 "ClickOnce"를 선택합니다.

사용자 삽입 이미지


그러면은 위 처럼 "app.mainfest"가 생기게 됩니다.
※ 이방법을 할 경우에는 프로그램에 아이콘에 방패 모양이 생기게 됩니다.
사용자 삽입 이미지


원래 기본값이 "asInvoker' 세팅된 부분을 "requireAdministrator" 로 변경하면 됩니다.

크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요




                    sourceFilePath = "업로드할 파일 경로 및 이름";

                    WebClient client = new WebClient();
                    client.Credentials = CredentialCache.DefaultCredentials;
                    client.UploadFile(@"URL 주소 ", "POST", sourceFilePath);
                    client.Dispose();
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[C#] 화면 캡쳐 하기

category 프로그램/C# 2018/12/10 15:22
WinForm 안의 Controler 를 캡쳐하기


            string FileName = DateTime.Now.ToString("yyyyMMdd_HHmmss");

            Bitmap bitmap = new Bitmap(width, height);
            this.panel1.DrawToBitmap(bitmap, new Rectangle(0, 0, width, height));
            bitmap.Save(FileName + ".png", ImageFormat.Png);




스크린틀 캡쳐하는 기능


            string FileName = DateTime.Now.ToString("yyyyMMdd_HHmmss");

           Bitmap bitmap = new Bitmap(넓이, this.높이);
            Graphics g = Graphics.FromImage(bitmap);
            g.CopyFromScreen(
                PointToScreen(new Point(시작 X좌표, 시작 Y 좌표)),
                new Point(0, 0),
                new Pint(넓이, 높이));
           bitmap.Save(FileName + ".png", ImageFormat.Png);

크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[C#] URL에서 XML 해석

category 프로그램/C# 2018/08/26 09:10
[C#] URL에서 XML 해석


            XmlDocument doc = new XmlDocument();

            doc.Load("URL주소");

            XmlNodeList forecastNodes = doc.SelectNodes("rss/channel/item");

            foreach (XmlNode node in forecastNodes)
            {
                if (node["category"] != null)
                {
                    if (node["category"].InnerText == "NOTICE")
                    {
                        string parseFormat = "ddd, dd MMM yyyy HH:mm:ss zzz";
                        DateTimeOffset dto = DateTimeOffset.ParseExact(node["pubDate"].InnerText, parseFormat, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
                        DateTextbox.Text = dto.ToString("yyyy년 MM월 dd일 (ddd) tt h시 mm분");
                        break;
                    }
                }
            }
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[C#] HTML 에서 Text만 추출

category 프로그램/C# 2018/07/26 09:08
        /// <summary>
        /// HTML 에서 Text만 추출한다.
        /// </summary>
        /// <param name="Html"></param>
        /// <returns></returns>
        public static string StripHtml(string Html)
        {
            string output = Html;

            output = System.Text.RegularExpressions.Regex.Replace(output, "<br>", Environment.NewLine);
            output = System.Text.RegularExpressions.Regex.Replace(output, "<br/>", Environment.NewLine);
            output = System.Text.RegularExpressions.Regex.Replace(output, "<br />", Environment.NewLine);

            //get rid of HTML tags
            output = System.Text.RegularExpressions.Regex.Replace(output, "<[^>]*>", string.Empty);
            //get rid of multiple blank lines
            output = System.Text.RegularExpressions.Regex.Replace(output, @"^\s*$\n", string.Empty, System.Text.RegularExpressions.RegexOptions.Multiline);

            output = System.Text.RegularExpressions.Regex.Replace(output, "&nbsp;", " ");
            return output;
        }
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

일반적으로 프로그램을 배포시 exe파일과 Application이 호출하는 dll파일은 동일한 폴더(또는 dll 파일이 System폴더에 위치)에 있어야 한다.

Microsoft 공식 배포처에서는 exe와 호출하는 라이브러리를 병합하는 프로그램을 배포중이지만, 컴파일러단에서 자체 해결할 수 있는 방법도 존재한다.

1. 사용하고자 하는 dll을 프로젝트에 참조

2. 해당 dll을 프로젝트 리소스에 추가

3. 리소스에 추가된 dll의 속성 -> 빌드작업 속성 값을 포함 리소스로 지정

4. 프로그램 진입점(Program.cs)에 코드를 아래와 같이 변경

5. 리소스에 dll 파일 포함하기

6. dll 파일 => 속성 => 빌드작업 ++ 포함리소스로 변경
사용자 삽입 이미지












using System.Reflection;
using System.IO;



/// <summary>
/// 해당 응용 프로그램의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main() {
    // 리소스 dll 취득
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly);
 
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}
 
// .NET 4.0 이상
static Assembly ResolveAssembly(object sender, ResolveEventArgs args) {
    Assembly thisAssembly = Assembly.GetExecutingAssembly();
    var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
 
    var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name));
    if (resources.Count() > 0) {
        string resourceName = resources.First();
        using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName)) {
            if (stream != null) {
                byte[] assembly = new byte[stream.Length];
                stream.Read(assembly, 0, assembly.Length);
                Console.WriteLine("Dll file load : " + resourceName);
                return Assembly.Load(assembly);
            }
        }
    }
    return null;
}
 
// LINQ가 지원되지 않는 .NET 버전
static Assembly ResolveAssembly(object sender, ResolveEventArgs args) {
    Assembly thisAssembly = Assembly.GetExecutingAssembly();
    string resourceName = null;
    string fileName = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
    foreach (string name in thisAssembly.GetManifestResourceNames()) {
        if (name.EndsWith(fileName)) {
            resourceName = name;
        }
    }
 
    if (resourceName != null) {
        using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName)) {
            if (stream != null) {
                byte[] assembly = new byte[stream.Length];
                stream.Read(assembly, 0, assembly.Length);
                Console.WriteLine("Dll file load : " + resourceName);
                return Assembly.Load(assembly);
            }
        }
    }
    return null;
}
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[C#] 원하는 URL 원하는 웹브라우저로 실행하기


WinForm을 만들여서 특정한 URL에 대해서 웹으로 접근해야 합니다.
내장현 브라우저를 사용해도 되지만 사용자가 사용하는 웹브라우저는 분명히 존재하거나 혹은 기본으로 설정해 놓은 값이 다르면은 츨력에 에러가 발생할때도 있습니다.
그래서 단순하게 OS에 기본 브라우저를 믿을것이 아니라 개발자가 직접 지정을 해서 실행을 하면은 좀 더 명확하게 원하는 웹브루어저로 웹에 접근을 할 수 있을것 같아서 찾아본것입니다.


                ProcessStartInfo cmd = new ProcessStartInfo();
                Process process = new Process();
                cmd.FileName = @"cmd";
                cmd.WindowStyle = ProcessWindowStyle.Hidden;             // cmd창이 숨겨지도록 하기
                cmd.CreateNoWindow = true;                               // cmd창을 띄우지 안도록 하기

                cmd.UseShellExecute = false;
                cmd.RedirectStandardOutput = true;        // cmd창에서 데이터를 가져오기
                cmd.RedirectStandardInput = true;          // cmd창으로 데이터 보내기
                cmd.RedirectStandardError = true;          // cmd창에서 오류 내용 가져오기

                process.EnableRaisingEvents = false;
                process.StartInfo = cmd;
                process.Start();
                process.StandardInput.Write(@"start explorer http://naver.com "+ Environment.NewLine); // 크롭
                //process.StandardInput.Write(@"start firefox http://naver.com "+ Environment.NewLine); // 파이어폭스
                //process.StandardInput.Write(@"start whale http://naver.com "+ Environment.NewLine); // 네이버 웨일
                //process.StandardInput.Write(@"start microsoft-edge:http://naver.com "+ Environment.NewLine); // 마이크로소프트 엣지
                //process.StandardInput.Write(@"start swing http://naver.com "+ Environment.NewLine);  // 이스트소프트 스윙

크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

Trudy
Trudy 님의 블로그
MENU
VISITOR 오늘347 / 전체462453