본문으로 바로가기

분류 전체보기 검색 결과

해당 글 135


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

댓글을 달아 주세요

[PHP] 라인 Notify 기능

category 프로그램/PHP 2018/11/10 15:14
API 토큰 생성 사이트 :

https://notify-bot.line.me/my/

위 사이트에서 토큰을 발행 합니다.

아래의 기능으로 PHP 파일을 작성해서 데몬에 올려도 되고, cron에 작업해도 됩니다.


        $APIURL = "https://notify-api.line.me/api/notify";
        $APIKey = "발행한 Key";

        if ($imgUrl === null) {
            $postData = [
                "message" => $msg
            ];
        } else {
            $postData = [
                "message" => $msg,
                "imageThumbnail" => $imgUrl,
                "imageFullsize" => $imgUrl
            ];
        }
        
        $fields = '';
        foreach ($postData as $dataKey => $dataValue) {
            $fields .= $dataKey . '=' . $dataValue . '&';
        }
        rtrim($fields, '&');


        $curlOptions = [
            CURLOPT_URL => $this->APIURL,
            CURLOPT_POST => 1,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_POSTFIELDS => $fields,
            CURLOPT_HTTPHEADER => [
                "authorization: Bearer ". $APIKey,
                "content-type: application/x-www-form-urlencoded"
            ],
        ];

        $curl = curl_init();
        curl_setopt_array($curl, $curlOptions);

        $response = curl_exec($curl);
        $err = curl_error($curl);
        curl_close($curl);
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[PHP] date, 날짜 포맷 설정

category 프로그램/PHP 2018/10/29 09:38
년도와 관련된 포멧

 문자  설명 
Y 4자리 숫자로 표시  1999, 2003
y 2자리 숫자로 표시 99, 03
o ISO-8601에 맞는 포맷으로 표시
(Y랑 같으나, ISO 규격에 맞는 W가 포함한 년을 사용)
1999, 2003
L 윤년 여부 윤년 : 1
아닐경우 : 0


월과 관련된 포맷

문자  설명
 F 달을 영어로 표시  January, December
M 3자리의 짧은 영어로 표시 Jan, Dec
m 0을 앞에 붙인 2자리 숫자  01, 12
n 월을 숫자로 표시 1, 12
t 해당하는 달의 수를 표시 28, 30, 31


일과 관련된 포맷

문자 설명
d 0을 앞에 붙인 2자리 숫자 01 ~ 31
j 일을 숫자로 표시 1 ~ 31 
z 1년의 n번째 날  0 ~ 365
S 날짜 뒤에 영어 2글자 suffix 추가 st, nd, rd or th (j와 잘 연동됨)
예: 1st, 2nd, 3rd, 4th


요일과 관련된 표현

문자 설명
D 요일을 영어 3글자로 표시 Mon, Sun
l
(소문자 L )
요일을 영어 단어로 표시 Monday, Sunday 
N ISO-8601에 맞는 표시
(PHP 5.1 이후)
1 (월요일) ~ 7 (일요일) 
W 요일을 숫자로 표시 0 (일요일) ~ 6 (토요일)


주와 관련된 표현

문자 설명
W ISO-8601 에 맞는 1년의 n번째 주, 월요일에 한 주가 시작
(PHP 4.1 이후)
42 (1년의 42번째 주)


시간과 관련된 표현

문자 설명
H 시간을 24시간 기준 0을 채운 2자리 숫자로 표시  00 ~ 23
G  시간을 24시간 기준 숫자로 표시 0 ~ 23
h 시간을 12시간 기준 0을 채운 2자리 숫자로 표시  01 ~ 12
g 시간을 12시간 기준 숫자로 표시  1 ~ 12
a 소문자 오전, 오후  am, pm
A 대문자 오전, 오후 AM, PM
i 분을 0을 앞에 붙인 2자리 숫자로 표시  00 ~ 59 
s 초를 0을 앞에 붙인 2자리 숫자로 표시 00 ~ 59
u 밀리초를 표시
(date()를 항상 000000을 리턴, DateTime::format()은 밀리초를 지원, PHP 5.2.2 이상)
밀리초를 표시 (date()를 항상 000000을 리턴, DateTime::format()은 밀리초를 지원, PHP 5.2.2 이상)

출처: http://unikys.tistory.com/272 [All-round programmer]
654321
B Swatch Internet Time
(하루를 1000으로 나눔)
000 ~ 999 


타임존'과 관련된 문자

문자 설명
e 타임존 ID (PHP 5.1.0 이상) UTC, GMC, Atlantic/Azores 
I
(대문자 i)
섬머타임 여부 섬머타임이면 1 아니면 0 
O Greenwich time(GMT)와 다른 시간 +0200
P GMT와 다른 시간에 :를 추가
(PHP 5.1.3 이상)
+02:00 
T 타임존 약자 EST, MDT 
Z GMT와의 차이를 초로 표시
UTC 서쪽은 음수
동쪽은 양수
-43200 ~ 50400


전체 양식

문자 설명
c ISO-8601 기준의 날짜 표시
(PHP 5 이상)
2004-02-12T15:19:21+00:00
r RFC 2822 기준 포맷 Thu, 21 Dec 2000 16:01:07 +0200
U Unix Epoch (January 1 1970 00:00:00 GMT) 로부터의 초 time() 참고
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

텔레그램

시놀로지 > 제이판 > 알림 > sms

"SMS 서비스 업체 추가" 버튼을 클릭해서 추가 합니다.

사용자 삽입 이미지



공급자 설명은 자신이 원하는 이름으로 변경을 합니다.
이후에 SMS URL에 다음과 같은 값을 입력 합니다.

https://api.telegram.org/bot자신의토큰/sendmessage?chat_id=채팅방번호&user=1&pass=2&phone=3&text=Hello World



사용자 삽입 이미지

매개변수를 위 사진과 같이 설정을 합니다.



사용자 삽입 이미지


사용자 이름, 패스워드, 기본전화를 적당히 숫자를 입력 합니다.

그러면은 이제 사용할 수 있습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

댓글을 달아 주세요

[Synology] Download 텔레그램 알람

category 컴퓨터/NAS 2018/10/21 15:18
1. 패키지센터에서 Download Station을  종료


2. ssh를 이용하여 쉘로 진입하여, Root권한을 획득한다.
$ sudo -i


3. Download Station 재부팅 간 설정파일을 초기화하지 않도록 변경하기 위해, 아래 명령어로 스크립트 파일을 수정
$ vi /var/packages/DownloadStation/scripts/start-stop-status



4. "rm ${PACKAGE_DIR}/etc/download/settings.json" 이라고 적혀있는 부분을 찾아서, 앞에 "#"을 붙여 주석처리해주고 저장
# rm ${PACKAGE_DIR}/etc/download/settings.json


5. 설정 변경을 위해 아래 명령어로 설정 파일 수정
   위 4번에서 경로를 찾아서 변경된 경로로 접근을 해도 됩니다.(업데이트에 따라서 경로가 바뀔수도 있습니다.)
$ vi /var/packages/DownloadStation/etc/download/settings.json


6. script-torrent-done-enabled, script-torrent-done-filename을 찾아서 아래와 같이 변경
"script-torrent-done-enabled": true,
"script-torrent-done-filename": "/volume1/@appstore/DownloadStation/bin/downloadComplete.sh",


7. postgresql의 계정정책 관련 설정을 변경
$ vi /etc/postgresql/pg_hba.conf


8. 아래와 같이 되어 있는 부분을 변경
#Before)    
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer map=pg_root
local   all             all                                     peer

#After)    
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                trust
local   all             all                                     peer


이걸 안하면, OS계정과 postgresql 계정이 다른 상황에서 원격 쿼리를 날리는 경우 아래와 같은 에러가 발생하기 때문이다.
psql: FATAL:  Peer authentication failed for user "postgres"


9. 설정을 변경했으니, postgresql을 재시작
$ /usr/syno/etc.defaults/rc.sysv/pgsql.sh restart


10. 이제 6번 과정에서 script-torrent-done-filename 부분에 입력했던 경로로 이동하여, 쉘 스크립트 파일 새성
$ vi /volume1/@appstore/DownloadStation/bin/downloadComplete.sh


downloadComplete.sh 스크립트내용)    
#!/bin/sh
 
TOKEN='BOT Token 입력'
URL='https://api.telegram.org/bot'$TOKEN
MSG_URL=$URL'/sendMessage?disable_notification=true&chat_id='
CHAT_ID='CHAT ID 입력'
 
function send_message {
  res=$(/usr/bin/curl --data-urlencode "text=[MYNAS] $TR_TORRENT_NAME download complete." "$MSG_URL"$CHAT_ID"&")
}
 
send_message
/bin/psql -U postgres -d download -c "DELETE FROM Download_queue WHERE status IN ('5','7','8')"


11. 파일 권한을 755 로 설정
chmod 755 /volume1/@appstore/DownloadStation/bin/downloadComplete.sh


12. 패키지센터에서 DownloadStation 시작


13. DownloadStation에서 다운로드 완료 후 개설한 텔레그램 방에 "[MYNAS] 토렌트명 download complete" 라고 메시지가 오고, Downloas Station 에서 목록이 사라지면은 성공

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

댓글을 달아 주세요

Trudy
Trudy 님의 블로그
MENU
VISITOR 오늘345 / 전체462451