'자료 iN /성공 & 강연'에 해당되는 글 561건

  1. EBS 국민성공시대, 성공학 특강 - 기양금속공업 대표 배영직, 한대중 강연
  2. KBS 경제세미나 - 한국기업 선진화의 길, 박종규 KSS해운 창업자 강연
  3. wIniNet API - FTP Upload, Download를 위한 VB Script
  4. 프로그램 중복 실행 방지 루틴 API - 파워빌더(PowerBuilder)
  5. KBS 경제세미나 - 200년 영속 기업의 비밀
  6. KBS 아침마당 목요특강-20,30대가 알아야할 공병호박사의 성공법칙-10년만 투자하라
  7. KBS 경제세미나 - 세계경제위기와 국가 경쟁력, 이희범 회장(stx에너지)

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년만에

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

반응형

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용 샘플소스

반응형

KBS 경제세미나 - 200년 영속 기업의 비밀

 
반응형

화약, 화학기업으로 1802년에 시작해서 200년이상을 지속해온 두퐁사의 영속 경영의 비밀은 무엇인가에 대한 강연...
초반에는 듀퐁사에 대한 소개로 시작해서, 인재를 얼마나 중요시하고, 글로벌화보다는 세계각국의 문화와 전통을 배려하고, 무엇보다도 원칙에 입각한 윤리경영으로 200년을 이끌어 왔다고...

윤리에 대해서는 단기간의 이익이나 개인의 사리사욕과 상관없이 원칙을 가지고 접근을 한다고 하는데,
무슨 일에 대한 윤리의 판단근거는
1. 사규나 윤리강녕 등에 위배되는 문제가 없는가?
2. 친구나 가족들에게 자신있게 당당하게 말할수 있는가?
3. 신문 1면에 난다고해도 부끄럽지 않을 자신이 있는가?
라는 식의 판단근거는 누구나 한번쯤 생각해봐야할 멋진 내용이였다.

뭐 한마디로 하자면, 원칙을 바탕으로 해서 기본에 충실하라는 상투적인 이야기... 하지만 그 뻔하고, 쉬워보이지만 절대 쉽지 않은 일을 200년간 지켜나가야한다라는것이 얼마나 어려운것인지는 말할 필요도 없는법...

역시나 기본이고 원칙인가보다... 근데 나의 원칙은 무엇인가???

히스토리채널 세상을 바꾼 사람들 - 화학제품의 명가, 듀폰(DuPont)

듀퐁사에 대한 자세한 내역을 알고 싶으시면 아래의 링크로 가보시길...
http://www.llp.co.kr/insight/insight_read.asp?code=997

* KBS 라디오 경제세미나 주요내용

1950년대의 포천500사 中 현재 10여개만이 포천500에 남아있을 정도로 재계의 판도 변화가 엄청나다.
그렇다면 이런 가운데 우리 기업은 어떻게 해야 지속 가능 경영을 할 수 있을 것인지 듀퐁사의 경영을 통해 알아본다.
1. 듀퐁사의 변화
화약 → 화학, 에너지 → 바이오 산업
2. 듀퐁사의 global standards
- 지역적인 환경 문화 관습들 이면에 있는 본질적인 가치와 다양성을 인정하고 존중함과 동시에 글로벌 기업의 일반적 행위 기준에 벗어나지 않는다.
3. 듀퐁사의 윤리체계


 

김동수
듀폰 아시아태평양 고문

학력 : 캘리포니아대학교(UC Berkeley)   화학공학과
        아이다호대학교 대학원 화학공학(석사)      

          
경력 : 다우케미칼 R&D, Project Management, 한화경영관리실 임원
         듀폰 아태지역 자동차사업 총책임자
         듀폰 전세계 불소 생산담당 총책임자
         듀폰 전세계 부직포 사업부 총책임자 겸 본사 부사장
         듀폰 본사 부사장 겸 아시아 태평양 사장
         現 서울대학교 MBA 경영혁신론 초빙교수


 
반응형

KBS 아침마당 목요특강-20,30대가 알아야할 공병호박사의 성공법칙-10년만 투자하라

 
반응형

공병호 박사가 제안하는 성공법칙
1. 강한 각성의 순간이 있어야 한다.  2. 뿌린대로 거둔다  3. 무슨일을 하든지 꾸준히 열심히 하라  4. 선택과 집중을 하라  5. 때로는 미쳐야 한다  6. 반듯하게 생각하라  7. 결정적 만남을 소중히 하라  8. 거듭 도전하라  9. 실패하면 일어서라  10. 처음 시작했을 때의 마음가짐을 잃지마라  11. 내적 성찰을 게을리 하지마라  12. 최대한 과정을 충실하라

위의 12개의 주제를 가지고 10년간 꾸준히 노력을 하라는 주제의 강연...
참 차분하게 말씀을 잘하고, 강연을 들으니 공감이 가기도 하지만, 강연을 듣고나서 그의 성공법칙 12가지를 써보니 상투적인 성공학이나 자기개발 메세지와 다를바는 없는듯하다.

개인적으로는 자신의 성공담이나 체험이 아닌, 남들의 이야기를 가지고 자기개발에 대해서 이야기를 하는 사람은 별로 좋아하지 않는다... 공병호씨의 책도 몇권 읽고 나와는 맞지 않아서 이후에는 안보고 있다.
예전에 어느 강연에서 강사가 성공의 법칙이라고 하면서 한시간동안 열심히 이야기를 했는데, 질답시간에 한 사람이 손을 들더니 자신은 정말 연사가 말하는 성공법칙을 충실하게 열심히 몇년동안 실천해왔지만, 성공하고는 거리가 멀기만 한데, 왜 그런가하고 질문을 했더니 강사가 땀을 삐질삐질 흘리던 모습이 떠오른다...-_-;;

성공이나 부는 자신이 자신만의 성공과 부를 만들어가고, 찾아가는것이지.. 그 누가 가르쳐준다고 해서 쉽게 이룰수 있는것도 아니고, 그 비법이라는것이 있다면 과연 수많은 사람들이 몇백년, 몇천년동안 찾아다니면서도 아직도 그 비법을 찾지 못했을까?
무엇보다 그 성공의 비밀, 법칙이라는것들은 자신이 알지만 행동에 옮기지 못하는것들이 아닐까?

1시간동안 강연은 잘들었지만, 방송을 듣고 정리를 하려고 하다보니 좀 공허함이 느껴지고, 누군가에게서 그 무엇인가의 비법이나 법칙을 찾기보다 내 자신 스스로가 변하고, 바뀌어야 하지 않을까하는 생각이 든다...

알버트 아인슈타인, 파블로 피카소, 앤드루 카네기, 지그문트 프로이트의 공통점은 무엇이라고 생각하는가? 천재라 부르던 이들도 자신의 분야에서 최고 수준의 성취와 성과를 올리기 위해 최소 10년의 지속적이고 정교한 훈련을 하였다. '10년 법칙'은 바로 10년간의 집중적인 투자가 이후 지식의 성장속도에 커다란 변화를 가져온다는 말이다. 이것은 성공을 꿰뚫는 명쾌하고 분명한 기본 원칙이다. 자신을 최고의 수준으로 자리매김하려면 한 분야에서 10년의 집중적인 경험과 훈련, 그리고 성공에 대한 집요한 노력이 반드시 필요하다

孔柄淏 연간 300회 이상의 강연회와 워크샵, '공병호경영연구소'를 운영하며, 한 해에 십여 권의 책을 출간하는 한국을 대표하는 경영 대가, 자기계발 전문가.

연간 300회 이상의 강연회와 워크샵, '공병호경영연구소'를 운영하며, 한 해에 십여 권의 책을 출간하는 한국을 대표하는 경영 대가, 자기계발 전문가.


반응형

KBS 경제세미나 - 세계경제위기와 국가 경쟁력, 이희범 회장(stx에너지)

 
반응형

경제세미나라기보다는 경제학 강연같았던 느낌의 경제세미나...
산업자원부 장관을 지내시기도 하고, 현재는 STX 중공업 회장으로 계시다는데, 현재의 경제 상황이 어떻게 해서 이러한 위기가 닥쳤는지를 거의 1차대전부터 해서 설명을 하고, 미국중심의 경제가 무너져가면서, 생기는 현상들을 아주 잘 설명을 해주신듯...
그리고 한국의 장단점을 소개하면서 우리의 단점인 노사문제, 폐쇄성등을 보완하고, 한국의 창조적이고, 유능한 인재 등을 더욱더 키운다면 세계 시장에서도 충분히 통하면, 이런 경제 위기를 잘 극복할수 있다는 말씀을...
뭐 상당히 기업적이고, 관료적인 느낌이 나기도 하지만, 현상황의 경제현황을 미국의 패권시대부터 중국의 도약까지의 과정을 설명하시는 부분은 들어보면 많은 도움이 되지 않을까 싶었던 강연.

경제세미나 홈페이지 - http://www.kbs.co.kr/radio/1radio/sunseminar/notice/notice.html
STX 홈페이지 - http://www.stx.co.kr/Front/


▷ 주 제 : ‘세계경제위기와 국가 경쟁력’
 강연자: 이희범 회장(stx에너지)

이희범 STX 에너지·중공업 총괄 회장은 "2008년 리먼브러더스 파산 이후 시작된 세계 금융위기로 경제 패러다임이 변했다"며 "변화한 환경 속에서 한국 기업이 살아남는 길은 경쟁력 강화"라고 강조했다.

이 회장은 가장 큰 변화로 2차 세계대전 이후 세계 경제의 최강자였던 미국의 위상이 상대적으로 약화되고 중국이 약진하는 G2시대가 도래한 점을 꼽았다.


 
반응형