본문 바로가기

[ Program ]/C#88

keyboard hooking keyhook class public class KeyHook { [DllImport("user32.dll")] static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc callback, IntPtr hInstance, uint threadId); [DllImport("user32.dll")] static extern bool UnhookWindowsHookEx(IntPtr hInstance); [DllImport("user32.dll")] static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam); [DllImport("kernel32.. 2023. 9. 19.
[c#] 현재값과 가장 작으면서 근접하는 5의 배수 가져오기 int tempint = 27; double result = 0; if (tempint % 5 != 0) { result = Math.Floor(double.Parse(tempint.ToString()) / 5) * 5; } MessageBox.Show(result.ToString()); 5로나눠서 소수점을 버리고 다시 5를 곱하면된다. 2022. 11. 11.
[c#] Nlog 사용법 c# 에서 nlog 사용법을 올린다. ( https://nlog-project.org/ ) nuget 에서 nlog 검색해서 설치하면 되는데 설치하기 귀찬은사람은 첨부 파일을 받아서 참조만 추가해주면된다. 현재 최신버전인 5.0.4 버전이다. 참조된후 아래 코드로 테스트 해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 8.. 2022. 9. 23.
네트워크 연결확인방법 > using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp13 { public partial class connectcheck : Form { public connectcheck() { InitializeComponent(); } private void button1_C.. 2022. 3. 20.
반복문도는동안 컨트롤텍스트 바꾸기(현재까지 실행된내용 라벨에 업데이트) 출처 - http://stackoverflow.com/questions/3431369/label-does-not-change-value-inside-a-while-loop private void button1_Click(object sender, RoutedEventArgs e) { int i = 0; while (i 2015. 7. 22.
c# 크로스쓰레딩 - 다른쓰레드의 컨트롤 값변경 출처 - http://www.soulfree.net/734 휴우... 제목이 엄청길다. 내 블로그 이외에도 이 내용으로 많은 자료가 이미 많이 올라와있지만 프로그램 할때마다 필요한데 내 머리는 외워주지를 않아서 결국 포스팅 해버리게 되었다.... 매번 소스찾기가 귀찮아서.ㅠㅠ 이 코드가 필요한 경우를 예를 들면, 데이터를 송수신 하는 다중 스레드 프로그램이 있는데 데이터를 수신하는 스레드에서 프로그램 화면을 갱신하려고 하면 바로 이 글 제목같은 문제가 발생한다. 그래서 대리자를 통하여 스레드간의 자원을 공유할 수 있도록 해주어야 한다. 간단한 코드이지만 이상하게도 외어지지가 않는다ㅠㅠ 코드 설명을 하고자 쓰는 글이 아닌지라... 혹시 설명이 필요하신 분은 댓글 달아주시길... * WPF의 경우의 예 us.. 2015. 7. 22.
C#에서 주소창 url 가져오기 system32 폴더에서 shDocVw.dll 을 어셈블리 참조하고... using SHDocVw; foreach (InternetExplorer ie in new ShellWindowsClass()) { textBox1.Items.Add(ie.LocationURL); } 2015. 3. 13.
Windows Forms에서 웹서버로 파일 업로드 하기 출처 - http://walnuttree.tistory.com/99 윈폼에서 웹서버로 파일을 업로드 하는 방법이다 (물론 FTP로 바로 올리는 방법도 있다) 지금 설명하는 방법으로 파일을 올리기 위해선 두가지 작업(윈폼, 웹)을 해줘야 한다. 먼저, 윈폼에선 다음과 같이 코드를 작성한다. OpenFileDialog dlg = new OpenFileDialog(); dlg.Multiselect = false; dlg.Filter = "Microsoft Excel|*.jpg"; dlg.ShowDialog(); System.Net.WebClient wcClient = new System.Net.WebClient(); wcClient.UploadFile(웹상에서 파일 업로드를 구현한 페이지 주소, "POST",.. 2015. 2. 25.
문자열마지막구분자 없애기 출처 - http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=9&MAEULNO=5&no=891&page=10 - 질문 - string chvalue=""; chvalue="110-111-112-"; 2014. 12. 1.
Rollback for bulk copy (트랜젝션걸린 대량인서트) 출처 - http://stackoverflow.com/questions/2216254/rollback-for-bulk-copy using (SqlTransaction transaction = destinationConnection.BeginTransaction()) { using (SqlBulkCopy bulkCopy = new SqlBulkCopy( destinationConnection, SqlBulkCopyOptions.KeepIdentity, transaction)) { bulkCopy.BatchSize = 10; bulkCopy.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns"; try { bulkCopy.WriteToServer(reader).. 2014. 11. 14.
루프를 돌면서 DataTable의 DataRow를 삭제할때 출처 - http://devswaf.blogspot.kr/2009/11/%EB%A3%A8%ED%94%84%EB%A5%BC-%EB%8F%8C%EB%A9%B4%EC%84%9C-datatable%EC%9D%98-datarow%EB%A5%BC-%EC%82%AD%EC%A0%9C%ED%95%A0%EB%95%8C.html 루프를 돌면서 DataTable의 DataRow를 삭제할때 for 와 같은 루프문으로 DataTable.Rows 컬렉션에서 DataTable.Rows.Remove()를 실행하면 루프과정에서 컬렉션이 변경되므로 원하지 않는 이상한 결과를 초래한다. 이때는 DataRow.Delete()를 실행하고 루프문이 끝난 후 DataTable.AcceptChanges()를 호출하면 된다. 아래는 MSDN에서 발췌.. 2014. 11. 10.
DataTable 에서 원하는 Row만 골라내기 DataTable sampleDT = new DataTable(); sampleDT .DefaultView.RowFilter = " column1 'A' "; DataTable result = sampleDT .DefaultView.ToTable(); return result; 2014. 11. 5.
방법: Windows Forms DataGridView 컨트롤에서 선택한 셀, 행 및 열 가져오기 출처 - http://msdn.microsoft.com/ko-kr/library/x8x9zk5a(v=vs.110).aspx 방법: Windows Forms DataGridView 컨트롤에서 선택한 셀, 행 및 열 가져오기 .NET Framework 4.5 다른 버전 Visual Studio 2010 .NET Framework 3.0 .NET Framework 3.5 .NET Framework 2.0 이 항목은 아직 평가되지 않았습니다.- 이 항목 평가 SelectedCells , SelectedRows 및 SelectedColumns 중 해당하는 속성을 사용하여 DataGridView 컨트롤에서 선택한 셀, 행 또는 열을 가져올 수 있습니다. 다음 절차에서는 선택한 셀을 가져온 다음 이 셀의 행 및 열 .. 2014. 8. 22.
c++ DLL을 C#에서 사용해보자 ( 클래스 마샬링 ) http://blog.danggun.net/799 클래스 마샬링을 할일이 없엇 신경을 안쓰다가 요번에 스카이프 api나 제가 직접 마샬링 해볼까 해서 클래스 마샬링을 정리해 보았습니다. 근데 왜이렇게 자료가 없지? 겨우 찾은것이 비주얼C++ 팀블로그인데....네...영어입니다 ㅡ.-; (참고 : Visual C++ Team Blog - Inheriting From a Native C++ Class in C#) 일단 변환방법이 마음에 들지가 않아서 위글에 있는 내용을 그대로 사용하여 만들고 자료를 더 찾는다면 파트2로 돌아오 겠습니다 ㅎㅎㅎㅎ 그전에 이 글은 크게 2부분으로 나누어 설명할 예정입니다. 어찌됬건 프로그래머라면 일단 샘플부터 만들고 생각해야 하지 않겠습니까? 1. C++ DLL 만들기C#에서 .. 2014. 7. 28.
[C#] c++ DLL을 C#에서 사용해보자 ( 함수 마샬링 ) http://blog.danggun.net/16 머......피치못할 사정으로 c++로 작성된 dll을 써야된다면.....명복을 크크크크크크크 하지만 어차피 c++ dll은 여러모로 쓸모가 많다보니 재판매(어이)를 어느정도 고려 할겸, 역어셈에도 닷넷보다는 안전해 보여서 dll은 c++로 만들어 씁니다. 근데 이렇게 딴 언어에서 만든 dll을 쓰기위해서 마샬링이 필요합니다. ㅡ,.ㅡ;;; 일종의 컨버전이라고 생각하면 됩니다. (쉽게 생각하라고 컨버전이라고 한거지 전혀 다른넘 입니다. ㅡ.-; 컨버전은 프로그램자체를 다른 언어에 맞게 변경시키는것을 의미하고. 마샬링은 다른언어에서도 읽을수 있게 해주는 작업입니다. dll자체는 변하지 않는다!) 마샬링하는 방법은 여러가지가 있고 dll불럳다 쓰는 방식도 여러.. 2014. 7. 28.
C#에서의 Flag attribute를 사용하는 Enum 출처 - http://shibas.tistory.com/5 각 비트 마다 enum이 하나씩 들어가게끔 설정하여 bit array를 사용하듯이 enum을 사용할 수 있다. 예를 들어, 아래와 같이 enum을 설정한 경우 enum TestEnum { Red - 0001(1) Green - 0010(2) Blue - 0100(4) } 0101은 아래와 Red & Blue로 해석할 수 있으므로 아래처럼 처리할 수 있다. 0001 // Red & 0100 // Blue ------- 0101 // Red & Blue 즉 'val이 Red이거나 val이 Blue라면?' 즉, 'if(val == Red || val == Blue)'를 표현하고 싶을 때 아래와 같이 사용 가능하다. if( (val & Red == Te.. 2013. 1. 24.
Component.DesignMode Property 출처 - http://jakard.tistory.com/29 serControl을 상속받아서 어떤 컨트롤을 만들때, 때로는 Control이 Load되는 시점에서 DB로 부터 Control에 속한 ComboBox나 Grid를 초기화하는 코드들을 집어 넣어야 할 때가 있습니다. 그래서 OnLoad 함수를 오버로드하거나 이벤트 대리자 함수에서 위의 과정들을 구현하게 됩니다. 이제 UserControl이 만들어졌으니 마르고 닳도록 써먹어야지 하면서 Form위에도 올리고, 다른 UserControl에도 올립니다. 실행을 해보니 정상적으로 동작을 합니다. 하지만 해당 UserControl을 올린 Form의 Layout을 수정할 일이 생겨서 다시 Form의 디자이너 창을 띄웁니다. 그런데 이게 왠일? 이런 에러메세지.. 2012. 12. 10.
C++로 만든 DLL 을 C#에서 사용하기 출처 - http://dal2iya.tistory.com/136 이곳저곳에서 본 내용을 짜집기 해서 만든 내용입니다. 밑에 참고했던 내용들을 달아놨으니, 혹시 필요하시면 찾아가 보시기 바랍니다. 1. C++로 코드 작성하기 1) 코드 바로 작성하기 예제 #include extern "C" { __declspec(dllexport) void DisplayHelloFromDLL() { // 여기에 내용내용내용 printf ("Hello from DLL !\n"); } } 2) 선언과 정의를 따로 분리하실경우, 선언은 다음과 같이 extern "C" __declspec(dllimport) void Start_DebugView(); 2. C++ 프로젝트 Property Setting 먼저 , C++로 만든 프로.. 2012. 12. 5.
도움되는글들 메모리 --------------------------------------------------------------------------------- 가상 메모리의 기본 개념 닷넷 가비지 컬렉션 다시 보기 - Part I닷넷 가비지 컬렉션 다시 보기–Part II 닷넷 가비지 컬렉션 다시 보기 - Part III닷넷 가비지 컬렉션 다시 보기 - Part IV닷넷 가비지 컬렉션 다시 보기 - Part V닷넷 가비지 컬렉션 다시 보기 - Part VIFinalizer 사용 시 주의 사항들Dispose 패턴 (기초)Dispose 패턴 (고급) 문자열 ---------------------------------------------------------------------------------문자열 이야기.. 2012. 11. 30.
vsto2003(office2003) vsto2007(office2007) 버전에 상관없이 실행되는(Combine) add-in 프로젝트 만들기 vs2008버전에서 제작된 내용입니다.(.net framework3.5 사용) 여러문서를 찾아 봤지만 실제 해답을 찾을수가 없어서 고민끝에 2003과 2007버전을 두개 동시에 설치되게 만들면 어차피 본인버전에 맞는 add-in 만 실행되므로 그렇게 해보자고 해서 만든 내용입니다. 처음 설정부터 설치파일구성까지 전부 담고자 노력했습니다. 저같은 초보분들에게 도움이 됐으면 좋겠습니다^^ 이름이나 경로등에 영향을 받는 부분이 많으니 이름도 그대로 하시는게 좋습니다~ 시작전 vs의 상단의 메뉴중에 옵션창에 들어가서 프로젝트 업그레이드의 설치된 offfic 버전으로 항상 업그레이드에 체크를 빼준다. 새프로젝트로 일단 엑셀2003 추가기능을 만들어준다. 위와같이 프로젝트가 생성완료 되었다. 위와같이 네임스페이스를.. 2012. 11. 21.
GDI+와 더블버퍼링 @NSYS Blog.. | 앤시스 http://blog.naver.com/ansysda/13985586 출처 : http://www.gosu.net/GosuWeb/Article-detail.aspx?ArticleCode=955 원문에도 적혀있지만 간단하지만 남들이 잘 알려주지 않는 코드이다. GDI+을 사용한다면 유용할 것이 틀림없다. --------------------------------------------------------------------------------------------------------- 어떤 언어를 배웠든 간에, 화면에 연속적으로 뭔가를 그려보려는 시도해 봤던 사람은 '어라 이거 왜 화면이 깜박거리냐..'라는 생각을 한 번쯤은 해 봤을 것이다. 이 아티클은 그런 현상을.. 2012. 9. 18.
[C# SOURCE]텍스트 박스로 숫자 또는 일부의 문자 밖에 입력할 수 없게 하려면 텍스트 박스로 숫자 또는 일부의 문자 밖에 입력할 수 없게 하려면 , System.Windows.Forms.TextBox를 계승한 커스텀 콘트롤을 사용하는 방법이 가장 간편합니다. KeyPress 이벤트등에서 입력을 규제하고 있는 샘플을 잘 보입니다만, 그것으로는「붙여」의 대응을 할 수 없습니다. 적어도, context menu로부터의[붙이기] (은)는, 키의 입력으로부터 배제할 수 있는 것이 아닙니다. 이것을 막기 위해서 TextChanged 이벤트와 병용 하고 있는 샘플도 있습니다만, 그것으로는 어른거림이 생깁니다. 어느 디바이스로 입력되려고, 일원으로 배제할 수 있는 기구로 하는 것이 편합니다. 그렇다고 해서 입력 체크를 하지 않아도 좋은 것은 아닙니다. 그러한 의미에서도, 「최종 체크에 일임 한다.. 2012. 9. 18.
[C#자료구조]Linked-List 카페 > C# private C# | esct33 http://cafe.naver.com/privatecs/9 자료구조의 기본이라고 할수 있는 링크리스트를 c#으로 구현했습니다. 비교적 간단한 자료구조이지만 정적 자료구조인 배열과 비교한다면 링크리스트는 동적으로 크기를 늘리거나 줄일수 있는 자료구조 입니다. public class ListElement { private string data; private ListElement nextData; public ListElement(string str) { data=str; nextData=null; } public ListElement next() { return nextData; } public bool equals(string str) { return .. 2012. 9. 18.
[C#]랜덤파일명 생성하는 방법 GOM Life Style Blog... Snowboard, C#, Life Styler | 곰보더 http://blog.naver.com/gboarder/90019930049 Written by 김영일(Youngil Kim), C#.NET Developer 프로그램으로 임시파일을 생성하는 경우 해당 폴더에 이미 존재하는 파일과 파일명이 겹치지 않도록 하는 경우가 필요합니다. 이를 .NET Framework 1.1에서는 System.IO.Path 클래스의 GetTempFileName 메소드로 제공을 하고 있습니다. 그러나, 이 메소드는 파일명을 생성하는 과정에서 실제 그 파일을 임시폴더에 0사이즈로 생성하는 문제점이 있습니다. 이는 아마도 임시폴더에 있는 다른 파일과 확실하게 중복되는 경우를 예방하기 위.. 2012. 9. 18.
HELLO WORLD로 보는 C#의 세계 SSEY's Blog | 쎄이 http://blog.naver.com/tear230/100006940429 전형적인 "Hello World" 프로그램을 작성한다. 이 프로그램을 통해서 C#과 닷넷 프레임워크의 다양한 특성들을 들여다 볼 것이다. 1. Hello World-초보자 public class HelloWorld { public static void Main() { System.Console.WriteLine("HELLO WORLD"); } } 2. 조금만 고쳐보자 using System; public class HelloWorld { public static void Main() { Console.WriteLine("HELLO WORLD"); } } 3. Command Line Arguments.. 2012. 9. 18.
GridView에서 엑셀로 저장하기 용의 꼬리보다 뱀의 머리가 낫다 .. | 사고뭉치 http://blog.naver.com/mininuke7303/50021676904 ArrayList arr; protected void btnSaveToExcel_Click(object sender, EventArgs e) { // Disable paging gvTranslationRequestList.AllowPaging = false; //LoadGridData(); gvTranslationRequestList.DataBind(); // exluded columns arraylist ArrayList defaultExcludedColumns = new ArrayList(); // Always exclude these columns defaultExc.. 2012. 9. 18.
C#과 API sadmong님의 블로그 | 바람처럼 http://blog.naver.com/sadmong/70001809582 C# and API by Ajit Mungale 1. 소개 API(Application Programming Interface)는 프로세서와 더불어 프로그램 인터페이스를 구성하는 명령들의 집합이다. 외부 프로시져의 세트들은 보통 Microsoft 의 Windows 그 자체를 만든다. Windows API 는 선언할 수 있고, 다시 그것을 사용할 수 있는 수천개의 함수와 구조체 그리고, 상수들로 이루어져 있다. 그러나, 이러한 함수들은 C언어로 작성되어져 있고, 그래서 사용되어지기 전에 반드시 선언되어져야 한다. DLL 프로시져들의 선언은 더욱 복잡해질 수 있다. 특히 C# 에서는 비주얼베이직 .. 2012. 9. 18.
.NET Framework의 강력한 이름 및 보안 BIT Inside | 코아란 http://blog.naver.com/hch0808/100013757279 .NET Framework의 강력한 이름 및 보안 Keith Brown DevelopMentor 요약 강력한 이름은 어셈블리를 고유하게 식별하여 전역 어셈블리 캐시에 배치되도록 하는 데 필요합니다. 또한 Microsoft .NET Framework 공용 언어 런타임에서 버전 지정 시스템을 사용하는 데도 필요합니다. 강력한 이름에 대한 자세한 정보와 사용 방법을 살펴봅니다(10페이지/인쇄 페이지 기준). 목차 GUID에서 공개 키까지 RSA 및 디지털 서명 CLR 및 공개 키 강력한 이름 및 확인 강력한 이름 및 .NET 보안 정책 공개 키 및 버전 지정 서명 연기를 사용하여 노출 줄이기 개발 팀 보.. 2012. 9. 18.
StringBuilder 클래스 SYSCLUB | 곰돌이 http://blog.naver.com/koreaotn/10015248300 Method 설명 Append() 현재 문자열 뒤에 새로운 문자열을 추가 합니다. Insert() 현재 문자열 사이에 문자열을 추가 합니다. Remove() 문자를 현재 문자열에서 삭제 합니다. Replace() 문자열에서 특정 문자/문자열을 찾아 교체 합니다. ToString() 문자열의 내용을 System.String 객체로 형 변환. [String 클래스와 StringBuilder 클래스의 성능차이-예제] 1. String 클래스 사용 using System; class Class1 { static void Main(string[] args) { long start = DateTime.Now.Tic.. 2012. 9. 18.
프로그레스바와 지금까지 걸린 시간을 동시에 표시해보자 wanna be의 소프트웨어 팩토리. | 완전초짜 http://blog.naver.com/netscout82/20036856643 이번 글은 BackGroundWorker와 System.Threading.Timer를 이용해서, 작업을 진행하면서, 프로그레스바와 지금까지 걸린 시간을 동시에 표시하는 것이다. (VS.NET 2005와 C#2.0으로 작업) 내가 잘 못해서 그런걸 수도 있지만, 이게 쉬워보이지만, 결코 그렇지가 않다-_-;; 3시간의 삽질끝에 나온 결과물이니 우스워도 적당히 이해해주시길-_-;;; 이런 장면 되겠다. 우선, 코드보자. 13 public partial class Form1 : Form 14 { 15 public event EventHandler IncrementProgress; .. 2012. 9. 18.