'자료 iN'에 해당되는 글 2495건

  1. 확장자 egg 파일 - 알집(Alzip) 자체에서 만든 새로운 압축 포멧 6
  2. KBS 아침마당 목요특강-2010년 희망특강 세상을 읽어라, 전하진 강연
  3. EBS 국민성공시대, 성공학 특강 - 기양금속공업 대표 배영직, 한대중 강연
  4. KBS 경제세미나 - 한국기업 선진화의 길, 박종규 KSS해운 창업자 강연
  5. 주민등록번호를 대체할 아이핀(ipin) 무료 발급받는 사이트 안내와 사용방법 2
  6. wIniNet API - FTP Upload, Download를 위한 VB Script
  7. 프로그램 중복 실행 방지 루틴 API - 파워빌더(PowerBuilder)

확장자 egg 파일 - 알집(Alzip) 자체에서 만든 새로운 압축 포멧

 
반응형
동영상 파일을 하나 다운로드 받았는데, 확장자가 egg

요즘에는 egg라는 동영상 파일이 생겼나해서 더블클릭을 해봐도 연결된 프로그램이 없고,

곰플레이어나 KMPlayer에서 불러와도 안불러진다...

압축파일인가하는 생각에 7z나 Winrar로 실행을 해봐도 안되어서,

혹시나 하고 찾아보니 알집에서 새로만든 압축포멧이라고....

결국 예전에 지웠던 알집을 다시 설치하고 압축을 풀었다는...



특징:
 
- 최소한 2007년 중순부터 개발 시작, 올해 정식 버전 발표 예정
 
- 기존의 ziptv + 델파이 조합을 포기하고 C++ 로 압축 모듈을 완전히 새로 개발
 
- 앞으로 맥, 리눅스 버전도 개발할것이라고함 (<a href="http://blog.naver.com/altools/150019572403" class="bb-url">http://blog.naver.com/altools/150019572403</a>)
 
- 앞으로 64비트 환경도 지원 예정 (리눅스용 64비트를 지원하거나 윈도우용 64비트 exe를 제공한다는 의미인지는 명확하지 않음)
 
- UI 는 기존 빵집/술집등에서 지원하는 기능도 흡수하고 이것저것 많이 고민한 흔적이 보이며, 매우 훌륭한 편임.
 
- 유니코드 지원
  . 유니코드를 지원하지 않는 ZIP 파일등 도 코드페이지 설정으로
    압축 해제 지원 (일본어로 압축된 zip 파일등의 해제 지원)
 
- 자체 압축 포맷인 EGG 포맷 지원.
  EGG 포맷의 특징 (alz 포맷과 다른점)
   . 파일명이 UTF-8 로 저장되도록 설계되어 유니코드 지원
   . 솔리드 압축 지원
   . zlib, bzip2, <strong>AZO 압축 알고리즘</strong> 사용
     AZO 압축 알고리즘은 이스트소프트에서 자체 개발한 압축 알고리즘으로 보임
     데이타 종류에 따라서 7zip 이나 RAR 보다 압축율이 좋은 경우도 있고 나쁜 경우도 있음
     (일반적으로 zlib 이나 bzip2 보다는 좋음) 하지만 속도는 수배 ~ 십수배 느림.
 

기존의 알집의 고유포멧이자, 네티즌.. 특히나 프로그래머들에게 말이 많았던 ALZ 파일 포멧을 버리고 나온 새로운 버전인듯...

정확한 의중은 모르겠지만... 새로운 포멧을 다른 상용(Winzip, Winrar)이나 공개용 프로그램(7z, 빵집) 등에서 egg 압축파일을 풀지 못하게 해서 국내에서 독점적인 시장을 확보하려는것은 아닐까하는 생각이...

뭐 물론 더 좋은 방식에 빠른 방식이라고 하니 할말은 없지만, 다른 프로그램의 상업적 사용을 막는다는것은 참 안타까울수 밖에 없다...

업체들이 모두 이런식으로 하다가는 zip, rar, arj, egg, alz, lhz 등등 압축파일마다 죄다 다른 프로그램을 사용하게 되는건 아닌지....

뭐 또 어찌보면 저런식으로 독자행동을 걷을면서 한국에서는 독점적인 지휘를 확보할지는 모르겠지만, 한국 압축프로그램 시장이 왜곡이 될수도 있지 않을까하는 생각이 들기도...

인터넷, IT 선진국이라는 우리나라가 익터넷익스플로어 액티브액스(ActiveX)에 발목잡혀서 기형적인 모습으로 변하지 말라는 법도 없지 않을듯...

참고로 알집이 점점 무거워지는듯 한데,
압축시대라는 프로그램으로도 잘 풀리니, 한번 기회가 되시면 사용해 보시길...
알집에 비해서 상당히 가볍고 좋은듯 합니다.

압축시대 홈페이지와 다운로드 사이트 - http://www.kippler.com/zipage/

간단 소개
압축시대는 64비트 OS와 유니코드를 지원하는 압축 프로그램입니다. 외국 프로그램에서 지원하지 못하는 알집의 압축 포맷(ALZ/EGG)도 지원합니다.

라이선스: 이 프로그램은 개인/기업/관공서/학교/회사/법인/가정등 언제 어디서나 무료로 사용이 가능합니다. 자세한 사항은 프리웨어  항목을 참고하세요
반응형

KBS 아침마당 목요특강-2010년 희망특강 세상을 읽어라, 전하진 강연

 
반응형


KBS 신년맞이 희망특강으로 한글과 컴퓨터 사장과 네티앙 이사를 맞았던 전하진씨의 세상을 읽어라라는 강연...
최근에는 건축관련 컨설팅 회사인 한미파슨스에로 자리를 옮기셨다고,
강연 내용은 그의 저서인 비즈엘리트의 시대가 온다와 예전에 ebs ceo 특강에서 강연한 내용과 크게 다르지 않은 강연인데, 명문대를 나와서 승승장구를 하지만 인터넷 거품이 빠지면서 큰 손실을 입은 사례를 솔직하게 이야기를 하면서 그저 좋은 대학을 나와서 좋은 직장에 들어가는것이 절대 안정적인것이 아니며, 좋은것도 아니며, 세상을 보는 눈을 키우고, 젊은이답게 도전하는 삶을 살아보라는 메세지를 담은 강연...



다양한 사람들의 소개를 통해서 꼭 일류대, 좋은 직장이 아니더라도 자신만의 길을 개척하는 사람들을 보여주고, 자녀들을 그저 남들이 하는대로 똑같이 교육을 시키려고만 하지말고,
미래의 리더로 키우는 인재교육법이라는것을 통해 자신감을 키우고, 자신만의 경쟁력을 찾고, 실력보다 소통하는 사람이 되고, 실패에 대비하고, 멘토를 구하고, 꾸준히 한 걸음씩 걸어가라는 메세지를 전해주심...



보통 강연이라면 나는 이렇게 성공했다라고 말을 하지만, 그는 솔직하게 자신을 실패를 이야기하고 남과 같은 길이 아닌, 자신만의 길을 찾아가는것에 대해서 하나씩 짚어가면서 이야기를 해주는것이 참 많은 공감이 갔다는...

물론 방송을 본 학부모들은 고개를 끄떡이기는 하겠지만, 실제로 아이들을 이렇게 교육을 시키는것은 참 위험스럽고, 모험을 하는 느낌이 들지 않을까 싶은데, 뭐 꼭 전하진씨의 말대로 하는것이 중요한것이 아니라, 자녀와의 속깊은 대화를 통해서 진심으로 아이들이 원하고 바라는것이 무엇인지를 알고, 그에 맞추어 교육을 시키는것이 좋지 않을까 싶은 생각이 들었던 방송.
반응형

EBS 국민성공시대, 성공학 특강 - 기양금속공업 대표 배영직, 한대중 강연

 
반응형


EBS 기획시리즈-국민성공시대, 성공학 특강 - 배영직, 한대중씨편
어려운 환경에서 피나는 노력으로 현재의 성공을 이끈 배명직씨와 구두닦이를 하면서 나름대로의 신조를 가지고 사는 한대중씨...
방청객들의 입장에서 희망을 주거나 성공의 열의를 이끌어주기 위해서 말을 하기보다는
본인들의 지난 과거를 통한 이야기 위주였던 좀 뭔가 부족한듯한 느낌이 들었다는...




한대중 / 성공학 강사, 34년 경력의 구두닦이 

▶ 방송일 : 2월 19일 (화) (50분 1회 방송)
▶ 강사 소개 :
(*** 국민일보, 2007, 3, 13일 기사 내용으로 대체)
전남도청에서만 15년째 구두닦이로 일하고 있는 한대중(51·사진)씨. 그가 구두닦이의 길로 들어선 것은 18세이던 1974년. 가난 때문에 초등학교를 졸업한 뒤 상급학교에 진학하지 못했던 그는 “구두를 닦으면 돈도 벌고 공부를 계속할 수 있다”는 친구 권유로 구두닦이 일을 시작했다.

하루 10시간이 넘는 일을 하면서도 배움의 끈을 놓지 않았던 한씨는 전남대 대학생들로 구성된 용봉야학을 다니며 81년 마침내 고입 검정고시,87년 대입 검정고시에 합격해 주변에 ‘공부하는 구두닦이’로 알려졌다. 이후 생계를 꾸리느라 한동안 책을 가까이 하지 못했던 그는 강사의 꿈을 키우며 지난해 목포대 사회교육원 화술반에 입학, 2년째 수업을 받고 있다.

한씨는 자신의 일터인 남악신도시 전남도청 지하 1층에 있는 2평 남짓한 공간 벽에 ‘나의 사명서’라는 제목으로 ‘존경받는 아빠’ ‘성공학 책을 쓰겠다’ ‘최고의 동기부여 강사가 되겠다’ ‘CEO가 되겠다’ 등 10가지 꿈을 기록해 놓고 매일 되새기고 있다. 이 같은 꿈을 이루기 위해 매일 녹음기로 명사의 강의를 듣고 한 달에 최소 4권의 책을 읽고 있다.


한편의 드라마 같은 그의 인생이 주변에 알려지면서 체험담을 들으려는 강의 요청이 잇따르고 있다. 지난해 8월 광주에서 검정고시동우회원들을 상대로 ‘나의 인생’이란 주제로 첫 강의를 한 데 이어 지난달 2일 전남도 및 시·군 규제담당 공무원 워크숍에 강사로 초청됐다.
공무원들에게 한씨의 인생 강의가 호응을 얻으면서 국무조정실 등이 그를 강사로 초빙할 의사를 갖고 있는 것으로 전해왔다.
배명직 / 기양금속공업 대표

▶ 방송일 : 2월 18일 (월) (50분 1회 방송)

▶ 강사 소개 :
학창시절 ‘주먹질 문제아’ 친환경도금 ‘황금손으로’
독가스 맡으며 독한 노력으로 연매출 70억원 직원 70명의 회사로 일궈

배명직 대표는 도금업계 최초이자 국내 여덟 번째의 기능한국인에 선정 된
관련 업계에서는 알아주는 장인.
누군가에게 ‘꾼’으로 불리면 좋아하고,
스스로도 그의 인생은‘싸움꾼’에서 ‘최고의 일꾼’으로 파란만장 한 일생
을 살아왔다고 자처한다.

싸움꾼으로 유명하던 고교시절 졸업을 앞두고 우연히 기능사자격증 시험을
보게 된 것이 계기가 되어 제대로 된 인생 살기를 시작해 근무하는 공장의
폐수처리시설 구석에서 칼잠을 자면서 최고 기능사의 꿈을 키웠다.


▶ 강의내용 :
중학 중퇴 학력으로 34년 째 구두닦이의 인생을 살아왔던 한대중씨가
언어장애를 이겨내고 성공학 강사로 대중 앞에 서는 꿈을 이루기까지
그를 이끈 힘은 과연 무엇일까?

고난과 역경을 뚫고 바라던 성공학 강사가 되었지만,
여전히 “구두 닦는 내 삶이 곧 강의의 주제”라는 신념으로
다른 이들의 구두를 닦으면서,
성공을 꿈꾸는 대중에게 성공학을 강의하는
한대중씨의 삶과 인생, 그리고 성공 노하우를 듣는다.


 
반응형

KBS 경제세미나 - 한국기업 선진화의 길, 박종규 KSS해운 창업자 강연

 
반응형

KSS해운의 창업자인 박종규 고문의 강연으로, 유한양행 유일한회장의 책을 통해서 올바르게 사업을 해보자는 마음을 먹고, 리베이트가 당연시되있던 해운업에서 리베이트없이 당당히 사업을 하고, 각종비리에 연연하지 않으면서 승승장구를 하고, IMF때 위기를 겪기도 했지만, 초심을 잃지 않고 회사를 상장까지 하셨다고...
지금은 경영일선에서 물러나서 고문으로만 역활을 하고 있다는데, 자신의 재산도 일부만 가족에게 남기고 사회, 회사에 환원을 하시겠다고...
돈과 명예를 바라보고 하는 사업이 아닌, 사회봉사와 일자리창출, 노블리스오블리제 등 정말 기업가로써 가지고 있어야 할 멋진 마인드를 보여주신듯...
이외에도 회사의 주식을 사원들에게 넘기고, 노조와 상생을 하면서 회사를 발전적으로 키운 이야기 등.. 경영이나 영업분야에서 도움받을만한 내용도 많이 소개를...
경영뿐만이 아니라 살아가는데 있어서 정도를 가지고, 깨끗하고 바르게 가는것의 중요성과 혼자 가는것이 아니라, 직원들, 사람들과 함께가는것이 얼마나 중요하고 보람된 일이가를 생각해보게 된다.

kss해운 홈페이지 - http://www.kssline.com
경제세미나 홈페이지 - http://www.kbs.co.kr/radio/1radio/sunseminar/notice/notice.html


(주)KSS해운 창업자(현 고문)이자 ‘바른경제동인회’를 이끌고

있는 박종규 회장은 우리나라의 존경받는 기업인 중 하나이다.

 

박종규 회장은 리베이트 없는 경영으로 회사를 운영하고

전 재산을 사회에 환원하는 등 모범적인 경영인으로 알려져 있다.

 

박 회장은 또한 1969년 300만원으로 설립한 KSS해운을 25년만에

전문 경영인에게 물려주고 은퇴해 화제가 되기도 했다.

반응형

주민등록번호를 대체할 아이핀(ipin) 무료 발급받는 사이트 안내와 사용방법

 
반응형







주민등록번호로 가입을 하는대신 최근에 아이핀을 가지고 회원 등록을 하는 사이트들이 늘어나고 있는데,
저도 아이핀이 하나 필요해서 무료 아이핀을 발급받아 보았습니다.

무료발급을 위해서는 아래의 링크를 클릭하시면 됩니다.

무료아이핀발급받기

새로 이동된 페이지에서 아이핀 발급받기를 누르면 아래와 같은 팝업창이 뜹니다.


약관 동의를 클릭하고, 성명, 주민번호, id, 비밀번호, 이메일주소를 입력하면 됩니다.


그러면 신원확인을 하는곳이 나오는데, 휴대폰, 신용카드, 범용공인인증서 등으로 인증이 가능합니다.
대면확인은 뭔가 하고 눌러봤는데 안되네요...^^
그리고 공인인증서는 은행용 무료인증서로는 확인이 안됩니다.


그리고 나면 위처럼 코리아크레딧뷰로 발급기관이 정해지고, 아이핀 ID가 생성이 됩니다.

아이핀 관리하기

위 사이트에 가서 관리도 가능합니다.
한마디로 아이핀 ID를 만들면 인증된 해당업체에서 주민등록번호, 비밀번호, 이메일주소를 관리하므로,
내가 새로 가입하려고하는 사이트에 주민번호를 따로 제출을 안하게 관리를 해준다고 보면 될듯 합니다.
많이 활성화를 시킨다고는 했는데, 아직까지는 많이 적용되지는 않지만,
자신이 자주 사용하는 ID를 선점하기 위해서라도 하나쯤 만들어두시면 좋지 않을까 싶습니다.

무료아이핀발급받기










아이핀 소개보기
반응형

wIniNet API - FTP Upload, Download를 위한 VB Script

 
반응형
' ***** WININET 상수 *****
' 경로의 최대 길이
Const MAX_PATH = 260
' 오류가 없습니다.
Const NO_ERROR = 0

 

' ***** 파일 속성 상수 *****
' 읽기 전용입니다.
Const FILE_ATTRIBUTE_READONLY = &H1
' 숨김 파일입니다.
Const FILE_ATTRIBUTE_HIDDEN = &H2
' 시스템 파일입니다.
Const FILE_ATTRIBUTE_SYSTEM = &H4

' 디렉토리입니다.
Const FILE_ATTRIBUTE_DIRECTORY = &H10
' 일반적인 문서 파일입니다.
Const FILE_ATTRIBUTE_ARCHIVE = &H20
' 일반적인 파일입니다.
Const FILE_ATTRIBUTE_NORMAL = &H80
' 임시 파일입니다.
Const FILE_ATTRIBUTE_TEMPORARY = &H100
' 압축된 파일입니다.
Const FILE_ATTRIBUTE_COMPRESSED = &H800
' 오프라인 파일(캐쉬된)입니다.
Const FILE_ATTRIBUTE_OFFLINE = &H1000


' 파일의 시간을 나타내는 구조체
Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type


' 파일을 찾기 위한 구조체
Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type

 

' 더 이상 (찾을 수 있는) 파일이 없습니다.
Const ERROR_NO_MORE_FILES = 18

 

' 그 다음 파일을 찾습니다.
Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" (ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long

 

' FTP에서, 첫번째 파일을 구합니다.
Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long

 

' FTP에서, 파일을 내려받기 합니다.
Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean

 

' FTP에서, 파일을 업로드 합니다.
Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, ByVal lpszRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean

 

' FTP에서, 서버상의 작업 디렉토리를 바꿉니다.
Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean

 

' FTP에서, 서버상의 작업 디렉토리가 무엇인지 알아옵니다.
Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String, ByRef lpdwCurrentDirectory As Long) As Boolean



' 응용 프로그램이 Win32 인터넷 함수를 이용하기 위한 초기화

' 새로운 연결을 만들기 전에 인터넷 핸들을 생성합니다.
Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

' 사용자 정의 User-Agent
Const scUserAgent = "vb wininet"

 

' ***** 프록시 관련 상수 *****
' Internet Explorer의 설정을 사용합니다.
Const INTERNET_OPEN_TYPE_PRECONFIG = 0
' 프록시 서버를 사용하지 않습니다.
Const INTERNET_OPEN_TYPE_DIRECT = 1
' 지정한 프록시 서버 설정을 사용합니다.
Const INTERNET_OPEN_TYPE_PROXY = 3

' 잘못된 포트 번호를 나타냅니다.
Const INTERNET_INVALID_PORT_NUMBER = 0

 

' ***** HTTP 세션을 여는 함수들 *****

' 지정한 곳으로 연결합니다.
Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long

->> ByVal lFlags 을 134217728 으로 하면, passive FTP mode 로 접속!

' 가장 마지막으로 연결했던 곳의 응답 내용을 알아옵니다.
Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias "InternetGetLastResponseInfoA" (lpdwError As Long, ByVal lpszBuffer As String, lpdwBufferLength As Long) As Boolean

 


' ***** 연결하고자 하는 서버의 TCP/IP 포트 번호들 *****
' FTP 포트
Const INTERNET_DEFAULT_FTP_PORT = 21
' GOPHER 포트
Const INTERNET_DEFAULT_GOPHER_PORT = 70
' HTTP 포트
Const INTERNET_DEFAULT_HTTP_PORT = 80
' HTTPS 포트(HTTP 보안 프로토콜)
Const INTERNET_DEFAULT_HTTPS_PORT = 443
' 일반적인 소켓 포트
Const INTERNET_DEFAULT_SOCKS_PORT = 1080

 

' ***** 옵션 플래그 *****

' 연결할 때, 타임아웃 시간을 지정합니다.
Const INTERNET_OPTION_CONNECT_TIMEOUT = 2
' 전송받을 때, 타임아웃 시간을 지정합니다.
Const INTERNET_OPTION_RECEIVE_TIMEOUT = 6
' 보낼 때, 타임아웃 시간을 지정합니다.
Const INTERNET_OPTION_SEND_TIMEOUT = 5
' 사용자 이름을 지정합니다.
Const INTERNET_OPTION_USERNAME = 28
' 암호를 지정합니다.
Const INTERNET_OPTION_PASSWORD = 29
' 프록시 서버 사용자 이름을 지정합니다.
Const INTERNET_OPTION_PROXY_USERNAME = 43
' 프록시 서버 암호를 지정합니다.
Const INTERNET_OPTION_PROXY_PASSWORD = 44

 

' ***** 서비스 접근 방법 *****

' FTP 서비스
Const INTERNET_SERVICE_FTP = 1
' GOPHER 서비스
Const INTERNET_SERVICE_GOPHER = 2
' HTTP 서비스
Const INTERNET_SERVICE_HTTP = 3

' HTTP에서, 요청 정보를 보냅니다.
Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal sVerb As String, ByVal sObjectName As String, ByVal sVersion As String, ByVal sReferer As String, ByVal something As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long

' 읽기 작업
Const GENERIC_READ = &H80000000
' 쓰기 작업
Const GENERIC_WRITE = &H40000000

' HTTP에서, 추가적인 요청 정보를 보냅니다.
Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal sOptional As String, ByVal lOptionalLength As Long) As Integer

' HTTP에서, 서버가 응답한 데이터를 조회합니다.
Declare Function HttpQueryInfo Lib "wininet.dll" Alias "HttpQueryInfoA" (ByVal hHttpRequest As Long, ByVal lInfoLevel As Long, ByRef sBuffer As Any, ByRef lBufferLength As Long, ByRef lIndex As Long) As Integer


' 표준 인터넷 오류 대화상자를 띄웁니다.
Declare Function InternetErrorDlg Lib "wininet.dll" (ByVal hWnd As Long, ByVal hInternet As Long, ByVal dwError As Long, ByVal dwFlags As Long, ByVal lppvData As Long) As Long


' 인터넷 오류 대화상자 상수
Const FLAGS_ERROR_UI_FILTER_FOR_ERRORS = &H1
Const FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS = &H2
Const FLAGS_ERROR_UI_FLAGS_GENERATE_DATA = &H4
Const FLAGS_ERROR_UI_FLAGS_NO_UI = &H8
Const FLAGS_ERROR_UI_SERIALIZE_DIALOGS = &H10


' 바탕 화면 창의 핸들을 얻습니다.
Declare Function GetDesktopWindow Lib "user32.dll" () As Long


' ***** HTTP 응답 정보 상수들 *****
' 컨텐츠의 형식(Mine 타입 등)을 알아옵니다.
Const HTTP_QUERY_CONTENT_TYPE = 1
' 컨텐츠의 크기를 알아옵니다.
Const HTTP_QUERY_CONTENT_LENGTH = 5
' 컨텐츠의 만료일을 알아옵니다.
Const HTTP_QUERY_EXPIRES = 10
' 컨텐츠의 최종 수정일을 알아옵니다.
Const HTTP_QUERY_LAST_MODIFIED = 11
' 컨텐츠의 프라그마 부가 정보를 알아옵니다.
Const HTTP_QUERY_PRAGMA = 17
' 서버의 HTTP 버전을 알아옵니다.
Const HTTP_QUERY_VERSION = 18
' HTTP 상태 코드를 알아옵니다.
Const HTTP_QUERY_STATUS_CODE = 19
' HTTP 상태 내용을 알아옵니다.
Const HTTP_QUERY_STATUS_TEXT = 20
' HTTP 헤더를 알아옵니다.
Const HTTP_QUERY_RAW_HEADERS = 21
' HTTP 헤더의 줄바꿈 기준 단위를 알아옵니다.
Const HTTP_QUERY_RAW_HEADERS_CRLF = 22
' 포워딩 되었는지를 알아옵니다.
Const HTTP_QUERY_FORWARDED = 30
' HTTP 서버 정보를 알아옵니다.
Const HTTP_QUERY_SERVER = 37
' User-Agent를 알아옵니다.
Const HTTP_QUERY_USER_AGENT = 39
' 쿠키를 설정합니다.
Const HTTP_QUERY_SET_COOKIE = 43
' 요청 방법을 알아옵니다.
Const HTTP_QUERY_REQUEST_METHOD = 45

' 요청이 거부되었습니다.
Const HTTP_STATUS_DENIED = 401
' 프록시 서버 인증이 필요합니다.
Const HTTP_STATUS_PROXY_AUTH_REQ = 407


' 가져올 헤더에 플래그로 추가하는 상수
' 헤더들을 가져옵니다.
Const HTTP_QUERY_FLAG_REQUEST_HEADERS = &H80000000
' 숫자 정보를 얻습니다.
Const HTTP_QUERY_FLAG_NUMBER = &H20000000


' HttpOpenRequest 함수로 열린 인터넷 핸들에서, 데이터를 읽습니다.
Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer


' 인터넷 버퍼 구조체 설명
'Type INTERNET_BUFFERS
'    dwStructSize As Long ' 구조체의 크기
'    Next As Long ' 다음 버퍼의 포인터; VB에서 사용 불가
'    lpcszHeader As Long ' 헤더의 포인터 (NULL 가능합니다)
'    dwHeadersLength As Long ' 헤더를 사용할 경우 헤더의 길이
'    dwHeadersTotal As Long ' 모든 헤더의 크기
'    lpvBuffer As Long ' 데이터를 받을 버퍼의 포인터(NULL 가능합니다).
'    dwBufferLength As Long ' 데이터를 받을 버퍼의 크기(필수)
'    dwBufferTotal As Long ' 모든 버퍼의 크기
'    dwOffsetLow As Long ' 읽는 크기
'    dwOffsetHigh As Long ' 읽는 크기, 64비트용
'End Type

Type INTERNET_BUFFERS
    dwStructSize As Long
    Next As Long
    lpcszHeader As Long
    dwHeadersLength As Long
    dwHeadersTotal As Long
    lpvBuffer As Long
    dwBufferLength As Long
    dwBufferTotal As Long
    dwOffsetLow As Long
    dwOffsetHigh As Long
End Type

' HTTP에서, 확장 요청 정보를 보냅니다.
Declare Function HttpSendRequestEx Lib "wininet.dll" Alias "HttpSendRequestExA" (ByVal hHttpRequest As Long, lpBuffersIn As INTERNET_BUFFERS, ByVal lpBuffersOut As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

' HTTP에서, 요청을 종료합니다.
Declare Function HttpEndRequest Lib "wininet.dll" Alias "HttpEndRequestA" (ByVal hHttpRequest As Long, ByVal lpBuffersOut As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

' 열린 인터넷 핸들에 데이터를 씁니다.
Declare Function InternetWriteFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumberOfBytesToRead As Long, lNumberOfBytesRead As Long) As Integer

' FTP에서, 파일을 엽니다.
Declare Function FtpOpenFile Lib "wininet.dll" Alias "FtpOpenFileA" (ByVal hFtpSession As Long, ByVal sFileName As String, ByVal lAccess As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long

' FTP에서, 파일을 지웁니다.
Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean

' 인터넷 핸들의 여러 가지 설정 정보를 설정합니다.
Declare Function InternetSetOption Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal lOption As Long, ByRef sBuffer As Any, ByVal lBufferLength As Long) As Integer

' (VB용) InternetSetOption 함수와 같으나, 설정 정보를 전달하는 인자를 문자열 형으로 따로 선언했습니다.
Declare Function InternetSetOptionStr Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal lOption As Long, ByVal sBuffer As String, ByVal lBufferLength As Long) As Integer

' 인터넷 핸들을 닫습니다. 사용이 끝난 인터넷 핸들은 반드시 닫아줘야 합니다.
Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer

' 인터넷 핸들로부터 설정된 여러 가지 설정 정보를 조회합니다.
Declare Function InternetQueryOption Lib "wininet.dll" Alias "InternetQueryOptionA" (ByVal hInternet As Long, ByVal lOption As Long, ByRef sBuffer As Any, ByRef lBufferLength As Long) As Integer


' Wininet.dll의 버전을 알아옵니다.
Const INTERNET_OPTION_VERSION = 40

' 윈도우즈 인터넷 함수(Wininet.dll)이 담고 있는 DLL의 버전 정보를 알아오는 함수.
'functions (Wininet.dll). This structure is used when passing the
' 이 구조체는 INTERNET_OPTION_VERSION 플래그를 InternetQueryOption 함수로 넘겼을 때
' 반환됩니다.
Type tWinInetDLLVersion
    lMajorVersion As Long
    lMinorVersion As Long
End Type

'Adds one or more HTTP request headers to the HTTP request handle.
' HTTP 요청 핸들에 추가적인 HTTP 요청 헤더를 추가합니다.
Declare Function HttpAddRequestHeaders Lib "wininet.dll" Alias "HttpAddRequestHeadersA" (ByVal hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lModifiers As Long) As Integer

' 이 플래그는 이 함수의 의미적인 면을 바꿉니다.
' 다음의 값들을 가질 수 있습니다:

' 같은 것이 없을때만 헤더를 추가합니다. 아니면, 오류를 반환합니다.
Const HTTP_ADDREQ_FLAG_ADD_IF_NEW = &H10000000

' 헤더가 존재하지 않을때만 추가합니다. HTTP_ADDREQ_FLAG_REPLACE 플래그와 함께 사용합니다.
Const HTTP_ADDREQ_FLAG_ADD = &H20000000

' 헤더를 바꾸거나, 제거합니다. 만약 헤더 값이 비어있거나 같은 헤더가 있다면,
' 헤더를 제거합니다. 만약 비어있지 않다면, 헤더 값을 바꿉니다.
Const HTTP_ADDREQ_FLAG_REPLACE = &H80000000



' ***** 인터넷 오류 상수 *****
' 오류 기본 값(나머지 오류 값은 이 값을 더해서 사용합니다)
Const INTERNET_ERROR_BASE = 12000
' 핸들의 범위를 벗어났습니다.
Const ERROR_INTERNET_OUT_OF_HANDLES = (INTERNET_ERROR_BASE + 1)
' 타임 아웃으로 인해 종료되었습니다.
Const ERROR_INTERNET_TIMEOUT = (INTERNET_ERROR_BASE + 2)
' 파생된 오류 입니다.
Const ERROR_INTERNET_EXTENDED_ERROR = (INTERNET_ERROR_BASE + 3)
' 내부 오류가 발생하였습니다.
Const ERROR_INTERNET_INTERNAL_ERROR = (INTERNET_ERROR_BASE + 4)
' URL이 올바르지 않습니다.
Const ERROR_INTERNET_INVALID_URL = (INTERNET_ERROR_BASE + 5)
' 인증되지 않은 스키마입니다.
Const ERROR_INTERNET_UNRECOGNIZED_SCHEME = (INTERNET_ERROR_BASE + 6)
' 호스트 이름이 고정되지 않았습니다: 호스트를 찾을 수 없습니다.
Const ERROR_INTERNET_NAME_NOT_RESOLVED = (INTERNET_ERROR_BASE + 7)
' 프로토콜을 찾을 수 없습니다: 프로토콜이 잘못 되었습니다.
Const ERROR_INTERNET_PROTOCOL_NOT_FOUND = (INTERNET_ERROR_BASE + 8)
' 설정 값이 잘못 되었습니다.
Const ERROR_INTERNET_INVALID_OPTION = (INTERNET_ERROR_BASE + 9)
' 설정 값의 길이가 잘못 되었습니다.
Const ERROR_INTERNET_BAD_OPTION_LENGTH = (INTERNET_ERROR_BASE + 10)
' 설정 값이 기록되지 않았습니다.
Const ERROR_INTERNET_OPTION_NOT_SETTABLE = (INTERNET_ERROR_BASE + 11)
' 셧다운 되버렸습니다: 연결이 강제로 끊겼습니다.
Const ERROR_INTERNET_SHUTDOWN = (INTERNET_ERROR_BASE + 12)
' 사용자 이름이 올바르지 않습니다.
Const ERROR_INTERNET_INCORRECT_USER_NAME = (INTERNET_ERROR_BASE + 13)
' 사용자 암호가 올바르지 않습니다.
Const ERROR_INTERNET_INCORRECT_PASSWORD = (INTERNET_ERROR_BASE + 14)
' 로그인을 실패 하였습니다.
Const ERROR_INTERNET_LOGIN_FAILURE = (INTERNET_ERROR_BASE + 15)
' 작업이 잘못 되었습니다.
Const ERROR_INTERNET_INVALID_OPERATION = (INTERNET_ERROR_BASE + 16)
' 작업이 취소 되었습니다.
Const ERROR_INTERNET_OPERATION_CANCELLED = (INTERNET_ERROR_BASE + 17)
' 핸들 형식이 잘못 되었습니다.
Const ERROR_INTERNET_INCORRECT_HANDLE_TYPE = (INTERNET_ERROR_BASE + 18)
' 핸들 상태가 잘못 되었습니다.
Const ERROR_INTERNET_INCORRECT_HANDLE_STATE = (INTERNET_ERROR_BASE + 19)
' 프록시 서버의 요청이 아닙니다.
Const ERROR_INTERNET_NOT_PROXY_REQUEST = (INTERNET_ERROR_BASE + 20)
' 레지스트리 값을 찾을 수 없습니다.
Const ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND = (INTERNET_ERROR_BASE + 21)
' 레지스트리 매개 변수가 잘못 되었습니다.
Const ERROR_INTERNET_BAD_REGISTRY_PARAMETER = (INTERNET_ERROR_BASE + 22)
' 직접 접근을 할 수 없습니다.
Const ERROR_INTERNET_NO_DIRECT_ACCESS = (INTERNET_ERROR_BASE + 23)
' 컨텍스트를 얻을 수 없습니다.
Const ERROR_INTERNET_NO_CONTEXT = (INTERNET_ERROR_BASE + 24)
' 콜백 함수 설정에 실패하였습니다.
Const ERROR_INTERNET_NO_CALLBACK = (INTERNET_ERROR_BASE + 25)
' 요청이 중복 실행되어 지연되고 있습니다.
Const ERROR_INTERNET_REQUEST_PENDING = (INTERNET_ERROR_BASE + 26)
' 형식이 올바르지 않습니다.
Const ERROR_INTERNET_INCORRECT_FORMAT = (INTERNET_ERROR_BASE + 27)
' 항목을 찾을 수 없습니다.
Const ERROR_INTERNET_ITEM_NOT_FOUND = (INTERNET_ERROR_BASE + 28)
' 연결할 수 없습니다.
Const ERROR_INTERNET_CANNOT_CONNECT = (INTERNET_ERROR_BASE + 29)
' 연결이 강제로 종료 되었습니다.
Const ERROR_INTERNET_CONNECTION_ABORTED = (INTERNET_ERROR_BASE + 30)
' 연결이 초기화 되었습니다.
Const ERROR_INTERNET_CONNECTION_RESET = (INTERNET_ERROR_BASE + 31)
' 강제로 다시 시도 합니다.
Const ERROR_INTERNET_FORCE_RETRY = (INTERNET_ERROR_BASE + 32)
' 잘못된 프록시 서버 요청입니다.
Const ERROR_INTERNET_INVALID_PROXY_REQUEST = (INTERNET_ERROR_BASE + 33)
' UI가 필요합니다.
Const ERROR_INTERNET_NEED_UI = (INTERNET_ERROR_BASE + 34)
' 핸들이 존재합니다.
Const ERROR_INTERNET_HANDLE_EXISTS = (INTERNET_ERROR_BASE + 36)
' 인증서의 날짜가 잘못 되었습니다.
Const ERROR_INTERNET_SEC_CERT_DATE_INVALID = (INTERNET_ERROR_BASE + 37)
' 인증서가 잘못 되었습니다.
Const ERROR_INTERNET_SEC_CERT_CN_INVALID = (INTERNET_ERROR_BASE + 38)
' HTTP 에서 HTTPS로 재연결 됩니다.
Const ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR = (INTERNET_ERROR_BASE + 39)
' HTTPS 에서 HTTP로 재연결 됩니다.
Const ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR = (INTERNET_ERROR_BASE + 40)
' 보안 모드와 일반 모드가 섞여있습니다.
Const ERROR_INTERNET_MIXED_SECURITY = (INTERNET_ERROR_BASE + 41)
' 보안 되지 않은 CHG 폼 입니다.
Const ERROR_INTERNET_CHG_POST_IS_NON_SECURE = (INTERNET_ERROR_BASE + 42)
' 보안 되지 않은 폼 입니다.
Const ERROR_INTERNET_POST_IS_NON_SECURE = (INTERNET_ERROR_BASE + 43)
' 클라이언트의 인증서가 필요합니다.
Const ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED = (INTERNET_ERROR_BASE + 44)
' 인증서가 잘못 되었습니다.
Const ERROR_INTERNET_INVALID_CA = (INTERNET_ERROR_BASE + 45)
' 클라이언트에 인증서가 설치되지 않았습니다.
Const ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP = (INTERNET_ERROR_BASE + 46)
' 비동기 쓰레드 생성에 실패 하였습니다.
Const ERROR_INTERNET_ASYNC_THREAD_FAILED = (INTERNET_ERROR_BASE + 47)
' 재연결 스키마가 변경 되었습니다.
Const ERROR_INTERNET_REDIRECT_SCHEME_CHANGE = (INTERNET_ERROR_BASE + 48)
' 대화 상자가 지연되고 있습니다.
Const ERROR_INTERNET_DIALOG_PENDING = (INTERNET_ERROR_BASE + 49)
' 재시도 대화 상자
Const ERROR_INTERNET_RETRY_DIALOG = (INTERNET_ERROR_BASE + 50)
' HTTPS 에서 HTTP로 재연결 하면서 전송합니다.
Const ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR = (INTERNET_ERROR_BASE + 52)
' CD-ROM을 삽입해 주세요.
Const ERROR_INTERNET_INSERT_CDROM = (INTERNET_ERROR_BASE + 53)


' ***** FTP 오류 상수 *****
' 이미 전송 작업이 진행중 입니다.
Const ERROR_FTP_TRANSFER_IN_PROGRESS = (INTERNET_ERROR_BASE + 110)
' FTP 연결이 다운 되었습니다.
Const ERROR_FTP_DROPPED = (INTERNET_ERROR_BASE + 111)
' Passive 모드가 아닙니다.
Const ERROR_FTP_NO_PASSIVE_MODE = (INTERNET_ERROR_BASE + 112)

' ***** Gopher 오류 상수 *****
' Gopher 프로토콜 오류입니다.
Const ERROR_GOPHER_PROTOCOL_ERROR = (INTERNET_ERROR_BASE + 130)
' 파일이 아닙니다.
Const ERROR_GOPHER_NOT_FILE = (INTERNET_ERROR_BASE + 131)
' 데이터 오류입니다.
Const ERROR_GOPHER_DATA_ERROR = (INTERNET_ERROR_BASE + 132)
' 데이터의 끝입니다.
Const ERROR_GOPHER_END_OF_DATA = (INTERNET_ERROR_BASE + 133)
' 로케이터가 잘못 되었습니다.
Const ERROR_GOPHER_INVALID_LOCATOR = (INTERNET_ERROR_BASE + 134)
' 로케이터 형식이 잘못 되었습니다.
Const ERROR_GOPHER_INCORRECT_LOCATOR_TYPE = (INTERNET_ERROR_BASE + 135)
' Gopher+ 가 아닙니다.
Const ERROR_GOPHER_NOT_GOPHER_PLUS = (INTERNET_ERROR_BASE + 136)
' 속성을 찾을 수 없습니다.
Const ERROR_GOPHER_ATTRIBUTE_NOT_FOUND = (INTERNET_ERROR_BASE + 137)
' 로케이터를 알 수 없습니다.
Const ERROR_GOPHER_UNKNOWN_LOCATOR = (INTERNET_ERROR_BASE + 138)

' ***** HTTP 오류 상수 *****
' 헤더가 존재하지 않습니다.
Const ERROR_HTTP_HEADER_NOT_FOUND = (INTERNET_ERROR_BASE + 150)
' 서버가 다운 된 것 같습니다.
Const ERROR_HTTP_DOWNLEVEL_SERVER = (INTERNET_ERROR_BASE + 151)
' 서버 응답이 잘못 되었습니다.
Const ERROR_HTTP_INVALID_SERVER_RESPONSE = (INTERNET_ERROR_BASE + 152)
' 헤더가 잘못 되었습니다.
Const ERROR_HTTP_INVALID_HEADER = (INTERNET_ERROR_BASE + 153)
' 요청의 조회가 잘못 되었습니다.
Const ERROR_HTTP_INVALID_QUERY_REQUEST = (INTERNET_ERROR_BASE + 154)
' 헤더가 이미 존재합니다.
Const ERROR_HTTP_HEADER_ALREADY_EXISTS = (INTERNET_ERROR_BASE + 155)
' 재연결에 실패 하였습니다.
Const ERROR_HTTP_REDIRECT_FAILED = (INTERNET_ERROR_BASE + 156)
' 재연결 되지 않았습니다.
Const ERROR_HTTP_NOT_REDIRECTED = (INTERNET_ERROR_BASE + 160)
' 쿠키 확인이 필요합니다.
Const ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION = (INTERNET_ERROR_BASE + 161)
' 쿠기가 거부 되었습니다.
Const ERROR_HTTP_COOKIE_DECLINED = (INTERNET_ERROR_BASE + 162)
' 재연결 확인이 필요합니다.
Const ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION = (INTERNET_ERROR_BASE + 168)

' ***** 추가 인터넷 오류 상수 *****
' 보안 채널에 오류가 발생 하였습니다.
Const ERROR_INTERNET_SECURITY_CHANNEL_ERROR = (INTERNET_ERROR_BASE + 157)
' 캐쉬 파일을 사용할 수 없습니다.
Const ERROR_INTERNET_UNABLE_TO_CACHE_FILE = (INTERNET_ERROR_BASE + 158)
' TCP/IP가 설치되지 않았습니다.
Const ERROR_INTERNET_TCPIP_NOT_INSTALLED = (INTERNET_ERROR_BASE + 159)
' 연결이 끊겼습니다.
Const ERROR_INTERNET_DISCONNECTED = (INTERNET_ERROR_BASE + 163)
' 데이터가 서버에 도달할 수 없습니다.
Const ERROR_INTERNET_SERVER_UNREACHABLE = (INTERNET_ERROR_BASE + 164)
' 데이터가 프록시 서버에 도달할 수 없습니다.
Const ERROR_INTERNET_PROXY_SERVER_UNREACHABLE = (INTERNET_ERROR_BASE + 165)
' 프록시 자동 구성 스크립트가 잘못 되었습니다.
Const ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT = (INTERNET_ERROR_BASE + 166)
' 내려받기 스크립트를 사용할 수 없습니다.
Const ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT = (INTERNET_ERROR_BASE + 167)
' 인증서가 잘못 되었습니다.
Const ERROR_INTERNET_SEC_INVALID_CERT = (INTERNET_ERROR_BASE + 169)
' 인증서가 만기 되었습니다.
Const ERROR_INTERNET_SEC_CERT_REVOKED = (INTERNET_ERROR_BASE + 170)

' 보안 만기일 검사에 실패 하였습니다.
Const ERROR_INTERNET_FAILED_DUETOSECURITYCHECK = (INTERNET_ERROR_BASE + 171)
' 가장 마지막 오류
Const INTERNET_ERROR_LAST = ERROR_INTERNET_FAILED_DUETOSECURITYCHECK

' 공통 열기 상수 (InternetOpen 함수에 쓰이는 것이 아닙니다):
' 새로 고칩니다.
Const INTERNET_FLAG_RELOAD = &H80000000

' ***** InternetOpenUrl의 상수 *****
' 전체 데이터를 엽니다.
Const INTERNET_FLAG_RAW_DATA = &H40000000
' 이미 연결이 존재합니다.
Const INTERNET_FLAG_EXISTING_CONNECT = &H20000000

' ***** InternetOpen의 상수 *****
' 동기화 합니다.
Const INTERNET_FLAG_ASYNC = &H10000000

' *** FTP 프로토콜의 상수 ***
' Passive 모드를 사용합니다.
Const INTERNET_FLAG_PASSIVE = &H8000000

' ***** 추가적인 캐쉬 상수 *****
' 캐쉬에 쓰지 않습니다.
Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000
' 캐쉬 하지 않습니다.
Const INTERNET_FLAG_DONT_CACHE = INTERNET_FLAG_NO_CACHE_WRITE
' 권한을 만듭니다.
Const INTERNET_FLAG_MAKE_PERSISTENT = &H2000000
' 캐쉬로부터 읽습니다.
Const INTERNET_FLAG_FROM_CACHE = &H1000000
' 오프라인 파일로부터 읽습니다.
Const INTERNET_FLAG_OFFLINE = INTERNET_FLAG_FROM_CACHE

' ***** 추가적인 플래그 *****
' 보안 연결을 사용합니다.
Const INTERNET_FLAG_SECURE = &H800000
' 연결을 유지하도록 합니다.
Const INTERNET_FLAG_KEEP_CONNECTION = &H400000
' 자동으로 재연결하지 않습니다.
Const INTERNET_FLAG_NO_AUTO_REDIRECT = &H200000
' 읽기 전에 미리 읽습니다.
Const INTERNET_FLAG_READ_PREFETCH = &H100000
' 쿠키를 사용하지 않습니다.
Const INTERNET_FLAG_NO_COOKIES = &H80000
' 인증을 사용하지 않습니다.
Const INTERNET_FLAG_NO_AUTH = &H40000
' 인터넷에서 자료를 가져올 수 없을 때 캐쉬에서 읽습니다.
Const INTERNET_FLAG_CACHE_IF_NET_FAIL = &H10000

' 보안 무시 상수, HttpOpenRequest 에서 파생된
' 다음 형식의 보안 채널(SSL/PCT)을 무시합니다.
' HTTP로 재연결 하는 것을 무시합니다.
Const INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP = &H8000
' HTTPS로 재연결 하는 것을 무시합니다.
Const INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS = &H4000
' 인증서 기한이 만료됨을 무시합니다.
Const INTERNET_FLAG_IGNORE_CERT_DATE_INVALID = &H2000
' 인증서가 잘못됨을 무시합니다.
Const INTERNET_FLAG_IGNORE_CERT_CN_INVALID = &H1000

' ***** 그 밖에 캐쉬 상수 *****
' 다시 동기화 합니다: 캐쉬를 최신 내용으로 고칩니다.
Const INTERNET_FLAG_RESYNCHRONIZE = &H800
' 하이퍼링크를 사용합니다.
Const INTERNET_FLAG_HYPERLINK = &H400
' UI를 사용하지 않습니다.
Const INTERNET_FLAG_NO_UI = &H200
' 프라그마 부가 정보의 캐쉬를 사용하지 않습니다.
Const INTERNET_FLAG_PRAGMA_NOCACHE = &H100
' 비동기 캐쉬를 사용합니다.
Const INTERNET_FLAG_CACHE_ASYNC = &H80
' 폼을 전송합니다.
Const INTERNET_FLAG_FORMS_SUBMIT = &H40
' 파일이 필요합니다.
Const INTERNET_FLAG_NEED_FILE = &H10
' 캐쉬를 요청해야 합니다.
Const INTERNET_FLAG_MUST_CACHE_REQUEST = INTERNET_FLAG_NEED_FILE

' *** FTP 상수 ***
' 아스키 모드로 전송합니다: 텍스트 파일을 전송할 때
Const INTERNET_FLAG_TRANSFER_ASCII = &H1
' 바이너리 모드로 전송합니다: 이진 데이터를 가진 일반적인 파일을 전송할 때
Const INTERNET_FLAG_TRANSFER_BINARY = &H2

' 보안 마스크
Const INTERNET_SECURITY_MASK = INTERNET_FLAG_IGNORE_CERT_CN_INVALID Or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID Or INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS Or INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP
' 인터넷 마스크
Const INTERNET_FLAGS_MASK = INTERNET_FLAG_RELOAD Or INTERNET_FLAG_RAW_DATA Or INTERNET_FLAG_EXISTING_CONNECT Or INTERNET_FLAG_ASYNC Or INTERNET_FLAG_PASSIVE Or INTERNET_FLAG_NO_CACHE_WRITE Or INTERNET_FLAG_MAKE_PERSISTENT Or INTERNET_FLAG_FROM_CACHE Or INTERNET_FLAG_SECURE Or INTERNET_FLAG_KEEP_CONNECTION Or INTERNET_FLAG_NO_AUTO_REDIRECT Or INTERNET_FLAG_READ_PREFETCH Or INTERNET_FLAG_NO_COOKIES Or INTERNET_FLAG_NO_AUTH Or INTERNET_FLAG_CACHE_IF_NET_FAIL Or SECURITY_INTERNET_MASK Or INTERNET_FLAG_RESYNCHRONIZE Or INTERNET_FLAG_HYPERLINK Or INTERNET_FLAG_NO_UI Or INTERNET_FLAG_PRAGMA_NOCACHE Or INTERNET_FLAG_CACHE_ASYNC Or INTERNET_FLAG_FORMS_SUBMIT Or INTERNET_FLAG_NEED_FILE Or INTERNET_FLAG_TRANSFER_BINARY Or INTERNET_FLAG_TRANSFER_ASCII
' CD-ROM을 넣어야 하는 오류 마스크
Const INTERNET_ERROR_MASK_INSERT_CDROM = &H1
' 설정 마스크
Const INTERNET_OPTIONS_MASK = (Not INTERNET_FLAGS_MASK)

' ***** API 공통 상수 (새 API) *****
' 동기화 하지 않습니다.
Const WININET_API_FLAG_ASYNC = &H1
' 동기화 합니다.
Const WININET_API_FLAG_SYNC = &H4
' 컨텍스트를 사용합니다.
Const WININET_API_FLAG_USE_CONTEXT = &H8

' INTERNET_NO_CALLBACK - 이 값을 dwContext 매개 변수에 넣으면
' API는 콜백 함수를 만들지 않습니다.
Const INTERNET_NO_CALLBACK = 0

' FTP 파일 구조체
' 파일 이름과 디렉토리인지 여부를 알려 준다.
Type tFtpFile
    filename As String
    isDirectory As Boolean
End Type

' FTP 전송 형식 상수: 아스키 모드, 바이너리 모드
Enum eFtpTransferType
    FTP_TRANSFER_TYPE_ASCII = &H1
    FTP_TRANSFER_TYPE_BINARY = &H0
End Enum

' ***** 유틸리티 함수 *****

fileInfo As tFtpFile

Function MMgetDirectory(hostname As String, directory As String, ByRef fileInfo() As tFtpFile, ByRef fileCount As Integer, Optional searchPattern As String = "*", Optional username As String = "UMMC", Optional password As String = "ummc") As Boolean
   Dim hInternet As Long
   Dim hFTP As Long
   Dim hFind As Long
   Dim findfile As WIN32_FIND_DATA
   Dim flags As Long
   Dim content As Long
   Dim Count As Integer
   Dim ret As Long
   Dim startingPoint As Integer
   Dim startingPoint2 As Integer
   ReDim fileInfo(1 To 1024)
   hInternet = InternetOpen(App.Title, 0, "", "", 0)
   hFTP = InternetConnect(hInternet, hostname, INTERNET_DEFAULT_FTP_PORT, username, password, INTERNET_SERVICE_FTP, 0, 0)
   Call FtpSetCurrentDirectory(hFTP, directory)
   hFind = FtpFindFirstFile(hFTP, searchPattern, findfile, flags, content)


   If hFind = 0 Then
       ReDim fileInfo(0 To 0)
       MMgetDirectory = False
       fileCount = 0
       Exit Function
   End If
   Count = 1
   fileInfo(Count).filename = Trim(Mid(findfile.cFileName, 1, InStr(1, findfile.cFileName, Chr(0), vbTextCompare) - 1))


   If findfile.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY Then
       fileInfo(Count).isDirectory = True
   Else
       fileInfo(Count).isDirectory = False
   End If
   ret = 1


   Do While ret <> 0
       ret = InternetFindNextFile(hFind, findfile)


       If ret <> 0 Then
           Count = Count + 1
           fileInfo(Count).filename = Trim(Mid(findfile.cFileName, 1, InStr(1, findfile.cFileName, Chr(0), vbTextCompare) - 1))


           If findfile.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY Then
               fileInfo(Count).isDirectory = True
           Else
               fileInfo(Count).isDirectory = False
           End If
       End If
   Loop
   fileCount = Count
   Call InternetCloseHandle(hInternet)
   MMgetDirectory = True
End Function


Function MMgetFtpFile(hostname As String, username As String, UserPassword As String, HostFilename As String, localFilename As String, Optional DeleteHost As Boolean = False, Optional TransferMode As eFtpTransferType = FTP_TRANSFER_TYPE_ASCII) As Long
   Dim hInternet As Long
   Dim hFTP As Long
   Dim DeleteSuccess As Boolean
   hInternet = InternetOpen(App.Title, 0, "", "", 0)
   hFTP = InternetConnect(hInternet, hostname, INTERNET_DEFAULT_FTP_PORT, username, UserPassword, INTERNET_SERVICE_FTP, 0, 0)
   MMgetFtpFile = FtpGetFile(hFTP, HostFilename, localFilename, False, 0, INTERNET_FLAG_DONT_CACHE + TransferMode, 0)


   If DeleteHost = True Then
       DeleteSuccess = FtpDeleteFile(hFTP, HostFilename)
   End If
   Call InternetCloseHandle(hInternet)
End Function


Function MMputFtpFile(hostname As String, username As String, UserPassword As String, HostFilename As String, localFilename As String, Optional TransferMode As eFtpTransferType = FTP_TRANSFER_TYPE_ASCII) As Long
   Dim hInternet As Long
   Dim hFTP As Long
   hInternet = InternetOpen(App.Title, 0, "", "", 0)
   hFTP = InternetConnect(hInternet, hostname, INTERNET_DEFAULT_FTP_PORT, username, UserPassword, INTERNET_SERVICE_FTP, 0, 0)
   MMputFtpFile = FtpPutFile(hFTP, localFilename, HostFilename, INTERNET_FLAG_DONT_CACHE + TransferMode, 0)
   Call InternetCloseHandle(hInternet)
End Function


Function MMdeleteFtpFile(hostname As String, username As String, UserPassword As String, HostFilename As String) As Boolean
   Dim hInternet As Long
   Dim hFTP As Long
   hInternet = InternetOpen(App.Title, 0, "", "", 0)
   hFTP = InternetConnect(hInternet, hostname, INTERNET_DEFAULT_FTP_PORT, username, UserPassword, INTERNET_SERVICE_FTP, 0, 0)
   MMdeleteFtpFile = FtpDeleteFile(hFTP, HostFilename)
   Call InternetCloseHandle(hInternet)
End Function


Function MMtouchFtpFile(hostname As String, username As String, UserPassword As String, HostFilename As String) As Boolean
   Dim localFilename As String
   localFilename = "C:\Touchfile.txt"
   Open localFilename For Output As #1
   Print #1, ""
   Close #1


   If PutFtpFile(hostname, username, UserPassword, HostFilename, localFilename, FTP_TRANSFER_TYPE_ASCII) = 1 Then
       MMtouchFtpFile = True
   Else
       MMtouchFtpFile = False
   End If
   Kill localFilename
End Function

 
반응형

프로그램 중복 실행 방지 루틴 API - 파워빌더(PowerBuilder)

 
반응형
// Declare Global External Functions 선언부분
function ulong CreateMutexA (ulong lpMutexAttributes,int bInitialOwner,ref string lpName) library "kernel32.dll"
function ulong GetLastError () library "kernel32.dll"


// 어플리케이션 Open Event 스크립트
ulong    ll_mutex, ll_err
string   ls_mutex_name

if handle (GetApplication (), false) <> 0 then
    ls_mutex_name = this.AppName + char (0)

   // Create the mutex. Since we're not going to do anything with
   // it, ignore the first two arguments
   ll_mutex = CreateMutexA (0, 0, ls_mutex_name)
   ll_err = GetLastError ()
   if ll_err = 183 then    // Is running
       MessageBox ("Error", "Application already running.")
       halt close
   else
       // Not running
   end if
else
// We're in the development environment.
// If you go ahead and create the mutex here, be sure to destroy it
// in the application close event, or bad things will happen.
end if


찾고보니 간단하구만....-_-;;

DB에 상태값을 넣어두는것은 오류 종료시 문제가 있고,
FindWindowsA로 타이틀명을 가지고 오는것도 조금은 문제가 있는데,
이것이 제일 깔끔한듯....

double.pbl파워빌더 6.5용 샘플소스

반응형