본문 바로가기

Window Programming/VB

비베로 제어판, 바탕화면 관리

1. 비베로 제어판 관리

'VB의 Shell함수를 하용하여 윈도우의 DLL을 직접실행하여 윈도우의 제어판을 호출할수
'할수있다
'먼저 폼하나를 만들고 거기에 listbox를 하나 추가한다음
'아래의 소스를 작성하여 실행하여 본다

Option Explicit

Private Sub Form_Load()
 
List1.AddItem " 시스탬등록정보"
List1.AddItem " 새하드웨어 추가 마법사"
List1.AddItem " 프린터추가 마법사"
List1.AddItem " 프로그램 추가/삭제 마법사"
List1.AddItem " 윈도우 설치 마법사"
List1.AddItem " 시동디스크작성 마법사 "
List1.AddItem " 날짜/시간"
List1.AddItem " 표준시간"
List1.AddItem " DISPLAY 정보"
List1.AddItem " 화면보호기"
List1.AddItem " 화면배색"
List1.AddItem " 화면설정"
List1.AddItem " 마우스등록정보"
List1.AddItem " 키보드등록정보"
List1.AddItem " 프린터 폴더"
List1.AddItem " 폰트 폴더"
List1.AddItem " 모뎀설치 마법사"
List1.AddItem " 오디오"
List1.AddItem " 비디오"
List1.AddItem " 미디"
List1.AddItem " CD"
List1.AddItem " 멀티미디어 고급"
List1.AddItem " 소리 설정"
List1.AddItem " 네트워크 구성"
List1.AddItem " 프로그램 연결"
List1.AddItem " 암호변경"
List1.AddItem " 국가별 설정"
List1.AddItem " 국가별 설정 숫자"
List1.AddItem " 국가별 설정 통화"
List1.AddItem " 국가별 설정 시간"
List1.AddItem " 국가별 설정 날짜"
End Sub

Private Sub List1_DblClick()
Select Case List1.ListIndex
    Case 0
      ' 제어판폴더를 연다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @0", vbNormalFocus
    Case 1
              ' 새 하드웨어 추가마법사 원도우를 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1", vbNormalFocus
       
    Case 2
              ' 프린터 추가마법사 원도우를 띄운다..
        Shell "rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter", vbNormalFocus
    Case 3
              ' 프로그램 추가/삭제 등록정보원도우에서 설치/삭제 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1", vbNormalFocus
    Case 4
              ' 프로그램 추가/삭제 등록정보원도우에서 Windows설치 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2", vbNormalFocus
    Case 5
              ' 프로그램 추가/삭제 등록정보원도우에서 시동디스크 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3", vbNormalFocus
    Case 6
              ' 날짜/시간 등록정보원도우에서 날짜및 시간 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,2", vbNormalFocus
    Case 7
              ' 날짜/시간 등록정보원도우에서 표준 시간 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1", vbNormalFocus
    Case 8
              ' 디스플레이등록정보에서 배경화면원도우를 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0", vbNormalFocus
    Case 9
              ' 디스플레이등록정보에서 화면보호기원도우를 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1", vbNormalFocus
    Case 10
              ' 디스플레이등록정보에서 화면배색원도우를 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2", vbNormalFocus
    Case 11
              ' 디스플레이등록정보에서 설정원도우를 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3", vbNormalFocus
    Case 12
              ' 마우스 등록정보 원도우에서 단추 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL main.cpl @0", vbNormalFocus
    Case 13
              ' 키보드 등록정보 원도우에서 속도 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL main.cpl @1", vbNormalFocus
    Case 14
              ' 프린터 폴더를 연다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL main.cpl @2", vbNormalFocus
    Case 15
              ' 폰트 폴더를 연다.
        Shell "rundll32.exe shell32.dll,Control_RunDLL main.cpl @3", vbNormalFocus
    Case 16
              ' 새 모뎀설치 원도우를 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add", vbNormalFocus
    Case 17
              ' 멀티미디어 등록 정보 원도우에서 오디오 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0", vbNormalFocus
    Case 18
              ' 멀티미디어 등록 정보 원도우에서 비디오 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1", vbNormalFocus
    Case 19
              ' 멀티미디어 등록 정보 원도우에서 MIDI tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2", vbNormalFocus
    Case 20
              ' 멀티미디어 등록 정보 원도우에서 CD 음악 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3", vbNormalFocus
    Case 21
              ' 멀티미디어 등록 정보 원도우에서 고급 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4", vbNormalFocus
    Case 22
              ' 소리 등록 정보 원도우를 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1", vbNormalFocus
    Case 23
              ' 네트워크 원도우에서 네트워크 구성 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl", vbNormalFocus
    Case 24
              ' 연결 프로그램찾기 원도우를 띄운다..
        Shell "rundll32.exe shell32.dll,OpenAs_RunDLL readme.tdt", vbNormalFocus
    Case 25
              ' 암호등록정보 원도우에서 암호변경 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL password.cpl", vbNormalFocus
    Case 26
              ' 국가별 설정 등록정보에서 국가별 설정 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0", vbNormalFocus
    Case 27
              ' 국가별 설정 등록정보에서 숫자 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1", vbNormalFocus
    Case 28
              ' 국가별 설정 등록정보에서 통화 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2", vbNormalFocus
    Case 29
              ' 국가별 설정 등록정보에서 시간 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3", vbNormalFocus
    Case 30
              ' 국가별 설정 등록정보에서 날짜 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4", vbNormalFocus
    Case 31
              ' 시스템 등록 정보 원도우에서 일반 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0", vbNormalFocus
    Case 32
              ' 시스템 등록 정보 원도우에서 장치관리자 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1", vbNormalFocus
    Case 33
              ' 시스템 등록 정보 원도우에서 하드웨어 구성파일 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2", vbNormalFocus
    Case 34
              ' 시스템 등록 정보 원도우에서 성능 tab을 띄운다..
        Shell "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3", vbNormalFocus
End Select
End Sub

 

2.비베로 바탕화면 바꾸기
'// 바탕화면을 바꾸기 위한 API함수 선언
private Declare Function SystemParametersInfo Lib _
"user32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam As Long, _
ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long

'아래 부분이 함수 호출을 하는 부분입니다
'아래의 filename부분에 BMP파일의 경로와 파일의 풀네임을 적어 주시면 됩니다
'이함수는 bmp만을 지원하는거 같습니다

SystemParametersInfo 20, 0, "filename", 1

3. 비베 잘알려지지 않은 기능 paramarray
' 비베의 함수를 쓸때 이런 생각을 한번씩은 해볼수도 있읍니다
' 함수에 넘기는 파라메터들의 갯수를 늘렸다 줄였다 할수 없을까?
' 이런기능을 지원하는 paramarray가 있지만 잘알려지지 않은것
' 같습니다
' 간단히 예제를 보이면
' 먼저 폼에 command button을 하나를 추가한다음
' 아래의 코드를 입력해 보십시오

Private Sub Command1_Click()
 '함수에 7개의 파라메터를 넣는다
 UnKnowParam 2, 4, 6, 8, 10, 12, 14
End Sub

Function UnKnowParam(ParamArray OtherArgs())

' 파라메터의 갯수를 채크해서 메시지로 보여줍니다
 MsgBox UBound(OtherArgs) + 1 & "개의 파라메터가 넘겨졌읍니다"

'배열에 들어있는 파라메터의 갯수를 차례로 보여줍니다
 For i = 0 To UBound(OtherArgs)
  MsgBox i + 1 & "번째 파리메터는 :" & OtherArgs(i)
 Next
 
' OtherArgs 배열에는 다음 값들이 할당됩니다.
' OtherArgs(0) = 2
' OtherArgs(1) = 4
' OtherArgs(2) = 6
' OtherArgs(3) = 8
' OtherArgs(4) = 10
' OtherArgs(5) = 12
' OtherArgs(6) = 14
End Function

4.비베로 둥근 윈도우 만들기
'vb를 쓰면 네모난 윈도우 밖에 보지 못했을것이다
'그던데 노턴의 크래쉬가드나 다른 프로그램들을 보면 네모난 모양이 아니구
'둥굴거나 방패 모양을 보았던 적이 있지않나요?
'여기서는 둥근 윈도우를 만드는 간단한 방법을 소개합니다
'아래의 코드들을 추가해보면 재미있는 윈도우가 된다
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Private Sub Form_Load()
Dim hRgn, rtn As Long
'//이미지 파일을 로딩한다
'//아래의 이미지는 에바의 레이의 이미지파일이다
'//얼굴과 팔다리등 전신의 그림인데
'// 실행해 보면 얼굴만 동그랗게 나온다
Me.Picture = LoadPicture("c:\backup\e-drive\vb\vbtest\둥군윈도우\rei.gif")

'// 윈도우즈의 구역 설정
hRgn = CreateEllipticRgn(5, 25, 200, 220)

'// 윈도우 영역을 원형태로 새로 설정한다.
rtn = SetWindowRgn(Me.hWnd, hRgn, True)

End Sub

마우스 오른쪽버튼을 눌러서 그림 저장(save as)메뉴를 선택해 다운을 받으싶시오

그리고 LoadPicture("c:\backup\e-drive\vb\vbtest\둥군윈도우\rei.gif") 이부분을

그림파일이 위치한 경로로 바꾸어 주십시오

5.비베로 드라이브 타입 알아내기
'//이건 질문 받았던것중에서 필요하다 싶은 것을 적어 보았읍니다
'//시스템에 각각 드라이브 타입이 어떤건지 알려고 할때씁니다
'//예를 들어 시디롬이 붙은 드라이브명을 알려고 한다던지 이런때 씁니다
'//아래 소스는 전체 드라이브를 다체크하여 보여주는 소스입니다
'//그런데 하드드라이브중 FAT32로된 드라이브를 인식을 못하는 군요
'//윈98에서는 아직 테스트 못해봤읍니다
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Const DRIVE_RAMDISK = 6
Private Const DRIVE_CDROM = 5
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOVABLE = 2

Private Sub Form_Load()
Dim DriveType, i As Long
Dim DriveName As String
For i = 65 To 90
    DriveName = Chr(i) & ":"
    DriveType = GetDriveType(DriveName)
    Select Case DriveType
        Case 0
            MsgBox Chr(i) & ": 드라이브는 형태를 확인 할수 없읍니다"
        Case 1
            MsgBox Chr(i) & ": 드라이브는 존재하지 않습니다"
        Case DRIVE_RAMDISK
            MsgBox Chr(i) & ": 드라이브는 램드라이브입니다"
        Case DRIVE_CDROM
            MsgBox Chr(i) & ": 드라이브는 CDROM드라이브입니다"
        Case DRIVE_REMOTE
            MsgBox Chr(i) & ": 드라이브는 네트웍드라이브입니다"
        Case DRIVE_FIXED
            MsgBox Chr(i) & ": 드라이브는 하드드라이브입니다"
        Case DRIVE_REMOVABLE
            MsgBox Chr(i) & ": 드라이브는 플로피드라이브입니다"
    End Select
Next
End Sub
[출처] -VB- 소스|작성자 유치낙타