Posted on 2011/09/28 01:05 Url http://www.svkor.com/blog/16
Filed Under 프로그래밍/Visual Basic

2011/09/28 01:05 2011/09/28 01:05

Posted on 2011/09/28 01:03 Url http://www.svkor.com/blog/15
Filed Under 프로그래밍/Visual Basic

'-- 함수명 : Rand
'-- 제작자 : 축복(q_death) 
'-- 홈페이지 : http://www.svkor.com/ 
'-- 이메일 : q_death@naver.com 
'-- 
'-- Randomize 호출 후 사용 권장

Private Function Rand(ByVal Min As Long, _
                        ByVal Max As Long) As Long
     Rand = CLng(Rnd * (Max - Min)) + Min
End Function
2011/09/28 01:03 2011/09/28 01:03

Posted on 2011/09/28 01:02 Url http://www.svkor.com/blog/14
Filed Under 프로그래밍/Visual Basic


'-- 함수명 : ToBinary 
'-- 제작자 : 축복(q_death) 
'-- 홈페이지 : http://www.svkor.com/ 
'-- 이메일 : q_death@naver.com 
'-- 
'-- 사용법 : ex) MsgBox ToBinary(10&) '-- 10에 대한 2진수의 수를 구한다. 

Private Function ToBinary(ByVal Number As Long) As String
     If Number <= 0& Then
          Exit Function
     End If
    
     If Number = 1& Then
          ToBinary = 1&
          Exit Function
     End If
    
     Dim ValBinary As String
     Dim Val1 As Long
     Dim Val2 As Long
     Dim Val3 As Long
    
     Val3 = Number
    
     Do While Val1 <> 1&
          Val1 = Val3 \ 2&
          Val2 = Val3 Mod 2&
          Val3 = Val1
          
          If Val2 = 0 Then
               ValBinary = "0" & ValBinary
          Else
               ValBinary = "1" & ValBinary
          End If
     Loop
    
     ToBinary = "1" & ValBinary
End Function
2011/09/28 01:02 2011/09/28 01:02

Posted on 2011/09/28 00:59 Url http://www.svkor.com/blog/13
Filed Under 프로그래밍/Visual Basic

[VB6] WinHttp를 이용한 FileDownload 소스
'-- 제작자 : 축복(q_death) @ Naver 
'-- 홈페이지 : http://www.svkor.com 
'-- E-Mail : q_death@naver.com 
'-- 
'-- 함수명 : FileDownload 
'-- 파라미터 
'-- - strURL     : 웹상의 파일 주소 
'-- - strLocalPath : 파일이 저장될 경로 
'-- - isBinary     : 파일의 형식이 바이너리인지 여부 

Option Explicit

Public Function FileDownload(ByRef strURL As String, _
                             ByRef Optional strLocalPath As String = vbNullString, _
                             ByRef Optional isBinary As Boolean =True) As Boolean
    
On Error Goto OnErr

     Dim oWinHttp As Object
     Set oWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
    
     With oWinHttp
          .Open "GET", strURL, False
          .Send
         
          If LenB(strLocalPath) = 0& Then
               Dim Temp As String
               Temp = .getresponseheader("Content-Disposition")
              
               Dim Pos As Long
               Pos = InStr(Temp, "filename=""")
              
               If Pos = 0& Then
                    Goto OnErr
               End If
              
               Pos = Pos + 10&
              
               Temp = Mid$(Temp, Pos, Len(Temp) - Pos)
               Temp = Replace$(Temp, "_", " ")
              
               Dim FileName As String
               FileName = Temp
              
               strLocalPath = App.Path & "\Incoming\" & FileName
              
               If LenB(Dir$(App.Path & "\Incoming", vbDirectory)) = 0& Then
                    MkDir App.Path & "\Incoming"
               End If
          End If
         
          Dim Buf() As Byte
         
          If isBinary Then
               Buf = .ResponseBody
          Else
               Buf = .ResponseText
          End If
         
          Open strLocalPath For Binary Access Write As #1
               Put #1, , Buf
          Close #1
     End With
    
     If Not oWinHttp Is Nothing Then
          Set oWinHttp = Nothing
     End If
    
     FileDownload = True
    
Exit Function
OnErr:

     If Err Then
          If Err.Number = 0& Then
               MsgBox "파일을 다운로드 하는 중, 알 수 없는 오류가 발생하였습니다.", vbExclamation Or vbApplicationModal
          Else
               MsgBox "파일을 다운로드 하는 중, 오류가 발생하였습니다. (" & Err.Number & ")" & vbCrLf & _
                         Error(Err.Number), vbExclamation Or vbApplicationModal
          End If
         
          Err.Clear
     End If

End Function
2011/09/28 00:59 2011/09/28 00:59

Posted on 2011/09/28 00:51 Url http://www.svkor.com/blog/12
Filed Under 프로그래밍/Visual Basic



CopyMemory API는 함수명을 직역하면 "메모리 복사하기"이다.

해석처럼 메모리를 복사하는 기능을 한다.

다음 코드를 살펴보자.
'-- 배열 초기화 
Dim Buf(9) As Byte
Buf(0) = 10&
Buf(1) = 11&
Buf(2) = 12&
Buf(3) = 13&
Buf(4) = 14&
Buf(5) = 15&
Buf(6) = 16&
Buf(7) = 17&
Buf(8) = 18&
Buf(9) = 19&

'-- 복사될 배열 생성 및 영역 재할당 
Dim Buf2() As Byte
ReDim Buf2(UBound(Buf))

'-- 배열 복사 
Dim i As Long
For i = 0& To UBound(Buf)
     Buf2(i) = Buf(i)
Next i

위의 코드는 단순히 배열을 복사하는 역할을 한다.
하지만, 위의 코드에서 배열을 복사하기 위해 영역 재할당을 하고, For문을 이용했다.
좀 복잡하지 않는가?
그럴때 필요한 것이 바로 CopyMemory API이다. (RtlMoveMemory 로도 사용이 가능하다.)

선언은 다음과 같이 한다.
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
    ByRef Destination As Any, _
    ByRef Source AsAny As Variant, _
    ByVal Length As Long _
)

사용 방법은 Call CopyMemory(목적지변수, 소스변수, 복사길이) 와 같다.
목적지 변수와 소스 변수에는 어떤 것이든 올 수 있다.
그럼 위의 코드를 변환해보자.
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
    ByRef Destination As Any, _
    ByRef Source AsAny As Variant, _
    ByVal Length As Long _
)

'-- 배열 초기화 
Dim Buf(9) As Byte
Buf(0) = 10&
Buf(1) = 11&
Buf(2) = 12&
Buf(3) = 13&
Buf(4) = 14&
Buf(5) = 15&
Buf(6) = 16&
Buf(7) = 17&
Buf(8) = 18&
Buf(9) = 19&

'-- 복사될 배열 생성 및 영역 재할당 
Dim Buf2() As Byte
ReDim Buf2(UBound(Buf))

Call CopyMemory(Buf2(0), Buf(0), UBound(Buf) + 1&)

복사하는 코드 4줄이 API 선언부와 호출부, 단 2줄로 압축되었다.
또한 For문을 사용하는것보다 속도도 빠르다.

또, CopyMemory 함수는 Byte 형과 Long 형끼리의 변환도 가능하다.
(참고: Long 형은 4Byte가 모여서 이루는 데이터 형)
다음 코드를 참고해보자.
'-- 4 Bytes To 1 Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
    ByRef Destination As Any, _
    ByRef Source AsAny As Variant, _
    ByVal Length As Long _
)

'-- 배열 선언 및 할당, 변수 선언 
Dim Buf(3) As Byte, Temp As Long
Buf(0) = 0&
Buf(1) = 4&
Buf(2) = 0&
Buf(3) = 0&

Call CopyMemory(Temp, Buf(0), 4&)
MsgBox Temp

결과는 [1024]가 출력될 것이다.
'-- 1 Long To 4 Bytes
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
    ByRef Destination As Any, _
    ByRef Source AsAny As Variant, _
    ByVal Length As Long _
)

'-- 배열 선언 및 할당, 변수 선언 
Dim Buf(3) As Byte, Temp As Long
Temp = 1024&

Call CopyMemory(Buf(0), Temp, 4&)
MsgBox Buf(0) & " " & Buf(1) & " " & Buf(2) & " " & Buf(3)

결과는 [0 4 0 0]이 출력될 것이다.
2011/09/28 00:51 2011/09/28 00:51

Posted on 2011/09/28 00:46 Url http://www.svkor.com/blog/11
Filed Under 프로그래밍/Visual Basic


VB6에서 파일 또는 폴더의 존재 여부를 확인하는 방법은 여러가지가 있다.
그 중에서 간단한 두 가지 정도만 예제 함수를 통해 알아보자.

① 파일 존재 여부 확인(폴더 존재 여부는 확인 불가능)
Private Function ExistFile(ByRef Path As String) As Long

On Error Goto OnErr

     If FileLen(Path) Then
          ExistFile = 1&
     Else
          ExistFile = 0&
     End If

Exit Function
OnErr:

End Function

② 파일 / 폴더 존재 여부 확인

 Private Function ExistFile(ByRef FilePath As String) As Long

     If LenB(Dir$(FilePath)) Then
          ExistFile = 1&
     Else
          ExistFile = 0&
     End If

End Function

Private Function ExistFolder(ByRef FolderPath As String) As Long

     If LenB(Dir$(FolderPath, vbDirectory)) Then
          ExistFolder = 1&
     Else
          ExistFolder = 0&
     End If

End Function
2011/09/28 00:46 2011/09/28 00:46

Posted on 2011/09/28 00:44 Url http://www.svkor.com/blog/10
Filed Under 프로그래밍/Visual Basic




* ----------------------------------------- *
        네이트온 쪽지테러 차단기
* ----------------------------------------- *

[ 제작자 ]

 축복(q_death) @ Naver

 홈페이지 : http://www.svkor.com

 이메일 : q_death@naver.com



[ 제작언어 ]

 Visual Basic 6.0



[ 동작OS ]

 Windows XP (x86, x64)

 Windows Vista (x86, x64)

 Windows 7 (x86, x64) 등



[ 알림 ]

 사용 중 발생하는 프로그램 상 오류는

 홈페이지 또는 이메일로 문의해주시면

 수정하겠습니다.
2011/09/28 00:44 2011/09/28 00:44

Posted on 2011/09/28 00:30 Url http://www.svkor.com/blog/8
Filed Under 프로그래밍/Visual Basic

VB6의 몇가지 숫자와 관련된 내장 함수을 알아보자.

'-- Abs : 절대값을 구함
'-- Abs(숫자)
MsgBox Abs(-1234&) '-- 1234
MsgBox Abs(1234&) '-- 1234

'-- Sgn : 숫자의 상태를 구함 (양, 음, 0)
'-- Sgn(숫자)
'-- 양이면 1, 음이면 -1, 0이면 0
MsgBox Sgn(-1234&) '-- -1
MsgBox Sgn(0&) '-- 0
MsgBox Sgn(1234&) '-- 1

'-- Sqr : 제곱근을 구함
'-- Sqr(숫자)
MsgBox Sqr(4&) '-- 2

'-- Int : 숫자의 정수 부분을 구함
'-- Int(숫자)
MsgBox Int(4.5) '-- 4
MsgBox Int(-4.5) '-- -5

'-- Fix : 숫자의 정수 부분을 구함
'-- Fix(숫자)
MsgBox Fix(4.5) '-- 4
MsgBox Fix(-4.5) '-- -4

'-- Exp : e의 n승 값을 구함
'-- Exp(숫자)
MsgBox Exp(1&) '-- 2.71828182845905 
MsgBox Exp(2&) '-- 7.38905609893065 

'-- Log : 자연로그 값을 구함
'-- Log(숫자)
MsgBox Log(Exp(2&)) '-- 2

'-- Sin : 삼각함수 Sin 값을 구함
'-- Sin(호도법에 의한 각)
MsgBox Sin(3.141593 * 30& /180&) '-- 0.500000050000006 

'-- Cos : 삼각함수 Cos 값을 구함
'-- Cos(호도법에 의한 각)
MsgBox Cos(3.141593 * 60& /180&) '-- 0.499999899999984 

'-- Tan : 삼각함수 Tan 값을 구함
'-- Tan(호도법에 의한 각)
MsgBox Tan(3.141593 * 45& /180&) '-- 1.00000017320512

'-- Hex : 16진수로 변환
'-- (Hex$로 쓰는 것이 처리가 좀 더 빠름)
'-- Hex$(숫자)
MsgBox Hex$(10&) '-- "A"

'-- Oct : 8진수로 변환
'-- (Oct$로 쓰는 것이 처리가 좀 더 빠름)
'-- Oct$(숫자)
MsgBox Oct$(10&) '-- 12

'-- Rnd : 난수를 반환
'-- Randomize 함수로 초기화 한 후에 사용
Randomize
MsgBox CLng(Rnd * 9&) + 1& '-- 1~10 사이의 난수

2011/09/28 00:30 2011/09/28 00:30

Posted on 2011/09/28 00:00 Url http://www.svkor.com/blog/7
Filed Under 프로그래밍/Visual Basic


VB6의 몇가지 문자열과 관련된 내장 함수을 알아보자.

'-- Asc : 문자를 아스키코드로 변환
'-- Asc(문자)
MsgBox Asc("A") '-- 65

'-- Chr : 아스키코드를 문자로 변환
'-- (Chr$로 사용하는 것이 처리가 좀 더 빠름)
'-- Chr$(숫자)
MsgBox Chr$(65) '-- "A"

'-- Left : 문자열의 왼쪽부터 n자를 가져옴
'-- (Left$로 사용하는 것이 처리가 좀 더 빠름)
'-- Left$(문자열, 길이)
MsgBox Left$("안녕하세요", 2&) '-- "안녕"

'-- Right : 문자열의 오른쪽부터 n자를 가져옴
'-- (Right$로 사용하는 것이 처리가 좀 더 빠름)
'-- Right$(문자열, 길이)
MsgBox Right$("안녕하세요", 2&) '-- "세요"

'-- Mid : 문자열의 시작 위치와 길이를 지정하여 그만큼의 문자열을 가져옴
'-- (Mid$로 사용하는 것이 처리가 좀 더 빠름)
'-- Mid$(문자열, 시작 위치[, 길이])
'-- 길이를 생략하면 시작 위치부터 문자열의 끝까지
MsgBox Mid$("안녕하세요", 2&, 3&) '-- "녕하세"
MsgBox Mid$("안녕하세요", 3&) '-- "하세요"

'-- Len : 문자열의 길이(문자수)를 가져옴
'-- Len(문자열)
MsgBox Len("안녕하세요") '-- 5

'-- LenB : 문자열의 바이트수를 가져옴
'-- LenB(문자열)
'-- VB6은 유니코드이므로 영어도 2바이트로 처리함
'-- 정확한 바이트 수를 가져오려면 StrConv 함수를 통하거나, API를 이용해야 한다.
MsgBox Len("안녕하세요abcde") '-- 10

'-- InStr : 문자열에 문자가 포함되었으면 해당 위치를 가져오고, 없으면 0을 반환함
'-- InStr([시작 위치, ]문자열, 찾을 문자)
'-- 시작 위치를 생략하면 처음부터 찾음
MsgBox InStr("안녕하세요", "녕") '-- 2
MsgBox InStr(1&, "안녕하세요", "녕") '-- 2
MsgBox InStr(2&, "안녕하세요안녕하세요", "녕") '-- 7

'-- LTrim : 문자열 왼쪽의 공백을 없앰
'-- (LTrim$으로 사용하는 것이 처리가 좀 더 빠름)
'-- LTrim$(문자열)
MsgBox LTrim$("   안녕하세요 ") '-- "안녕하세요 "

'-- RTrim : 문자열 오른쪽의 공백을 없앰
'-- (RTrim$으로 사용하는 것이 처리가 좀 더 빠름)
'-- RTrim$(문자열)
MsgBox RTrim$("   안녕하세요 ") '-- "   안녕하세요"

'-- Trim : 문자열 왼쪽, 오른쪽의 공백을 없앰
'-- (Trim$으로 사용하는 것이 처리가 좀 더 빠름)
'-- Trim$(문자열)
MsgBox Trim$("   안녕하세요 ") '-- "안녕하세요"

'-- Str : 숫자를 문자형식으로 바꿈. (= CStr)
'-- Str(숫자), CStr(숫자)
MsgBox Str(1234&) '-- "1234"

'-- Val : 문자열에 있는 숫자를 Double 형으로 반환함
'-- (단, 숫자로 시작해야하며, 숫자가 아닌 문자가 나오면 거기까지'-- 만 반환. 없으면 0)
'-- Val(문자열)
MsgBox Val("가나다") '-- 0
MsgBox Val("-1234.123") '-- -1234.123
MsgBox Val("1234") '-- 1234

'-- Space : n개의 공백을 반환함
'-- (Space$로 사용하는 것이 처리가 좀 더 빠름)
'-- Space$(숫자)
MsgBox Space(5&) '-- "     "

'-- String : 지정한 문자를 n회 반복함
'-- (String$으로 사용하는 것이 처리가 좀 더 빠름)
'-- String$(숫자, 문자)
MsgBox String(5&, "A") '-- "AAAAA"

'-- UCase : 문자열의 모든 영어를 대문자로 변경
'-- (UCase$로 사용하는 것이 처리가 좀 더 빠름)
'-- UCase$(문자열)
MsgBox UCase$("AbCdE") '-- "ABCDE"

'-- LCase : 문자열의 모든 영어를 소문자로 변경
'-- (LCase$로 사용하는 것이 처리가 좀 더 빠름)
'-- LCase$(문자열)
MsgBox LCase$("AbCdE") '-- "abcde"
2011/09/28 00:00 2011/09/28 00:00

Posted on 2011/09/26 20:07 Url http://www.svkor.com/blog/4
Filed Under 프로그래밍/Visual Basic

몇 가지 API(FindWindow, FindWindowEx, SendMessage)를 이용하여 비활성화된 메모장에 글을 쓸 수 있다.

Option Explicit

Private Const WM_SETTEXT As Long = &HC&

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String _
) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
    ByVal hWnd1 As Long, _
    ByVal hWnd2 As Long, _
    ByVal lpsz1 As String, _
    ByVal lpsz2 As String _
) As Long

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
    ByVal hWnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByRef lParam As Any _
) As Long

Private Sub Form_Load()
    
    Dim hWnd As Long, hWnd2 As Long
    
    hWnd = FindWindow("Notepad", vbNullString)
    If hWnd = 0& Then Exit Sub
    
    hWnd2 = FindWindowEx(hWnd, 0&, "Edit", vbNullString)
    If hWnd2 = 0& Then Exit Sub
    
    Call SendMessage(hWnd2, WM_SETTEXT, 0&, ByVal "test")
    
End Sub

위의 코드를 이용하면 된다.
2011/09/26 20:07 2011/09/26 20:07

About

by 축복

Counter

· Total
: 6446
· Today
: 8
· Yesterday
: 28