[C#] 화면 캡쳐 하기

CSharp
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);
Read More
c# 에러 출력 예외 설정

c# 에러 출력 예외 설정

CSharp
VS -> 디버그 -> 창 -> 예외설정 -> ContextSwitchDeadlock 체크 해제 << 에러내용 >> CLR에서 60초 동안 COM 컨텍스트 0x1a18b8에서 COM 컨텍스트 0x1a1a28(으)로 전환하지 못했습니다.  대상 컨텍스트/아파트를 소유하는 스레드가 펌프 대기를 수행하지 않거나, Windows 메시지를 펌프하지 않고 매우 긴 실행 작업을 처리하고 있는 것 같습니다. 이러한 상황은 대개 성능에 부정적인 영향을 주며 응용 프로그램이 응답하지 않거나 시간이 흐름에 따라 메모리 사용이 증가하는 문제로 이어질 수도 있습니다. 이 문제를 방지하려면 모든 STA(Single Threaded Apartment) 스레드가 펌프 대기 기본 형식(예: CoWaitForMultipleHandles)을 사용하고 긴 실행 작업 동안 지속적으로 메시지를 펌프해야 합니다
Read More

ssh 접속 이력, 로그인 시도, 해킹 시도 확인

Linux
ssh 로그인 시도(해킹 시도) 확인하는 스크립트 입니다. 이 명령어는 로그인을 시도한 IP 목록만 결과 값으로 출력됩니다. ls /var/log/secure | xargs grep -E "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" -o | sort | uniq 이 명령어는 어떤 아이디로 언제 어떤 IP로 로그인을 시도한 결과까지 모두 보여줍니다. last -f /var/log/btmp | more
Read More

[PHP] 라인 Notify 기능

PHP
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);
Read More

[PHP] date, 날짜 포맷 설정

PHP
년도와 관련된 포멧  문자  설명  예 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,…
Read More

Winform 환경설정 세팅 저장 장소

CSharp
Windows Application을 개발 할 때, 현재 상태의 설정값(사용자ID, 비밀번호, 포지션 등등... )을 저장하여 다음번 Load 시 다시 이용하려고 할 경우,   보통 Settings.settings에 키를 설정 하고 Properties.Settings.Default.세팅명 을 프로퍼티로 사용합니다.   Settings.settings에 아무런 설정이 없을 경우엔 app.config에 특별한 내용이 들어가지 않지만, Settings.settings에 세팅을 하나라도 설정하는 경우 app.config에   <configSections>     <sectionGroup name="userSettings" ...> ...   <userSettings>     <......Properties.Settings> ... #biki1983omi @netdoor!   등의 태그가 자동으로 포함됩니다.   로드시 Properties.Settings.Default.세팅명 을 이용하고, 저장시 Properties.Settings.Default.Save(); 메서드를 이용하면 됩니다.   Settings.settings에 설정할 시 '범위'는 '사용자'로 하여야 런타임시 저장할 수 있습니다. 런타임 시 ....exe.config에 값이 저장되는 것이 아니라,  C:\Users\사용자\AppData 하위의 해당 App 폴더에 값이 저장됩니다.   기본적으로 숨겨진 폴더이긴 해도, 비밀번호 등은 암호화 처리를 하는 것이 좋겠지요. ^^   가끔 네임스페이스 충돌로 인해 Full Namespace 즉, 네임스페이스.Properties.Settings.Default.세팅명 로 사용해야 하는 경우도 있으니 참고하세요.  …
Read More
[Synlogy] SMS 알람을 텔레그램으로 받기

[Synlogy] SMS 알람을 텔레그램으로 받기

NAS
텔레그램 시놀로지 > 제이판 > 알림 > sms "SMS 서비스 업체 추가" 버튼을 클릭해서 추가 합니다. 공급자 설명은 자신이 원하는 이름으로 변경을 합니다.이후에 SMS URL에 다음과 같은 값을 입력 합니다. https://api.telegram.org/bot자신의토큰/sendmessage?chat_id=채팅방번호&user=1&pass=2&phone=3&text=Hello World 매개변수를 위 사진과 같이 설정을 합니다. 사용자 이름, 패스워드, 기본전화를 적당히 숫자를 입력 합니다. 그러면은 이제 사용할 수 있습니다.
Read More

[Synology] DownloadStation 완료시 텔레그램으로 알림 전송

NAS
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 계정이…
Read More

[BAT] bat 파일 도메인 NSLOOKUP

Windows
[code bat]@echo off@rem KT  168.126.63.1  168.126.63.2 @rem SK브로드밴드  210.94.0.73  221.139.13.130 @rem 두루넷  210.117.65.1  210.117.65.2 @rem 신비로  202.30.143.11  203.30.143.11 @rem 데이콤  164.124.101.2  203.248.240.31 @rem 드림라인  210.181.1.24  210.181.4.25 @rem 파워콤  164.124.107.9  203.248.252.2 set domain=조회할 도메인set list=168.126.63.1, 210.94.0.73, 210.117.65.1, 202.30.143.11, 164.124.101.2, 210.181.1.24, 164.124.107.9for %%i in (%list%) do (    echo # %%i ################################    nslookup %domain% %%i)pause[/code]
Read More

소스보관

CSharp
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using System.Drawing.Imaging; using System.Net; using System.Collections; using System.Threading; using System.IO; using MySql.Data.MySqlClient; namespace FnbfoodNaverSmartstoreCapture { public partial class MainForm : Form { private string ConnectDB = "Server=211.233.11.93; Port=3306;Database=fnbfood;Uid=fnbfood;Pwd=@fnbfood!;Charset=utf8;convert zero datetime=True;"; private MySqlCommand command; private MySqlDataReader DBResult; public MainForm() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; this.DoubleBuffered = true; } private void MainForm_Load(object sender, EventArgs e) { DateTimeCheck(); } /// <summary> /// 웹을 실제 실행해야 되는지 체크하도록 함. /// </summary> private void DateTimeCheck() { string Week = System.DateTime.Now.ToString("ddd"); int TimeHM = Convert.ToInt32(System.DateTime.Now.ToString("Hmm")); switch (Week) { case "월": case "화": case "수": case "목": case "금": if (TimeHM > 750 && TimeHM < 1810) { this.Activate(); this.Show(); this.WindowState = FormWindowState.Normal; WebLoad(); } else {…
Read More

[Windows] 시작 프로그램 위치

Windows
윈도우 탐색기에서 아래의 줄을 붙여 넣으시면은 시작 프로그램 폴더로 이동을 합니다. "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp" 시작 > 실행에서 다음의 명령어를 넣어도 됩니다. "shell:startup"
Read More

[C#] URL에서 XML 해석

CSharp
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; } } }
Read More