Visual Studio 2010에서 테스트하였습니다.


using System;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication2 {
    public class Win32 {
        #region 사운드 관련
        [DllImport("winmm.dll")]
        public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

        [DllImport("winmm.dll")]
        public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);

        public static void SetSoundVolume(int volume) {
            try {
                int newVolume = ((ushort.MaxValue / 10) * volume);
                uint newVolumeAllChannels = (((uint)newVolume & 0x0000ffff) | ((uint)newVolume << 16));
                waveOutSetVolume(IntPtr.Zero, newVolumeAllChannels);
            } catch (Exception) { }
        }

        public static int GetSoundVolume() {
            int value = 0;
            try {
                uint CurrVol = 0;
                waveOutGetVolume(IntPtr.Zero, out CurrVol);
                ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
                value = CalcVol / (ushort.MaxValue / 10);
            } catch (Exception) { }
            return value;
        }
        #endregion
    }
}

TrackBar 의 Value에 바로 SetSoundVolume() 또는 GetSoundVolume()으로 표현하면 됩니다.
TrackBar의 Minimum값은 0 , Maximum값은 10으로 셋팅하여 테스트 하였습니다.

출처 : http://www.geekpedia.com/tutorial176_Get-and-set-the-wave-sound-volume.html

 
저작자 표시
신고
출처 : http://wizcody.egloos.com/2471287
All the patterns:
0 MM/dd/yyyy 10/25/2007
1 dddd, dd MMMM yyyy Thursday, 25 October 2007
2 dddd, dd MMMM yyyy HH:mm Thursday, 25 October 2007 00:49
3 dddd, dd MMMM yyyy hh:mm tt Thursday, 25 October 2007 12:49 AM
4 dddd, dd MMMM yyyy H:mm Thursday, 25 October 2007 0:49
5 dddd, dd MMMM yyyy h:mm tt Thursday, 25 October 2007 12:49 AM
6 dddd, dd MMMM yyyy HH:mm:ss Thursday, 25 October 2007 00:49:38
7 MM/dd/yyyy HH:mm 10/25/2007 00:49
8 MM/dd/yyyy hh:mm tt 10/25/2007 12:49 AM
9 MM/dd/yyyy H:mm 10/25/2007 0:49
10 MM/dd/yyyy h:mm tt 10/25/2007 12:49 AM
11 MM/dd/yyyy HH:mm:ss 10/25/2007 00:49:38
12 MMMM dd October 25
13 MMMM dd October 25
14 yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK 2007-10-25T00:49:38.0395323-04:00
15 yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK 2007-10-25T00:49:38.0395323-04:00
16 ddd, dd MMM yyyy HH':'mm':'ss 'GMT' Thu, 25 Oct 2007 00:49:38 GMT
17 ddd, dd MMM yyyy HH':'mm':'ss 'GMT' Thu, 25 Oct 2007 00:49:38 GMT
18 yyyy'-'MM'-'dd'T'HH':'mm':'ss 2007-10-25T00:49:38
19 HH:mm 00:49
20 hh:mm tt 12:49 AM
21 H:mm 0:49
22 h:mm tt 12:49 AM
23 HH:mm:ss 00:49:38
24 yyyy'-'MM'-'dd HH':'mm':'ss'Z' 2007-10-25 00:49:38Z
25 dddd, dd MMMM yyyy HH:mm:ss Thursday, 25 October 2007 00:49:38
26 yyyy MMMM 2007 October
27 yyyy MMMM 2007 October

The patterns for DateTime.ToString ( 'd' ) :
0 MM/dd/yyyy 10/25/2007

The patterns for DateTime.ToString ( 'D' ) :
0 dddd, dd MMMM yyyy Thursday, 25 October 2007

The patterns for DateTime.ToString ( 'f' ) :
0 dddd, dd MMMM yyyy HH:mm Thursday, 25 October 2007 00:49
1 dddd, dd MMMM yyyy hh:mm tt Thursday, 25 October 2007 12:49 AM
2 dddd, dd MMMM yyyy H:mm Thursday, 25 October 2007 0:49
3 dddd, dd MMMM yyyy h:mm tt Thursday, 25 October 2007 12:49 AM

The patterns for DateTime.ToString ( 'F' ) :
0 dddd, dd MMMM yyyy HH:mm:ss Thursday, 25 October 2007 00:49:38

The patterns for DateTime.ToString ( 'g' ) :
0 MM/dd/yyyy HH:mm 10/25/2007 00:49
1 MM/dd/yyyy hh:mm tt 10/25/2007 12:49 AM
2 MM/dd/yyyy H:mm 10/25/2007 0:49
3 MM/dd/yyyy h:mm tt 10/25/2007 12:49 AM

The patterns for DateTime.ToString ( 'G' ) :
0 MM/dd/yyyy HH:mm:ss 10/25/2007 00:49:38

The patterns for DateTime.ToString ( 'm' ) :
0 MMMM dd October 25

The patterns for DateTime.ToString ( 'r' ) :
0 ddd, dd MMM yyyy HH':'mm':'ss 'GMT' Thu, 25 Oct 2007 00:49:38 GMT

The patterns for DateTime.ToString ( 's' ) :
0 yyyy'-'MM'-'dd'T'HH':'mm':'ss 2007-10-25T00:49:38

The patterns for DateTime.ToString ( 'u' ) :
0 yyyy'-'MM'-'dd HH':'mm':'ss'Z' 2007-10-25 00:49:38Z

The patterns for DateTime.ToString ( 'U' ) :
0 dddd, dd MMMM yyyy HH:mm:ss Thursday, 25 October 2007 00:49:38

The patterns for DateTime.ToString ( 'y' ) :
0 yyyy MMMM 2007 October
저작자 표시
신고


Java에서는 쓰는 로깅도구로 log4j를 많이들 쓰시는데 c#에두 log4net이라는 이름으로 나와 있군요.

1. http://logging.apache.org/log4net/index.html
   공식 사이트에서 다운 로드 받습니다.

2. 압축풀고 프로젝트에 log4net.dll을 참조시킵니다.

3. log4net.xml 이란 파일을 만들고 설정을 해야합니다.






  
  
    
      
      
    
  
  
    
    
    
    
        
    
    
      
    
  
  
    
    
    
  

날짜별로 로그가 쌓이도록 설정된 파일입니다. 하루에 한개의 파일 씩 생성됩니다. 물론 사이즈별로도 설정할 수가 있습니다만.. 자세한것은 아파치 문서를 참조바랍니다.

4. 실제 로그를 찍어 봐야겠지요?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using log4net;
using log4net.Config;

namespace Test {
    static class Program {
        /// 
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// 
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            //로그 설정파일 읽기
            XmlConfigurator.Configure(new System.IO.FileInfo("log4net.xml"));
            Application.Run(new MainForm());
        }
    }
}
위 코드처럼 최초 실행시 xml 설정파일을 한번 읽어줍니다. using도 빼먹지 마시구요
public class A{
      protected static readonly ILog logger = 
                 LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
      public A(){
            if (logger.IsDebugEnabled) logger.Debug("Log 찍기"); 
      }
}

이 후 클래스에서는 멤버변수로 logger를 선언만 해주시고 여러 메소드에서 로그를 찍으시면 됩니다.
저작자 표시
신고

이미지 컨트롤을 구현할 시에 배경을 투명하게 설정해야할 때가 있다.
PictureBox위에 Label이나 또다른 PictureBox를 올릴 때 사용하면 배경이 투명하게 설정된다.

아래 예제는 picBackImage라는 이름을 가진 PictureBox위에 Label과 PictureBox를 올린 후 쓴 예제이다.

label1.BackColor = Color.Transparent; 
label1.Parent = picBackImage;

pictureBox1.BackColor = Color.Transparent;
pictureBox1.Parent = picBackImage;

해당 컨트롤의 BackColor에 Color.Transparent을 적용하고
Parent를 배경 컨트롤을 지정하면 된다. form이나 panel도 마찬가지..
저작자 표시
신고

XML 직렬화하는 방법은 http://blog.suromind.com/78 참조

1. XML 예제

  
    admin
    Uaps+82i8GTmJBZbvbkI6Q==
    Administrator
  
  
    admin22
    Uaps+82i8GTmJBZbvbkI6Q==
    Administrator
  
  
    admin333
    Uaps+82i8GTmJBZbvbkI6Q==
    Operator
  
  
    admin777
    Uaps+82i8GTmJBZbvbkI6Q==
    Visitor
  

2. XML 로드
private static List _userInfoList;
/// 
        /// 사용자 정보 로드
        /// 
        /// 
        public static void reqLoadUserInfo(string path) {
            try {
                var s = new XmlSerializer(typeof(UserInfo));
                var fs = new FileStream(path, FileMode.Open);
                TextReader reader = new StreamReader(fs);
                fs.Position = 0;
                var c = (UserInfo)s.Deserialize(reader);
                fs.Close();
                reader.Dispose();

                _userInfoList = c.Items != null ? c.Items.ToList() : new List();
            } catch (Exception ex) {
                Console.WriteLine("Xml Load Error" + ex.ToString());
            }
        }

3. XML 저장
/// 
        /// 사용자 정보 저장
        /// 
        /// 
        public void reqStoreUserInfo(string fileName) {
            if (fileName == "") {
                fileName = Application.StartupPath + @"\Xml\UserInfo.xml";
            }
            var ca = new UserInfo();
            try {
                ca.Items = _userInfoList.ToArray();
                var s = new XmlSerializer(typeof(UserInfo));
                var fs = new FileStream(fileName, FileMode.Create);
                TextWriter writer = new StreamWriter(fs);
                fs.Position = 0;
                s.Serialize(writer, ca);
                fs.Close();
            } catch (Exception ex) {
                Console.WriteLine("XML Save Error : " + ex.ToString());
            }
        }

4. 사용
private void Test() {
            foreach (UserInfoUser item in 클래스명._userInfoList) {
                Console.WriteLine(item.Power);
                Console.WriteLine(item.UserId);
                Console.WriteLine(item.Passwd);
                Console.WriteLine(item.userNo);
            }
        }
저작자 표시
신고

어플리케이션 안에서 체크박스로 윈도우 시작시 자동 실행이라는 항목을 구현할 때가 있습니다.
아래처럼 레지스트리로 등록하여 사용합니다.
RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(
                                @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
          //레지스트리 등록 할때
          if (registryKey.GetValue("MyApp") == null) {
              registryKey.SetValue("MyApp", Application.ExecutablePath.ToString());
          }
          //.................................................................
          //레지스트리 삭제 할때
          if(registryKey.GetValue("MyApp") == null){
              registryKey.DeleteValue("MyApp", false);
          }

GetValue 메소드는 레지스트리에 등록이 안되어 있으면 null을 리턴해줍니다.
등록 및 삭제할때 위 코드로 적절하게 사용하면 되겠습니다.

확인은  registryKey.GetValueNames() 함수를 호출하면 등록된 시작프로그램의 이름을 배열로 리턴해주니 확인 하시던지
아니면 명령창에서 regedit치시고 레지스트리 편집기에서 본인의 어플리케이션 이름으로 검색해보시면 됩니다.

저작자 표시
신고
사용자 계정 컨트롤 때문에 관리자 권한 얻는 것이 중요해 졌습니다.
Visual Studio 2010에서 테스트 되었습니다.

1. 프로젝트의 속성 창의 보안탭으로 이동합니다.


2. 위처럼 ClickOnce를 체크해주면 아래처럼 app.manifest파일이 생성됩니다.
   그래고는 다시 위화면읜 ClickOnce를 해제해주세요.



3. app.manifest 파일을 오픈합니다.


친절하게 주석으로 달려 있습니다. 알맞게 바꾸어 주시면 되겠지요?
requireAdministrator 를 설정하면 될 듯 합니다.

저작자 표시
신고

참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa373208(v=vs.85).aspx

시간이 없어서 화면 꺼지지 안꺼지는지만 테스트를 해봤습니다.
이 부분은 처음 해보는거라 검색을 해도 원하는 자료가 많지 않네요..
마음에 드는 예제소스를 찾지 못해서..ㅜ

msdn사이트에서 참조하였으며 나머지는 테스트해보시길 바랍니다.

public class Win32 {
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
        [FlagsAttribute]
        public enum EXECUTION_STATE : uint {
            ES_AWAYMODE_REQUIRED = 0x00000040,
            ES_CONTINUOUS = 0x80000000,
            ES_DISPLAY_REQUIRED = 0x00000002,
            ES_SYSTEM_REQUIRED = 0x00000001
            // Legacy flag, should not be used.
            // ES_USER_PRESENT = 0x00000004
        }
        public static void PreventScreenAndSleep() {
            SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | 
                                    EXECUTION_STATE.ES_SYSTEM_REQUIRED | 
                                    EXECUTION_STATE.ES_AWAYMODE_REQUIRED | 
                                    EXECUTION_STATE.ES_DISPLAY_REQUIRED);
        }
        public static void AllowMonitorPowerdown() {
            Console.WriteLine(SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS));
        }
} 

1. c# 프로그램 시작시 Win32.PreventScreenAndSleep();  함수를 호출 하여 값을 셋팅합니다
   화면이 안꺼지는지 테스트 해보시고..

2. 프로그램 Close 될시 Win32.AllowMonitorPowerdown(); 함수를 호출하여 셋팅한 값을 초기화합니다.
   프로그램이 종료된 후에는 다시 화면이 꺼져야겠지요?

절전모드나 이런부분도 테스트를 해봐야겠네요~
저작자 표시
신고
XML을 직렬화 하여 사용하니 엄청 편하네요


xsd라는 툴을 통해서 xsd파일 및 cs 파일을 추출해 낼 수 있습니다.
1. 먼저 XML을 만드시고 아래처럼 xsd 명령을 치면 xsd파일이 생성 됩니다. (ex : xsd xxx.xml)
   단 xsd.exe가 환경변수에 없는지 일반 콘솔창에서는 안되니 Visual Studio 명령 프롬프트로 실행하세요..여기선 먹혀있는듯





2. xsd가 생성 되셨으면 그다음 명령으로 cs파일을 추출합니다.
  xsd xxx.xsd /c

3. xsd파일과 cs파일이 생성 되셨으면 xsd파일을 visual studio 프로젝트에 드래그앤 드랍합니다.
   cs파일은 알아서 연결되니 복사안하셔도 됩니다.

이러면 객체로 접근이 가능하니 편하게 쓸 수 있을겁니다

사용 방법은 아래 링크 참조
http://blog.suromind.com/86


저작자 표시
신고
기본적으로 생성되는 ComboBox는 클릭할 경우 내용을 수정할 수 있다.
이를 수정불가한 상태로 변경을 원할 경우 DropDown으로 바꾸면 된다.


또는

this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
저작자 표시
신고