Content is user-generated and unverified.
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> #include <ButtonConstants.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> ; HTML5 지원을 위한 IE11 Edge 모드 활성화 _EnableHTML5Support() ; GUI 생성 Local $hGUI = GUICreate("AutoIt HTML5 뷰어", 1200, 800, -1, -1, $WS_OVERLAPPEDWINDOW) ; 상단 컨트롤 패널 Local $idAddressLabel = GUICtrlCreateLabel("주소:", 10, 15, 40, 20) Local $idAddressEdit = GUICtrlCreateEdit("about:blank", 55, 12, 800, 25, $ES_AUTOHSCROLL) Local $idGoButton = GUICtrlCreateButton("이동", 865, 11, 60, 27) Local $idLoadFileButton = GUICtrlCreateButton("HTML 파일 열기", 935, 11, 100, 27) Local $idRefreshButton = GUICtrlCreateButton("새로고침", 1045, 11, 70, 27) Local $idBackButton = GUICtrlCreateButton("뒤로", 1125, 11, 50, 27) ; HTML 편집기 (옵션) Local $idShowEditorButton = GUICtrlCreateButton("HTML 편집기", 10, 45, 100, 25) Local $idHtmlEdit = GUICtrlCreateEdit("", 10, 75, 580, 200, $ES_MULTILINE + $ES_WANTRETURN + $WS_VSCROLL) Local $idLoadHtmlButton = GUICtrlCreateButton("HTML 로드", 120, 45, 80, 25) Local $idClearButton = GUICtrlCreateButton("지우기", 210, 45, 60, 25) GUICtrlSetState($idHtmlEdit, $GUI_HIDE) ; 상태바 Local $idStatusLabel = GUICtrlCreateLabel("준비", 10, 780, 1180, 15, $SS_SUNKEN) ; WebBrowser 컨트롤 Local $oIE = ObjCreate("Shell.Explorer.2") If @error Then MsgBox($MB_ICONERROR, "오류", "WebBrowser 컨트롤을 생성할 수 없습니다.") Exit EndIf ; WebBrowser를 GUI에 임베드 Local $idWebBrowser = GUICtrlCreateObj($oIE, 10, 285, 1180, 490) ; GUI 표시 GUISetState(@SW_SHOW) ; 기본 HTML5 테스트 페이지 로드 _LoadDefaultHTML($oIE) ; 변수 초기화 Local $bEditorVisible = False ; 메인 이벤트 루프 While 1 Local $nMsg = GUIGetMsg() Select Case $nMsg = $GUI_EVENT_CLOSE ExitLoop Case $nMsg = $idGoButton Local $sUrl = GUICtrlRead($idAddressEdit) If $sUrl <> "" Then _NavigateToURL($oIE, $sUrl) _UpdateStatus("로딩 중: " & $sUrl) EndIf Case $nMsg = $idLoadFileButton Local $sFile = FileOpenDialog("HTML 파일 선택", @ScriptDir, "HTML Files (*.html;*.htm)|모든 파일 (*.*)", $FD_FILEMUSTEXIST) If Not @error And $sFile <> "" Then _NavigateToFile($oIE, $sFile) GUICtrlSetData($idAddressEdit, $sFile) _UpdateStatus("파일 로드: " & $sFile) EndIf Case $nMsg = $idRefreshButton $oIE.Refresh() _UpdateStatus("페이지 새로고침") Case $nMsg = $idBackButton $oIE.GoBack() _UpdateStatus("이전 페이지로") Case $nMsg = $idShowEditorButton $bEditorVisible = Not $bEditorVisible If $bEditorVisible Then GUICtrlSetState($idHtmlEdit, $GUI_SHOW) GUICtrlSetData($idShowEditorButton, "편집기 숨기기") ; WebBrowser 크기 조정 GUICtrlSetPos($idWebBrowser, 10, 285, 580, 490) Else GUICtrlSetState($idHtmlEdit, $GUI_HIDE) GUICtrlSetData($idShowEditorButton, "HTML 편집기") ; WebBrowser 원래 크기로 GUICtrlSetPos($idWebBrowser, 10, 285, 1180, 490) EndIf Case $nMsg = $idLoadHtmlButton Local $sHtmlContent = GUICtrlRead($idHtmlEdit) If $sHtmlContent <> "" Then _LoadHTMLContent($oIE, $sHtmlContent) _UpdateStatus("사용자 HTML 로드됨") EndIf Case $nMsg = $idClearButton GUICtrlSetData($idHtmlEdit, "") EndSelect WEnd GUIDelete() ; ================= 함수 정의 ================= ; HTML5 지원을 위한 레지스트리 설정 Func _EnableHTML5Support() Local $sAppName = StringRegExpReplace(@ScriptName, "\.au3$", ".exe") Local $sRegPath = "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION" ; IE11 Edge 모드 (11001) 설정 - HTML5 완전 지원 RegWrite($sRegPath, $sAppName, "REG_DWORD", 11001) ; 추가 기능 활성화 RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_AJAX_CONNECTIONEVENTS", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DOMSTORAGE", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_GPU_RENDERING", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI", $sAppName, "REG_DWORD", 0) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DISABLE_LEGACY_COMPRESSION", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_LOCALMACHINE_LOCKDOWN", $sAppName, "REG_DWORD", 0) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BLOCK_LMZ_OBJECT", $sAppName, "REG_DWORD", 0) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BLOCK_LMZ_SCRIPT", $sAppName, "REG_DWORD", 0) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DISABLE_NAVIGATION_SOUNDS", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_SCRIPTURL_MITIGATION", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_SPELLCHECKING", $sAppName, "REG_DWORD", 0) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_STATUS_BAR_THROTTLING", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_TABBED_BROWSING", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_VALIDATE_NAVIGATE_URL", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBOC_DOCUMENT_ZOOM", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBOC_POPUPMANAGEMENT", $sAppName, "REG_DWORD", 0) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBOC_MOVESIZECHILD", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ADDON_MANAGEMENT", $sAppName, "REG_DWORD", 0) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBSOCKET", $sAppName, "REG_DWORD", 1) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WINDOW_RESTRICTIONS", $sAppName, "REG_DWORD", 0) RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_XMLHTTP", $sAppName, "REG_DWORD", 1) EndFunc ; URL로 이동 Func _NavigateToURL($oObject, $sURL) $oObject.Navigate($sURL) EndFunc ; 파일로 이동 Func _NavigateToFile($oObject, $sFilePath) $oObject.Navigate("file:///" & StringReplace($sFilePath, "\", "/")) EndFunc ; HTML 내용을 직접 로드 Func _LoadHTMLContent($oObject, $sHTML) $oObject.Navigate("about:blank") ; 문서가 로드될 때까지 대기 While $oObject.ReadyState <> 4 Sleep(10) WEnd $oObject.Document.Write($sHTML) $oObject.Document.Close() EndFunc ; 기본 HTML5 테스트 페이지 로드 Func _LoadDefaultHTML($oObject) Local $sDefaultHTML = '<!DOCTYPE html>' & @CRLF & _ '<html lang="ko">' & @CRLF & _ '<head>' & @CRLF & _ ' <meta charset="UTF-8">' & @CRLF & _ ' <meta name="viewport" content="width=device-width, initial-scale=1.0">' & @CRLF & _ ' <meta http-equiv="X-UA-Compatible" content="IE=edge">' & @CRLF & _ ' <title>AutoIt HTML5 뷰어</title>' & @CRLF & _ ' <style>' & @CRLF & _ ' body { font-family: Arial, sans-serif; margin: 20px; background: linear-gradient(45deg, #e3f2fd, #f3e5f5); }' & @CRLF & _ ' .header { background: linear-gradient(135deg, #2196f3, #9c27b0); color: white; padding: 20px; border-radius: 10px; margin-bottom: 20px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }' & @CRLF & _ ' .card { background: white; padding: 20px; border-radius: 8px; margin: 10px 0; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }' & @CRLF & _ ' .test-btn { background: #4CAF50; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; margin: 5px; }' & @CRLF & _ ' .test-btn:hover { background: #45a049; }' & @CRLF & _ ' .demo-area { border: 2px dashed #ddd; padding: 20px; margin: 10px 0; border-radius: 8px; }' & @CRLF & _ ' canvas { border: 1px solid #ddd; margin: 10px 0; }' & @CRLF & _ ' .progress { width: 100%; height: 20px; background: #f0f0f0; border-radius: 10px; overflow: hidden; margin: 10px 0; }' & @CRLF & _ ' .progress-bar { height: 100%; background: linear-gradient(90deg, #4CAF50, #2196F3); width: 0%; transition: width 2s ease; }' & @CRLF & _ ' .feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px; margin: 20px 0; }' & @CRLF & _ ' .feature-card { background: #f8f9fa; padding: 15px; border-left: 4px solid #2196f3; border-radius: 4px; }' & @CRLF & _ ' </style>' & @CRLF & _ '</head>' & @CRLF & _ '<body>' & @CRLF & _ ' <div class="header">' & @CRLF & _ ' <h1>🌐 AutoIt HTML5 뷰어</h1>' & @CRLF & _ ' <p>HTML5, CSS3, JavaScript를 완전 지원하는 고급 웹 뷰어입니다.</p>' & @CRLF & _ ' </div>' & @CRLF & _ '' & @CRLF & _ ' <div class="card">' & @CRLF & _ ' <h2>🎯 주요 기능</h2>' & @CRLF & _ ' <div class="feature-grid">' & @CRLF & _ ' <div class="feature-card">' & @CRLF & _ ' <h3>HTML5 지원</h3>' & @CRLF & _ ' <p>최신 HTML5 표준을 완전 지원합니다.</p>' & @CRLF & _ ' </div>' & @CRLF & _ ' <div class="feature-card">' & @CRLF & _ ' <h3>CSS3 스타일링</h3>' & @CRLF & _ ' <p>고급 CSS3 기능과 애니메이션을 지원합니다.</p>' & @CRLF & _ ' </div>' & @CRLF & _ ' <div class="feature-card">' & @CRLF & _ ' <h3>JavaScript</h3>' & @CRLF & _ ' <p>인터랙티브한 웹 콘텐츠를 완전 지원합니다.</p>' & @CRLF & _ ' </div>' & @CRLF & _ ' <div class="feature-card">' & @CRLF & _ ' <h3>Canvas & SVG</h3>' & @CRLF & _ ' <p>그래픽 렌더링과 벡터 그래픽을 지원합니다.</p>' & @CRLF & _ ' </div>' & @CRLF & _ ' </div>' & @CRLF & _ ' </div>' & @CRLF & _ '' & @CRLF & _ ' <div class="card">' & @CRLF & _ ' <h2>🚀 HTML5 기능 테스트</h2>' & @CRLF & _ ' <button class="test-btn" onclick="testCanvas()">Canvas 그리기</button>' & @CRLF & _ ' <button class="test-btn" onclick="testLocalStorage()">로컬 스토리지</button>' & @CRLF & _ ' <button class="test-btn" onclick="testGeolocation()">위치 정보</button>' & @CRLF & _ ' <button class="test-btn" onclick="testAnimation()">CSS3 애니메이션</button>' & @CRLF & _ ' <button class="test-btn" onclick="testProgress()">Progress Bar</button>' & @CRLF & _ '' & @CRLF & _ ' <div id="demo-area" class="demo-area">' & @CRLF & _ ' <p>위의 버튼을 클릭하여 HTML5 기능을 테스트해보세요!</p>' & @CRLF & _ ' </div>' & @CRLF & _ ' </div>' & @CRLF & _ '' & @CRLF & _ ' <div class="card">' & @CRLF & _ ' <h2>📊 브라우저 정보</h2>' & @CRLF & _ ' <div id="browser-info">' & @CRLF & _ ' <p><strong>User Agent:</strong> <span id="user-agent"></span></p>' & @CRLF & _ ' <p><strong>현재 시간:</strong> <span id="current-time"></span></p>' & @CRLF & _ ' <p><strong>화면 해상도:</strong> <span id="screen-info"></span></p>' & @CRLF & _ ' </div>' & @CRLF & _ ' </div>' & @CRLF & _ '' & @CRLF & _ ' <script>' & @CRLF & _ ' // 브라우저 정보 표시' & @CRLF & _ ' document.getElementById("user-agent").textContent = navigator.userAgent;' & @CRLF & _ ' document.getElementById("screen-info").textContent = screen.width + " x " + screen.height;' & @CRLF & _ ' ' & @CRLF & _ ' function updateTime() {' & @CRLF & _ ' document.getElementById("current-time").textContent = new Date().toLocaleString("ko-KR");' & @CRLF & _ ' }' & @CRLF & _ ' setInterval(updateTime, 1000);' & @CRLF & _ ' updateTime();' & @CRLF & _ '' & @CRLF & _ ' function testCanvas() {' & @CRLF & _ ' const demo = document.getElementById("demo-area");' & @CRLF & _ ' demo.innerHTML = `<h3>Canvas 테스트</h3>' & @CRLF & _ ' <canvas id="testCanvas" width="300" height="200"></canvas>`;' & @CRLF & _ ' ' & @CRLF & _ ' const canvas = document.getElementById("testCanvas");' & @CRLF & _ ' const ctx = canvas.getContext("2d");' & @CRLF & _ ' ' & @CRLF & _ ' // 그라디언트 배경' & @CRLF & _ ' const gradient = ctx.createLinearGradient(0, 0, 300, 200);' & @CRLF & _ ' gradient.addColorStop(0, "#FF6B6B");' & @CRLF & _ ' gradient.addColorStop(1, "#4ECDC4");' & @CRLF & _ ' ctx.fillStyle = gradient;' & @CRLF & _ ' ctx.fillRect(0, 0, 300, 200);' & @CRLF & _ ' ' & @CRLF & _ ' // 원 그리기' & @CRLF & _ ' ctx.fillStyle = "white";' & @CRLF & _ ' ctx.beginPath();' & @CRLF & _ ' ctx.arc(150, 100, 50, 0, Math.PI * 2);' & @CRLF & _ ' ctx.fill();' & @CRLF & _ ' ' & @CRLF & _ ' // 텍스트' & @CRLF & _ ' ctx.fillStyle = "#333";' & @CRLF & _ ' ctx.font = "20px Arial";' & @CRLF & _ ' ctx.textAlign = "center";' & @CRLF & _ ' ctx.fillText("HTML5 Canvas!", 150, 110);' & @CRLF & _ ' }' & @CRLF & _ '' & @CRLF & _ ' function testLocalStorage() {' & @CRLF & _ ' const demo = document.getElementById("demo-area");' & @CRLF & _ ' try {' & @CRLF & _ ' localStorage.setItem("test", "HTML5 로컬 스토리지 작동!");' & @CRLF & _ ' const value = localStorage.getItem("test");' & @CRLF & _ ' demo.innerHTML = `<h3>로컬 스토리지 테스트</h3>' & @CRLF & _ ' <p>✅ 성공: ${value}</p>' & @CRLF & _ ' <p>저장된 데이터가 브라우저를 재시작해도 유지됩니다.</p>`;' & @CRLF & _ ' } catch (e) {' & @CRLF & _ ' demo.innerHTML = `<h3>로컬 스토리지 테스트</h3>' & @CRLF & _ ' <p>❌ 실패: ${e.message}</p>`;' & @CRLF & _ ' }' & @CRLF & _ ' }' & @CRLF & _ '' & @CRLF & _ ' function testGeolocation() {' & @CRLF & _ ' const demo = document.getElementById("demo-area");' & @CRLF & _ ' if ("geolocation" in navigator) {' & @CRLF & _ ' demo.innerHTML = `<h3>위치 정보 테스트</h3>' & @CRLF & _ ' <p>✅ 지오로케이션 API가 지원됩니다!</p>' & @CRLF & _ ' <p>실제 위치는 보안상 표시하지 않습니다.</p>`;' & @CRLF & _ ' } else {' & @CRLF & _ ' demo.innerHTML = `<h3>위치 정보 테스트</h3>' & @CRLF & _ ' <p>❌ 지오로케이션 API가 지원되지 않습니다.</p>`;' & @CRLF & _ ' }' & @CRLF & _ ' }' & @CRLF & _ '' & @CRLF & _ ' function testAnimation() {' & @CRLF & _ ' const demo = document.getElementById("demo-area");' & @CRLF & _ ' demo.innerHTML = `<h3>CSS3 애니메이션 테스트</h3>' & @CRLF & _ ' <div style="width: 100px; height: 100px; background: linear-gradient(45deg, #FF6B6B, #4ECDC4); ' & @CRLF & _ ' border-radius: 50%; margin: 20px auto; ' & @CRLF & _ ' animation: spin 2s linear infinite, pulse 1s ease-in-out infinite alternate;">' & @CRLF & _ ' </div>' & @CRLF & _ ' <style>' & @CRLF & _ ' @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }' & @CRLF & _ ' @keyframes pulse { from { transform: scale(1); } to { transform: scale(1.1); } }' & @CRLF & _ ' </style>' & @CRLF & _ ' <p>✅ CSS3 애니메이션이 정상적으로 작동합니다!</p>`;' & @CRLF & _ ' }' & @CRLF & _ '' & @CRLF & _ ' function testProgress() {' & @CRLF & _ ' const demo = document.getElementById("demo-area");' & @CRLF & _ ' demo.innerHTML = `<h3>HTML5 Progress 테스트</h3>' & @CRLF & _ ' <div class="progress">' & @CRLF & _ ' <div class="progress-bar" id="progressBar"></div>' & @CRLF & _ ' </div>' & @CRLF & _ ' <p id="progressText">0%</p>`;' & @CRLF & _ ' ' & @CRLF & _ ' let progress = 0;' & @CRLF & _ ' const interval = setInterval(() => {' & @CRLF & _ ' progress += 10;' & @CRLF & _ ' document.getElementById("progressBar").style.width = progress + "%";' & @CRLF & _ ' document.getElementById("progressText").textContent = progress + "%";' & @CRLF & _ ' if (progress >= 100) {' & @CRLF & _ ' clearInterval(interval);' & @CRLF & _ ' document.getElementById("progressText").textContent = "✅ 완료!";' & @CRLF & _ ' }' & @CRLF & _ ' }, 200);' & @CRLF & _ ' }' & @CRLF & _ ' </script>' & @CRLF & _ '</body>' & @CRLF & _ '</html>' _LoadHTMLContent($oObject, $sDefaultHTML) EndFunc ; 상태 업데이트 Func _UpdateStatus($sMessage) GUICtrlSetData($idStatusLabel, $sMessage) EndFunc
Content is user-generated and unverified.
    HTML5 뷰어 프로그램 | Claude