'-- 함수명 : 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
'Visual Basic'에 해당되는 글 10건
- 2011/09/28 [VB6] 포트 스캐너 예제
- 2011/09/28 [VB6] 일정 구간의 랜덤한 숫자를 뽑아보자.
- 2011/09/28 [VB6] 10진수의 수를 2진수의 수로 바꿔보자. (1)
- 2011/09/28 [VB6] WinHttp를 이용한 FileDownload 소스
- 2011/09/28 [VB6 / API] CopyMemory
- 2011/09/28 [VB6] 파일 또는 폴더의 존재 여부를 알아보자.
- 2011/09/28 [VB6] 네이트온 쪽지테러 차단기
- 2011/09/28 [VB6] 숫자 관련 함수 (1)
- 2011/09/28 [VB6] 문자열 관련 함수 (1)
- 2011/09/26 [VB6] 비활성화된 메모장에 글 쓰기
Posted on 2011/09/28 01:05 Url http://www.svkor.com/blog/16
Filed Under 프로그래밍/Visual Basic
Posted on 2011/09/28 01:03 Url http://www.svkor.com/blog/15
Filed Under 프로그래밍/Visual Basic
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
Posted on 2011/09/28 00:59 Url http://www.svkor.com/blog/13
Filed Under 프로그래밍/Visual Basic
'-- 제작자 : 축복(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
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]이 출력될 것이다.
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
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) 등
[ 알림 ]
사용 중 발생하는 프로그램 상 오류는
홈페이지 또는 이메일로 문의해주시면
수정하겠습니다.
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 사이의 난수
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"
Posted on 2011/09/26 20:07 Url http://www.svkor.com/blog/4
Filed Under 프로그래밍/Visual Basic
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위의 코드를 이용하면 된다.
prjPortScanner.zip