[C#] 폰트 설치 여부 체크해서 설정 도와주기

CSharp
class FontLibraryClass { public class FontLibrary { private string FontsFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Fonts); private static FontLibrary inst = new FontLibrary(); public PrivateFontCollection privateFont = new PrivateFontCollection(); /// <summary> /// /// </summary> public static FontFamily[] Families { get { return inst.privateFont.Families; } } /// <summary> /// /// </summary> public FontLibrary() { AddFontFromNanumgothic(); } /// <summary> /// 리소스에 포함된 폰트 파일을 로딩 /// </summary> private void AddFontFromMemory() { /* List<byte[]> fonts = new List<byte[]>(); fonts.Add(Properties.Resources.NanumGothic); fonts.Add(Properties.Resources.NanumGothicBold); foreach (byte[] FontData in fonts) { IntPtr fontBuffer = Marshal.AllocCoTaskMem(FontData.Length); Marshal.Copy(FontData, 0, fontBuffer, FontData.Length); privateFont.AddMemoryFont(fontBuffer, FontData.Length); } */ } /// <summary> /// 폰트 파일을 추가함. /// </summary> private void AddFontFromNanumgothic() { privateFont.AddFontFile(FontsFolder + @"\\NANUMGOTHIC.TTF"); } } /// <summary> /// 폰트 존재 여부 체크 /// </summary> public void FontInstallCheck() { bool FontInstallBoolNanum = false; // FontFamily[] fonts =…
Read More
[C#] 관리자 권한으로 실행하기

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

CSharp
해당 작업은 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'…
Read More

[MySQL] 상태가 sleep 인것 정리하기

Database
#!/bin/sh NOW=$(date +"%m-%d-%Y") FILE="/root/sleep_processes.$NOW.txt" /var/lib/mysql-5.1.40/bin/mysql -uroot --password='password' -e "select concat('KILL ',id,';') into outfile '/tmp/sleep_processes.txt' from information_schema.processlist where State = 'User sleep'" /var/lib/mysql-5.1.40/bin/mysql -uroot --password='password' -e "source /tmp/sleep_processes.txt;" if [ -s "/tmp/sleep_processes.txt" ]; then cp /tmp/sleep_processes.txt $FILE fi rm -f /tmp/sleep_processes.txt https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=81951&page=2
Read More

도메인 하나 버렸습니다….

일반
도메인 하나 버렸습니다....   가진 도메인인이 그렇게 많지는 않지만 용도에 맞게 구분을 할려다가 오히려 복잡하고 하나도 통일되지 않아서 도메인 1개는 이용기간이 남긴 하지만 그냥 버렸습니다. 그래도 누군가 가져가는것은 싫어서 일단 공사중으로 변경을 해 놓고 있습니다.     DNS를 관리할 수 있으니 이제는 서브도메인으로 이름을 관리하면 될것 같습니다. 도메인 1개로 여러가지 서비스를 통합하고 서로 연동되게 만들고 있어서 1개의 도메인이 편한편이기도 합니다.   아직 공개 하지 못하지만 차곡 차곡 제가 생각하는 기능들이 정리되어서 서로 결합(? 합체) 하면서 이뤄지기 때문에 단독서비스 처럼 움직이기 위해서 합칠 이유가 있을것 같습니다.
Read More

[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