동영상 자막 이름 맞추기, 일괄변경하기 (E.Z Subtitles V3)

프로그래밍/C# 2021. 9. 9. 00:39

애니메이션, TV쇼에서 자막과 파일이 따로 있으면 이름을 맞춰 줘야하는데 DarkNamer 같은 유틸리티로 할 수 있으나 조금 번거로워지는 경우가 있습니다. 그래서 동영상과 자막을 등록해두면 원클릭으로 매칭시켜주는 프로그램을 개발했습니다. 인터넷에 이와 같은 기능의 여러 프로그램이 배포되있긴 합니다만 바이러스가 있다던지.. GUI가 좀 마음에 안든다던지... 특히 정렬이 원하는 대로 안되는 경우(중요)가 있어서 직접 제작하게 됬습니다. 프로그램 장점 naturalSort 알고리즘이 적용되어 있어 윈도우 탐색기에선 제대로 정렬이 된걸로 보이는데 프로그램으로 옮기면 저렇게 정렬이 원하는 대로 안되는걸 최소화 합니다. (쉽게 말해서 윈도우 탐색기처럼 정렬을 시킨다 보면 됩니다.) 또한 이래도 정렬이 되지 않는..

Article Thumbnail
Excel을 통한 PC SMS 전송 프로그램을 개발했습니다

프로그래밍/C# 2021. 8. 23. 19:35

안녕하세요 파일입니다. 오늘은 제가 개발한 PC SMS 자동 전송 프로그램에 대해 소개해보려고 합니다. 업무 자동화를 위해 C#으로 개발되었으며 Excel 파일을 통해 특정 다수에게 SMS를 대량으로 간편하게 전송할 수 있습니다. What was used? 본 프로그램은 PushBullet 어플과 연동하여 제작되었습니다. PC에서 PushBullet ApI 서버에 API Key와 메세지를 전송할 전화번호, 내용을 전송(POST)하면 PushBullet 서버에서 API Key에 연결된, 해당되는 스마트폰에 설치된 PushBullet App에 신호를 보내고 PushBullet App이 스마트폰을 제어해 메세지를 보내는 구조로 구성되어 있습니다. 메세지를 보내는 과정에서 PushBullet이 단대단 암호화를 ..

Article Thumbnail
[C#] DataGridView Foucs 초기화 & 데이터 크기에 맞춰서 Column 자동 설정

프로그래밍/C# 2021. 7. 23. 19:21

데이터 크기에 맞춰서 Column 자동으로 확장시키기 /// /// 데이터 크기에 맞춰서 Column을 자동 정렬합니다. /// /// private void DataGridView_AutoResize(DataGridView dt) { for (int i = 0; i < dt.Columns.Count - 1; i++) { dt.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; } dt.Columns[dt.Columns.Count - 1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; for (int i = 0; i < dt.Columns.Count; i++) { int colw = dt.C..

Article Thumbnail
[C#] 대량의 엑셀 파일 빠르게 읽어오기

프로그래밍/C# 2021. 2. 24. 03:33

인터넷에 C#으로 엑셀 파일을 읽어와 DataGridView에 뿌리는 소스는 많으나 대부분 Com 오브젝트나 OpenXML을 이용한 방법들이고 방법도 이중 for문을 이용하는게 많아서 datagridview에 하나하나 뿌리면 속도가 끔찍합니다. 시간복잡도가 ${O(N^2)}$... 거기다가 DataGridView 자체도 엄청나게 느린데 만약 몇만라인이 되는 엑셀파일을 읽는다? 설명은 생략하기로 하고... 아주 쉽게 대량(큰)의 엑셀파일을 읽는 방법을 알아보겠습니다. Pre-Install Nuget Package에서 ExcelDataReader와 ExcelDataReader.DataSet을 설치합니다. Source Code string fname = ""; OpenFileDialog fdlg = new O..

Article Thumbnail
[C#] 자연스러운 정렬(natural sort) 사용하기

프로그래밍/C# 2020. 9. 16. 23:33

C#에서 정렬을 할때 (특히 리스트뷰) 원하는 대로 정렬이 안되는 경우가 있습니다. 여기서 원하는 대로 정렬이란 윈도우 탐색기에서 우리가 이름을 클릭해 정렬을 했을때 나오는 방식을 의미합니다. 리스트뷰에서 오름차순, 내림차순 옵션을 줘도 윈도우 탐색기랑 완벽히 똑같게 정렬이 되지 않는 경우가 많습니다. 또한 드래그 드롭으로 아이템을 추가할때도 따로 처리해주지 않으면 탐색기에서 보던 순서로 아이템이 추가되는게 아닌 뒤죽박죽 추가됩니다. 보통 shlwapi.dll 를 이용해 해결 합니다만.. 이를 사용하지 않고 윈도우 탐색기 수준의 정렬을 구현된 코드가 있어서 포스팅 합니다. public static int CompareNatural(string strA, string strB) { return Compar..

[C#] Selenium IEDRIVER이 작동하지 않을때 해결법

프로그래밍/C# 2020. 3. 23. 02:21

Selenium으로 IEDriver을 제어하면 일부 컴퓨터에서 프로그램 구동이 되지 않고 소리 소문 없이 꺼져 버리는 경우가 있었습니다. 닷넷 프레임워크를 지워보고 별짓 거리를 다해봤으나.. 원인이 다른데 있더군요 ^^;; 제 컴퓨터에선 잘 작동하던 게 다른 컴퓨터에 배포하면 안 켜지더라고요. 그래서 디버깅으로 확인해보니 IEDRIVER 쪽에서 오류가 나더라고요. 안되시는 분들은 아래 방법을 해보시길 바랍니다. 1. 익스플로러 톱니바퀴 - 인터넷 옵션 - 보안 탭으로 이동합니다 2. 아래의 보호 모드 사용에 체크합니다 인터넷뿐만 아니라 로컬 인트라넷, 신뢰할 수 있는 사이트, 제한된 사이트로 가셔서 보호 모드 사용에 모두 체크해주셔야 합니다. (중요) 3. 익스플로러 옵션에 가서 줌배율을 100%로 고정..

Article Thumbnail
[C#] 음성인식 검색기 만들기 0편. 구상

프로그래밍/C# 2020. 3. 23. 00:13

안녕하세요 파일입니다. 오랜만에 C# 프로그래밍을 할 기회가 생겼습니다. 아이디어가 들어왔다고 해도 좋은데요 ^^ 바로 음성인식 검색기입니다. 저희 아버지가 컴퓨터 세대가 아니셔서 독수리 타자를 하시는데 신문 검색이나 인터넷 검색 등을 할 때 타자가 느려서 너무 고생이라고 하십니다. 말로 하는게 타자 입력보다 빠를거 같다며음성인식으로 검색하면 좋을거 같다는 말을 듣고 바로 제작을 시행하였습니다. 우선 프로그램의 단계는 다음과 같이 구성했습니다.1. 음성인식을 한다 (라이브러리 이용)2. 음성인식한 값을 저장한다3. Selenium 을 이용하여 웹을 제어하거나 인터넷 창을 연다4. 중간중간 작업은 무료 TTS 엔진으로 읽어준다. 일단 들어보면 극히 간단해 보입니다. 저도 쉽게 될 줄 알았거든요.근데 직접 ..

Article Thumbnail
[C#] Selenium 프로그램 종료 후 종료되게 하기와 Close,Quit, Dispose 차이 알아보기

프로그래밍/C# 2020. 3. 21. 21:28

Selenium에서 종료하는 명령어는 총 3가지가 있습니다. driver.Dispose(); driver.Close(); driver.Quit(); 다 종료하다는 의미를 가지고 있는데 그 차이가 무엇인지 오늘 알아보고, 프로그램 종료 후 Selenium 서비스를 완전히 종료하는 법을 알려드리겠습니다. IWebDriver driver = new InternetExplorerDriver(); //선언 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { driver.Close(); } 우선 Selenium 종료를 위해 driver.Close()를 시행해봅니다. Selenium이 컨트롤 하고있는 웹 브라우저는 꺼지지만 다음과 같은 콘솔..

Article Thumbnail
[C#] NAUDIO 로 마이크 볼륨레벨 가져오기

프로그래밍/C# 2020. 3. 21. 13:44

var waveIn = new NAudio.Wave.WaveInEvent(); waveIn.DeviceNumber = 0; waveIn.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1); waveIn.DataAvailable += WaveIn_DataAvailable; waveIn.StartRecording(); private void WaveIn_DataAvailable(object sender, WaveInEventArgs e) { //if (isRecording) //{ // writer.Write(args.Buffer, 0, args.BytesRecorded); //} float max = 0; // interpret as 16 bit audio for (i..

Article Thumbnail
[C#] 구글 API를 이용한 마이크 음성인식

프로그래밍/C# 2020. 3. 20. 05:58

https://www.youtube.com/watch?v=186KstQ2yOk&feature=youtu.be https://www.youtube.com/watch?v=jHrIi71pGvs&t=15s