├── image.png ├── res └── webview2dlls │ ├── README.md │ ├── WebView2Loader.dll │ ├── Microsoft.Web.WebView2.Core.dll │ └── Microsoft.Web.WebView2.WinForms.dll ├── utable ├── ptable_icon.ico ├── Resources │ ├── check0_b.png │ ├── check0_w.png │ ├── check1_b.png │ ├── check1_w.png │ ├── shadow1.png │ ├── bt_edit_b.png │ ├── bt_edit_w.png │ ├── check0_b_96.png │ ├── check0_w_96.png │ ├── check1_b_96.png │ ├── check1_w_96.png │ ├── closeicon_b.png │ ├── closeicon_w.png │ ├── menuicon_b.png │ ├── menuicon_w.png │ ├── minicon_b.png │ ├── minicon_w.png │ ├── utable_icon.png │ ├── bt_titleapply.png │ ├── bt_titleedit.png │ ├── closeicon_b2.png │ ├── msstore_logo.png │ ├── utable_banner.png │ ├── unused │ │ └── memo_font_b.png │ └── utable_banner_dark.png ├── Program.vb ├── My Project │ ├── Settings.settings │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Application.Designer.vb │ ├── app.manifest │ └── Settings.Designer.vb ├── App.config ├── UserControls │ ├── LoadingSplash.vb │ ├── SettingMenu.Designer.vb │ ├── SettingMenu.vb │ ├── LoadingSplash.Designer.vb │ ├── LoadingSplash.resx │ ├── SettingMenu.resx │ ├── CellControl.resx │ └── CellControl.Designer.vb ├── ApplicationEvents.vb ├── ErrorForm.vb ├── Modules │ ├── INIModule.vb │ ├── WinModule.vb │ └── DataModule.vb ├── Forms │ ├── DLLDownloader.vb │ ├── DLLDownloader.Designer.vb │ ├── StartupAsk.vb │ ├── EveryTimeBrowser.Designer.vb │ ├── DLLDownloader.resx │ ├── StartupAsk.resx │ ├── ViewCourse.resx │ ├── SetCourse.resx │ ├── EveryTimeBrowser.resx │ ├── EveryTimeBrowserNew.resx │ ├── EverytimeSemesterSelector.vb │ ├── EverytimeSemesterSelector.resx │ ├── EveryTimeBrowserNew.Designer.vb │ ├── Form1.resx │ ├── OptionForm.resx │ ├── EveryTimeBrowser.vb │ └── EveryTimeBrowserNew.vb ├── packages.config ├── ErrorForm.resx └── ErrorForm.Designer.vb ├── README.md ├── uTable.sln ├── .gitattributes └── .gitignore /image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/image.png -------------------------------------------------------------------------------- /res/webview2dlls/README.md: -------------------------------------------------------------------------------- 1 | 새 에브리타임 시간표 웹페이지 대응을 위한 WebView2 라이브러리입니다. 2 | -------------------------------------------------------------------------------- /utable/ptable_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/ptable_icon.ico -------------------------------------------------------------------------------- /utable/Resources/check0_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/check0_b.png -------------------------------------------------------------------------------- /utable/Resources/check0_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/check0_w.png -------------------------------------------------------------------------------- /utable/Resources/check1_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/check1_b.png -------------------------------------------------------------------------------- /utable/Resources/check1_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/check1_w.png -------------------------------------------------------------------------------- /utable/Resources/shadow1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/shadow1.png -------------------------------------------------------------------------------- /utable/Resources/bt_edit_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/bt_edit_b.png -------------------------------------------------------------------------------- /utable/Resources/bt_edit_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/bt_edit_w.png -------------------------------------------------------------------------------- /utable/Resources/check0_b_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/check0_b_96.png -------------------------------------------------------------------------------- /utable/Resources/check0_w_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/check0_w_96.png -------------------------------------------------------------------------------- /utable/Resources/check1_b_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/check1_b_96.png -------------------------------------------------------------------------------- /utable/Resources/check1_w_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/check1_w_96.png -------------------------------------------------------------------------------- /utable/Resources/closeicon_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/closeicon_b.png -------------------------------------------------------------------------------- /utable/Resources/closeicon_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/closeicon_w.png -------------------------------------------------------------------------------- /utable/Resources/menuicon_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/menuicon_b.png -------------------------------------------------------------------------------- /utable/Resources/menuicon_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/menuicon_w.png -------------------------------------------------------------------------------- /utable/Resources/minicon_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/minicon_b.png -------------------------------------------------------------------------------- /utable/Resources/minicon_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/minicon_w.png -------------------------------------------------------------------------------- /utable/Resources/utable_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/utable_icon.png -------------------------------------------------------------------------------- /utable/Resources/bt_titleapply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/bt_titleapply.png -------------------------------------------------------------------------------- /utable/Resources/bt_titleedit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/bt_titleedit.png -------------------------------------------------------------------------------- /utable/Resources/closeicon_b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/closeicon_b2.png -------------------------------------------------------------------------------- /utable/Resources/msstore_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/msstore_logo.png -------------------------------------------------------------------------------- /utable/Resources/utable_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/utable_banner.png -------------------------------------------------------------------------------- /res/webview2dlls/WebView2Loader.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/res/webview2dlls/WebView2Loader.dll -------------------------------------------------------------------------------- /utable/Resources/unused/memo_font_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/unused/memo_font_b.png -------------------------------------------------------------------------------- /utable/Resources/utable_banner_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/utable/Resources/utable_banner_dark.png -------------------------------------------------------------------------------- /res/webview2dlls/Microsoft.Web.WebView2.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/res/webview2dlls/Microsoft.Web.WebView2.Core.dll -------------------------------------------------------------------------------- /res/webview2dlls/Microsoft.Web.WebView2.WinForms.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pdjdev/uTable/HEAD/res/webview2dlls/Microsoft.Web.WebView2.WinForms.dll -------------------------------------------------------------------------------- /utable/Program.vb: -------------------------------------------------------------------------------- 1 | Module Program 2 | 3 | Public Sub Main() 4 | Application.EnableVisualStyles() 5 | Application.SetCompatibleTextRenderingDefault(False) 6 | Application.Run(New Form1()) 7 | End Sub 8 | End Module 9 | -------------------------------------------------------------------------------- /utable/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 유테이블 (uTable) 2 | .Net 기반 데스크탑용 시간표 프로그램 3 | 4 | ![screenshot](image.png) 5 | 6 | ## 주요 기능 7 | * 간단하게 사용할 수 있는 데스크탑용 시간표 프로그램 8 | * 강의실, 진도 등 강의별 메모 기능 탑재 9 | * 취향에 맞게 화이트, 다크 테마 변경 및 투명도 설정 가능 10 | * 설치 필요 없이 바로 실행, 포터블 용도로 적합한 크기 (0.5MB) 11 | * 에브리타임 계정으로 로그인해 바로 시간표 불러오기 가능 12 | * 고해상도 디스플레이(HDPI) 환경 대응 13 | -------------------------------------------------------------------------------- /utable/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | Form1 5 | true 6 | 0 7 | true 8 | 0 9 | true 10 | false 11 | -------------------------------------------------------------------------------- /utable/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /utable/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System.Reflection 2 | Imports System.Runtime.InteropServices 3 | 4 | ' 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 5 | ' 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 6 | ' 이러한 특성 값을 변경하세요. 7 | 8 | ' 어셈블리 특성 값을 검토합니다. 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | '이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. 20 | 21 | 22 | ' 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. 23 | ' 24 | ' 주 버전 25 | ' 부 버전 26 | ' 빌드 번호 27 | ' 수정 버전 28 | ' 29 | ' 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를 30 | ' 기본값으로 할 수 있습니다. 31 | ' 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /uTable.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29806.167 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "uTable", "utable\uTable.vbproj", "{F81002BD-7D4C-48FF-A334-07769E79EFCA}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {F81002BD-7D4C-48FF-A334-07769E79EFCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {F81002BD-7D4C-48FF-A334-07769E79EFCA}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {F81002BD-7D4C-48FF-A334-07769E79EFCA}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {F81002BD-7D4C-48FF-A334-07769E79EFCA}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {42BC4786-1254-4847-A4E9-8AB48899DD1C} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /utable/UserControls/LoadingSplash.vb: -------------------------------------------------------------------------------- 1 | Public Class LoadingSplash 2 | Public highColor As New Color 3 | Public lowColor As New Color 4 | Dim activePos As Integer = 1 5 | 6 | Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 7 | Select Case activePos 8 | Case 1 9 | P1.BackColor = highColor 10 | P2.BackColor = lowColor 11 | P3.BackColor = lowColor 12 | P4.BackColor = lowColor 13 | activePos = 2 14 | Case 2 15 | P1.BackColor = lowColor 16 | P2.BackColor = highColor 17 | P3.BackColor = lowColor 18 | P4.BackColor = lowColor 19 | activePos = 3 20 | Case 3 21 | P1.BackColor = lowColor 22 | P2.BackColor = lowColor 23 | P3.BackColor = lowColor 24 | P4.BackColor = highColor 25 | activePos = 4 26 | Case 4 27 | P1.BackColor = lowColor 28 | P2.BackColor = lowColor 29 | P3.BackColor = highColor 30 | P4.BackColor = lowColor 31 | activePos = 1 32 | End Select 33 | End Sub 34 | End Class 35 | -------------------------------------------------------------------------------- /utable/ApplicationEvents.vb: -------------------------------------------------------------------------------- 1 | Imports Microsoft.VisualBasic.ApplicationServices 2 | 3 | Namespace My 4 | ' MyApplication에 대해 다음 이벤트를 사용할 수 있습니다. 5 | ' Startup: 애플리케이션이 시작되고 시작 폼이 만들어지기 전에 발생합니다. 6 | ' Shutdown: 모든 애플리케이션 폼이 닫힌 후에 발생합니다. 이 이벤트는 애플리케이션이 비정상적으로 종료되는 경우에는 발생하지 않습니다. 7 | ' UnhandledException: 애플리케이션에서 처리되지 않은 예외가 발생하는 경우 이 이벤트가 발생합니다. 8 | ' StartupNextInstance: 단일 인스턴스 애플리케이션을 시작할 때 해당 애플리케이션이 이미 활성 상태인 경우 발생합니다. 9 | ' NetworkAvailabilityChanged: 네트워크가 연결되거나 연결이 끊어질 때 발생합니다. 10 | Partial Friend Class MyApplication 11 | 12 | Private Sub MyApplication_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) Handles Me.UnhandledException 13 | e.ExitApplication = False 14 | ErrorForm.RichTextBox1.Text = e.Exception.Message + vbCr + "=====" + vbCr + DateTime.Now.ToString + vbCr + vbCr + e.Exception.ToString 15 | ErrorForm.Show() 16 | End Sub 17 | 18 | Private Sub MyApplication_Shutdown(sender As Object, e As EventArgs) Handles Me.Shutdown 19 | Form1.NotifyIcon1.Visible = False 20 | End Sub 21 | 22 | Private Sub MyApplication_StartupNextInstance(sender As Object, e As StartupNextInstanceEventArgs) Handles Me.StartupNextInstance 23 | Form1.ReopenForm() 24 | End Sub 25 | End Class 26 | End Namespace 27 | -------------------------------------------------------------------------------- /utable/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' 이 코드는 도구를 사용하여 생성되었습니다. 4 | ' 런타임 버전:4.0.30319.42000 5 | ' 6 | ' 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 7 | ' 이러한 변경 내용이 손실됩니다. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | '참고: 자동으로 생성되므로 직접 이 파일을 수정하지 마세요. 변경할 사항이 있거나 18 | ' 파일에서 빌드 오류가 발생하는 경우 프로젝트 디자이너로 19 | ' 이동([프로젝트 속성]으로 이동하거나 솔루션 탐색기에서 My Project 노드를 20 | '두 번 클릭)한 다음 [애플리케이션] 탭에서 변경하세요. 21 | ' 22 | Partial Friend Class MyApplication 23 | 24 | _ 25 | Public Sub New() 26 | MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) 27 | Me.IsSingleInstance = true 28 | Me.EnableVisualStyles = true 29 | Me.SaveMySettingsOnExit = true 30 | Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses 31 | End Sub 32 | 33 | _ 34 | Protected Overrides Sub OnCreateMainForm() 35 | Me.MainForm = Global.uTable.Form1 36 | End Sub 37 | End Class 38 | End Namespace 39 | -------------------------------------------------------------------------------- /utable/ErrorForm.vb: -------------------------------------------------------------------------------- 1 | Public Class ErrorForm 2 | Dim count = 10 3 | Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 4 | count -= 1 5 | Button1.Text = "다시 시작" + vbCr + "(" + count.ToString + " 초후 실행)" 6 | 7 | If count <= 0 Then 8 | Timer1.Stop() 9 | '다시 시작 10 | If MsgBox("'예'를 눌러 프로그램을 다시 시작합니다" + vbCr + vbCr _ 11 | + "(오류 보고를 원할 경우 '아니오'를 눌러 '오류 보고 페이지 열기'를 열어 주세요)", vbInformation + vbYesNo) = vbYes Then 12 | reStarter() 13 | End If 14 | End If 15 | End Sub 16 | 17 | Private Sub ErrorForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load 18 | SetDesktopLocation(Form1.Location.X + (Form1.Width - Width) / 2, Form1.Location.Y + (Form1.Height - Height) / 2) 19 | TopMost = True 20 | 21 | Button1.Text = "다시 시작" + vbCr + "(" + count.ToString + " 초후 실행)" 22 | Timer1.Start() 23 | End Sub 24 | 25 | Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 26 | If MsgBox("설정 파일을 삭제하시겠습니까? (프로그램의 설정이 초기화됩니다.)", vbQuestion + vbYesNo) = vbYes Then 27 | My.Computer.FileSystem.DeleteFile(ININamePath) 28 | Application.Exit() 29 | End If 30 | End Sub 31 | 32 | Private Sub RichTextBox1_MouseClick(sender As Object, e As MouseEventArgs) Handles RichTextBox1.MouseClick 33 | Button1.Text = "다시 시작" 34 | Timer1.Stop() 35 | End Sub 36 | 37 | Private Sub RichTextBox1_VScroll(sender As Object, e As EventArgs) Handles RichTextBox1.VScroll 38 | Button1.Text = "다시 시작" 39 | Timer1.Stop() 40 | End Sub 41 | 42 | Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 43 | '다시 시작 44 | reStarter() 45 | End Sub 46 | 47 | Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 48 | Button1.Text = "다시 시작" 49 | Timer1.Stop() 50 | InfoCopy(Me, RichTextBox1.Text) 51 | Process.Start("https://sw.pbj.kr/apps/utable/report") 52 | Application.Exit() 53 | End Sub 54 | End Class -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /utable/My Project/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 52 | 53 | 54 | 55 | true 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /utable/Modules/INIModule.vb: -------------------------------------------------------------------------------- 1 | Imports System.IO 2 | Imports System.Runtime.InteropServices 3 | Imports System.Text 4 | 5 | Module INIModule 6 | Public ININame As String = "settings.ini" 7 | Public INIPath As String = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\")) 8 | Public ININamePath As String = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\")) + "\settings.ini" 9 | 10 | 11 | #Region "INI 관련 함수들" 12 | 13 | 14 | Public Function GetPrivateProfileString(ByVal lpAppName As String, 15 | ByVal lpKeyName As String, 16 | ByVal lpDefault As String, 17 | ByVal lpReturnedString As StringBuilder, 18 | ByVal nSize As Integer, 19 | ByVal lpFileName As String) As Integer 20 | End Function 21 | 22 | 23 | Public Function WritePrivateProfileString(ByVal lpAppName As String, 24 | ByVal lpKeyName As String, 25 | ByVal lpString As String, 26 | ByVal lpFileName As String) As Boolean 27 | End Function 28 | 29 | Public Function SetINI(ByVal strAppName As String, 30 | ByVal strKey As String, 31 | ByVal strValue As String, 32 | ByVal strFilePath As String) As Boolean 33 | SetINI = WritePrivateProfileString(strAppName, strKey, strValue, strFilePath) 34 | End Function 35 | 36 | Public Function GetINI(ByVal strAppName As String, 37 | ByVal strKey As String, 38 | ByVal strValue As String, 39 | ByVal strFilePath As String) As String 40 | 41 | Dim strbTmp As StringBuilder = New StringBuilder(255) 42 | GetPrivateProfileString(strAppName, strKey, strValue, strbTmp, strbTmp.Capacity, strFilePath) 43 | GetINI = strbTmp.ToString() 44 | End Function 45 | 46 | Public Function Create_INIFile(ByVal strPath As String, ByVal strFileName As String) As Boolean 47 | If Dir(strPath & "\" & strFileName) <> "" Then 48 | '이미 존재하는 경우 49 | Return True 50 | Exit Function 51 | End If 52 | 53 | Try 54 | Using sw As StreamWriter = New StreamWriter(strPath & "\" & strFileName, False) 55 | sw.WriteLine(vbCrLf) 56 | sw.Flush() 57 | sw.Close() 58 | End Using 59 | Catch ex As Exception 60 | Return False 61 | End Try 62 | 63 | Return True 64 | End Function 65 | 66 | #End Region 67 | 68 | End Module 69 | -------------------------------------------------------------------------------- /utable/My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' 이 코드는 도구를 사용하여 생성되었습니다. 4 | ' 런타임 버전:4.0.30319.42000 5 | ' 6 | ' 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 7 | ' 이러한 변경 내용이 손실됩니다. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | _ 20 | Partial Friend NotInheritable Class MySettings 21 | Inherits Global.System.Configuration.ApplicationSettingsBase 22 | 23 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 24 | 25 | #Region "My.Settings 자동 저장 기능" 26 | #If _MyType = "WindowsForms" Then 27 | Private Shared addedHandler As Boolean 28 | 29 | Private Shared addedHandlerLockObject As New Object 30 | 31 | _ 32 | Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) 33 | If My.Application.SaveMySettingsOnExit Then 34 | My.Settings.Save() 35 | End If 36 | End Sub 37 | #End If 38 | #End Region 39 | 40 | Public Shared ReadOnly Property [Default]() As MySettings 41 | Get 42 | 43 | #If _MyType = "WindowsForms" Then 44 | If Not addedHandler Then 45 | SyncLock addedHandlerLockObject 46 | If Not addedHandler Then 47 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 48 | addedHandler = True 49 | End If 50 | End SyncLock 51 | End If 52 | #End If 53 | Return defaultInstance 54 | End Get 55 | End Property 56 | End Class 57 | End Namespace 58 | 59 | Namespace My 60 | 61 | _ 64 | Friend Module MySettingsProperty 65 | 66 | _ 67 | Friend ReadOnly Property Settings() As Global.uTable.My.MySettings 68 | Get 69 | Return Global.uTable.My.MySettings.Default 70 | End Get 71 | End Property 72 | End Module 73 | End Namespace 74 | -------------------------------------------------------------------------------- /utable/Forms/DLLDownloader.vb: -------------------------------------------------------------------------------- 1 | Imports System.Net 2 | 3 | Public Class DLLDownloader 4 | 5 | Dim colorMode As String = Nothing 6 | Dim WithEvents wc As New Net.WebClient 7 | Dim downComplete As Boolean = False 8 | 9 | Dim exeFullpath As String = Application.ExecutablePath 10 | Dim finalDir As String = exeFullpath.Substring(0, exeFullpath.LastIndexOf("\")) 11 | 12 | Const repoLink As String = "https://github.com/pdjdev/uTable/raw/master/res/webview2dlls/" 13 | 14 | Dim downList As New List(Of String) From 15 | {"Microsoft.Web.WebView2.Core.dll", 16 | "Microsoft.Web.WebView2.WinForms.dll", 17 | "WebView2Loader.dll"} 18 | 19 | Dim downCount As Integer = 1 20 | 21 | #Region "Aero 그림자 효과 (Vista이상)" 22 | 23 | Protected Overrides Sub OnHandleCreated(e As EventArgs) 24 | CreateDropShadow(Me) 25 | MyBase.OnHandleCreated(e) 26 | End Sub 27 | 28 | #End Region 29 | 30 | Private Sub FadeInEffect(sender As Object, e As EventArgs) Handles MyBase.Shown 31 | Me.Refresh() 32 | FadeIn(Me, 1) 33 | End Sub 34 | 35 | Private Sub FadeOutEffect(sender As Object, e As EventArgs) Handles MyBase.Closing 36 | FadeOut(Me) 37 | End Sub 38 | Public Sub UpdateColor() 39 | 40 | colorMode = GetINI("SETTING", "ColorMode", "", ININamePath) 41 | 42 | BackColor = edgeColor(colorMode) 43 | TitlePanel.BackColor = tableColor_1(colorMode) 44 | TitlePanel.ForeColor = textColor(colorMode) 45 | MainLabel.BackColor = mainColor(colorMode) 46 | MainLabel.ForeColor = textColor(colorMode) 47 | 48 | End Sub 49 | Sub DownloadFiles() 50 | For Each fileName In downList 51 | MainLabel.Text = $"다운로드 중... ({downCount}/{downList.Count}):" + vbCr + fileName 52 | Refresh() 53 | Threading.Thread.Sleep(100) 54 | Try 55 | Dim client As New WebClient() 56 | client.DownloadFile(repoLink & fileName, finalDir & "\" & fileName) 57 | Catch ex As Exception 58 | MainLabel.Text = $"작업 실패... ({downCount}/{downList.Count}):" + vbCr + fileName 59 | End Try 60 | downCount += 1 61 | Next 62 | End Sub 63 | 64 | Private Sub DLLDownloader_Load(sender As Object, e As EventArgs) Handles MyBase.Load 65 | Opacity = 0 66 | UpdateColor() 67 | End Sub 68 | 69 | Private Sub DLLDownloader_Shown(sender As Object, e As EventArgs) Handles Me.Shown 70 | DownloadFiles() 71 | 72 | If Not (My.Computer.FileSystem.FileExists(finalDir + "\Microsoft.Web.WebView2.Core.dll") And 73 | My.Computer.FileSystem.FileExists(finalDir + "\Microsoft.Web.WebView2.WinForms.dll") And 74 | My.Computer.FileSystem.FileExists(finalDir + "\WebView2Loader.dll")) Then 75 | MsgBox("다운로드 실패!", vbExclamation) 76 | Close() 77 | Else 78 | EveryTimeBrowserNew.Close() 79 | EverytimeSemesterSelector.Close() 80 | EverytimeSemesterSelector.StartPosition = FormStartPosition.Manual 81 | EverytimeSemesterSelector.SetDesktopLocation(Form1.Location.X + (Form1.Width - EverytimeSemesterSelector.Width) / 2, 82 | Form1.Location.Y + (Form1.Height - EverytimeSemesterSelector.Height) / 2) 83 | EverytimeSemesterSelector.Show() 84 | EverytimeSemesterSelector.TopMost = True 85 | Close() 86 | End If 87 | End Sub 88 | End Class -------------------------------------------------------------------------------- /utable/UserControls/SettingMenu.Designer.vb: -------------------------------------------------------------------------------- 1 | _ 2 | Partial Class SettingMenu 3 | Inherits System.Windows.Forms.UserControl 4 | 5 | 'UserControl은 Dispose를 재정의하여 구성 요소 목록을 정리합니다. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Windows Form 디자이너에 필요합니다. 18 | Private components As System.ComponentModel.IContainer 19 | 20 | '참고: 다음 프로시저는 Windows Form 디자이너에 필요합니다. 21 | '수정하려면 Windows Form 디자이너를 사용하십시오. 22 | '코드 편집기에서는 수정하지 마세요. 23 | _ 24 | Private Sub InitializeComponent() 25 | Me.components = New System.ComponentModel.Container() 26 | Me.Panel6 = New System.Windows.Forms.Panel() 27 | Me.SettingLabel = New System.Windows.Forms.Label() 28 | Me.HighlightPanel = New System.Windows.Forms.Panel() 29 | Me.ColorTransitionTimer = New System.Windows.Forms.Timer(Me.components) 30 | Me.Panel6.SuspendLayout() 31 | Me.SuspendLayout() 32 | ' 33 | 'Panel6 34 | ' 35 | Me.Panel6.Controls.Add(Me.SettingLabel) 36 | Me.Panel6.Controls.Add(Me.HighlightPanel) 37 | Me.Panel6.Dock = System.Windows.Forms.DockStyle.Fill 38 | Me.Panel6.Location = New System.Drawing.Point(0, 0) 39 | Me.Panel6.Name = "Panel6" 40 | Me.Panel6.Size = New System.Drawing.Size(126, 39) 41 | Me.Panel6.TabIndex = 2 42 | ' 43 | 'SettingLabel 44 | ' 45 | Me.SettingLabel.BackColor = System.Drawing.Color.White 46 | Me.SettingLabel.Dock = System.Windows.Forms.DockStyle.Fill 47 | Me.SettingLabel.Font = New System.Drawing.Font("맑은 고딕", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 48 | Me.SettingLabel.Location = New System.Drawing.Point(3, 0) 49 | Me.SettingLabel.Name = "SettingLabel" 50 | Me.SettingLabel.Padding = New System.Windows.Forms.Padding(10, 0, 0, 0) 51 | Me.SettingLabel.Size = New System.Drawing.Size(123, 39) 52 | Me.SettingLabel.TabIndex = 2 53 | Me.SettingLabel.Text = "SettingsText" 54 | Me.SettingLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft 55 | ' 56 | 'HighlightPanel 57 | ' 58 | Me.HighlightPanel.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer)) 59 | Me.HighlightPanel.Dock = System.Windows.Forms.DockStyle.Left 60 | Me.HighlightPanel.Location = New System.Drawing.Point(0, 0) 61 | Me.HighlightPanel.Name = "HighlightPanel" 62 | Me.HighlightPanel.Size = New System.Drawing.Size(3, 39) 63 | Me.HighlightPanel.TabIndex = 0 64 | ' 65 | 'ColorTransitionTimer 66 | ' 67 | Me.ColorTransitionTimer.Interval = 10 68 | ' 69 | 'SettingMenu 70 | ' 71 | Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) 72 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 73 | Me.Controls.Add(Me.Panel6) 74 | Me.Name = "SettingMenu" 75 | Me.Size = New System.Drawing.Size(126, 39) 76 | Me.Panel6.ResumeLayout(False) 77 | Me.ResumeLayout(False) 78 | 79 | End Sub 80 | 81 | Friend WithEvents Panel6 As Panel 82 | Friend WithEvents SettingLabel As Label 83 | Friend WithEvents HighlightPanel As Panel 84 | Friend WithEvents ColorTransitionTimer As Timer 85 | End Class 86 | -------------------------------------------------------------------------------- /utable/UserControls/SettingMenu.vb: -------------------------------------------------------------------------------- 1 | Public Class SettingMenu 2 | Public index As Integer = 0 3 | Dim goalColor As Color = Nothing 4 | Dim colormode As String = Nothing 5 | Public first As Boolean = True 6 | Dim selected As Boolean = False 7 | 8 | Public Sub SelectionUpdate(selection As Boolean, cm As String) 9 | selected = selection 10 | colormode = cm 11 | 12 | If selected Then 13 | HighlightPanel.BackColor = FocusedTabColor(colormode) 14 | SettingLabel.Font = New Font(SettingLabel.Font, FontStyle.Bold) 15 | SettingLabel.ForeColor = textColor(colormode) 16 | goalColor = OptionForm.MainPanel.BackColor 17 | Else 18 | HighlightPanel.BackColor = Color.Transparent 19 | SettingLabel.Font = New Font(SettingLabel.Font, FontStyle.Regular) 20 | SettingLabel.ForeColor = lightTextColor(colormode) 21 | goalColor = OptionForm.SidePanel.BackColor 22 | End If 23 | 24 | If first Then 25 | SettingLabel.BackColor = goalColor 26 | first = False 27 | End If 28 | 29 | If Not selected Then HighlightPanel.BackColor = goalColor 30 | 31 | Refresh() 32 | End Sub 33 | 34 | Private Sub SettingLabel_Click(sender As Object, e As EventArgs) Handles SettingLabel.Click 35 | OptionForm.SwitchMode(index) 36 | End Sub 37 | 38 | Private Sub ColorTransitionTimer_Tick(sender As Object, e As EventArgs) Handles ColorTransitionTimer.Tick 39 | If Not goalColor = Nothing And Not goalColor = SettingLabel.BackColor Then 40 | Dim deltaColor As Integer = 2 41 | 42 | Dim R As Byte = SettingLabel.BackColor.R 43 | Dim G As Byte = SettingLabel.BackColor.G 44 | Dim B As Byte = SettingLabel.BackColor.B 45 | 46 | If goalColor.R - deltaColor > R Then 47 | R += deltaColor 48 | ElseIf goalColor.R + deltaColor < R Then 49 | R -= deltaColor 50 | Else 51 | R = goalColor.R 52 | End If 53 | 54 | If goalColor.G - deltaColor > G Then 55 | G += deltaColor 56 | ElseIf goalColor.G + deltaColor < G Then 57 | G -= deltaColor 58 | Else 59 | G = goalColor.G 60 | End If 61 | 62 | If goalColor.B - deltaColor > B Then 63 | B += deltaColor 64 | ElseIf goalColor.B + deltaColor < B Then 65 | B -= deltaColor 66 | Else 67 | B = goalColor.B 68 | End If 69 | 70 | SettingLabel.BackColor = Color.FromArgb(R, G, B) 71 | Panel6.BackColor = Color.FromArgb(R, G, B) 72 | If Not selected Then HighlightPanel.BackColor = Color.FromArgb(R, G, B) 73 | End If 74 | End Sub 75 | 76 | Private Sub SettingMenu_Load(sender As Object, e As EventArgs) Handles Me.Load 77 | goalColor = OptionForm.SidePanel.BackColor 78 | SettingLabel.BackColor = goalColor 79 | ColorTransitionTimer.Start() 80 | End Sub 81 | 82 | Private Sub SettingLabel_MouseEnter(sender As Object, e As EventArgs) Handles SettingLabel.MouseEnter 83 | If Not selected Then 84 | If colormode = "Dark" Then 85 | goalColor = ControlPaint.Light(OptionForm.SidePanel.BackColor, 0.3) 86 | Else 87 | goalColor = ControlPaint.Light(OptionForm.SidePanel.BackColor, 0.8) 88 | End If 89 | End If 90 | End Sub 91 | 92 | Private Sub SettingLabel_MouseLeave(sender As Object, e As EventArgs) Handles SettingLabel.MouseLeave 93 | If selected Then 94 | goalColor = OptionForm.MainPanel.BackColor 95 | Else 96 | goalColor = OptionForm.SidePanel.BackColor 97 | End If 98 | End Sub 99 | End Class 100 | -------------------------------------------------------------------------------- /utable/Forms/DLLDownloader.Designer.vb: -------------------------------------------------------------------------------- 1 | _ 2 | Partial Class DLLDownloader 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form은 Dispose를 재정의하여 구성 요소 목록을 정리합니다. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Windows Form 디자이너에 필요합니다. 18 | Private components As System.ComponentModel.IContainer 19 | 20 | '참고: 다음 프로시저는 Windows Form 디자이너에 필요합니다. 21 | '수정하려면 Windows Form 디자이너를 사용하십시오. 22 | '코드 편집기에서는 수정하지 마세요. 23 | _ 24 | Private Sub InitializeComponent() 25 | Me.MainLabel = New System.Windows.Forms.Label() 26 | Me.TitlePanel = New System.Windows.Forms.Panel() 27 | Me.TitleLabel = New System.Windows.Forms.Label() 28 | Me.TitlePanel.SuspendLayout() 29 | Me.SuspendLayout() 30 | ' 31 | 'MainLabel 32 | ' 33 | Me.MainLabel.BackColor = System.Drawing.Color.White 34 | Me.MainLabel.Dock = System.Windows.Forms.DockStyle.Fill 35 | Me.MainLabel.Font = New System.Drawing.Font("맑은 고딕", 10.0!) 36 | Me.MainLabel.Location = New System.Drawing.Point(1, 28) 37 | Me.MainLabel.Name = "MainLabel" 38 | Me.MainLabel.Size = New System.Drawing.Size(287, 84) 39 | Me.MainLabel.TabIndex = 0 40 | Me.MainLabel.Text = "잠시만 기다려 주세요..!" 41 | Me.MainLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter 42 | ' 43 | 'TitlePanel 44 | ' 45 | Me.TitlePanel.BackColor = System.Drawing.Color.WhiteSmoke 46 | Me.TitlePanel.Controls.Add(Me.TitleLabel) 47 | Me.TitlePanel.Dock = System.Windows.Forms.DockStyle.Top 48 | Me.TitlePanel.Location = New System.Drawing.Point(1, 1) 49 | Me.TitlePanel.Name = "TitlePanel" 50 | Me.TitlePanel.Size = New System.Drawing.Size(287, 27) 51 | Me.TitlePanel.TabIndex = 1 52 | ' 53 | 'TitleLabel 54 | ' 55 | Me.TitleLabel.Dock = System.Windows.Forms.DockStyle.Fill 56 | Me.TitleLabel.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Bold) 57 | Me.TitleLabel.Location = New System.Drawing.Point(0, 0) 58 | Me.TitleLabel.Name = "TitleLabel" 59 | Me.TitleLabel.Padding = New System.Windows.Forms.Padding(8, 0, 0, 0) 60 | Me.TitleLabel.Size = New System.Drawing.Size(287, 27) 61 | Me.TitleLabel.TabIndex = 29 62 | Me.TitleLabel.Text = "구성요소 다운로드" 63 | Me.TitleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft 64 | ' 65 | 'DLLDownloader 66 | ' 67 | Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) 68 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 69 | Me.BackColor = System.Drawing.Color.DimGray 70 | Me.ClientSize = New System.Drawing.Size(289, 113) 71 | Me.ControlBox = False 72 | Me.Controls.Add(Me.MainLabel) 73 | Me.Controls.Add(Me.TitlePanel) 74 | Me.Font = New System.Drawing.Font("맑은 고딕", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 75 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None 76 | Me.Icon = Global.uTable.My.Resources.Resources.ptable_icon 77 | Me.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) 78 | Me.MaximizeBox = False 79 | Me.MinimizeBox = False 80 | Me.Name = "DLLDownloader" 81 | Me.Padding = New System.Windows.Forms.Padding(1) 82 | Me.ShowIcon = False 83 | Me.ShowInTaskbar = False 84 | Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent 85 | Me.Text = "구성요소 다운로드" 86 | Me.TopMost = True 87 | Me.TransparencyKey = System.Drawing.Color.Fuchsia 88 | Me.TitlePanel.ResumeLayout(False) 89 | Me.ResumeLayout(False) 90 | 91 | End Sub 92 | 93 | Friend WithEvents MainLabel As Label 94 | Friend WithEvents TitlePanel As Panel 95 | Friend WithEvents TitleLabel As Label 96 | End Class 97 | -------------------------------------------------------------------------------- /utable/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /utable/Forms/StartupAsk.vb: -------------------------------------------------------------------------------- 1 | Imports System.Runtime.InteropServices 2 | 3 | Public Class StartupAsk 4 | Dim colorMode As String = Nothing 5 | 6 | #Region "Aero 그림자 효과 (Vista이상)" 7 | 8 | Protected Overrides Sub OnHandleCreated(e As EventArgs) 9 | CreateDropShadow(Me) 10 | MyBase.OnHandleCreated(e) 11 | End Sub 12 | 13 | #End Region 14 | 15 | #Region "창 이동, 크기 조절, 붙기 관련" 16 | 17 | 18 | Public Shared Function ReleaseCapture() As Boolean 19 | End Function 20 | 21 | 22 | Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer 23 | End Function 24 | 25 | Private Const WM_NCLBUTTONDOWN As Integer = &HA1 26 | Private Const HTCAPTION As Integer = 2 27 | 28 | Private Sub MoveForm() 29 | ReleaseCapture() 30 | SendMessage(Me.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0) 31 | End Sub 32 | 33 | Private Sub MoveArea_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TitleLabel.MouseDown 34 | If e.Button = Windows.Forms.MouseButtons.Left And Me.WindowState <> FormWindowState.Maximized Then 35 | MoveForm() 36 | End If 37 | End Sub 38 | 39 | #End Region 40 | 41 | Private Sub FadeInEffect(sender As Object, e As EventArgs) Handles MyBase.Shown 42 | Me.Refresh() 43 | FadeIn(Me, 1) 44 | End Sub 45 | 46 | Private Sub FadeOutEffect(sender As Object, e As EventArgs) Handles MyBase.Closing 47 | FadeOut(Me) 48 | End Sub 49 | 50 | Private Sub StartupAsk_Load(sender As Object, e As EventArgs) Handles MyBase.Load 51 | Opacity = 0 52 | 53 | If GetINI("SETTING", "CustomFont", "", ININamePath) = "1" And GetINI("SETTING", "ApplyAllGUIFonts", "", ININamePath) = "1" Then 54 | If Not GetINI("SETTING", "CustomFontName", "", ININamePath) = "" Then 55 | Dim fntname = GetINI("SETTING", "CustomFontName", "", ININamePath) 56 | ChangeToCustomFont(Me, fntname) 57 | End If 58 | End If 59 | 60 | UpdateColor() 61 | End Sub 62 | 63 | Private Sub CloseBT_MouseEnter(sender As Object, e As EventArgs) Handles CloseBT.MouseEnter 64 | CloseBT.BackColor = buttonActiveColor(colormode) 65 | End Sub 66 | 67 | Private Sub CloseBT_MouseLeave(sender As Object, e As EventArgs) Handles CloseBT.MouseLeave 68 | CloseBT.BackColor = Color.Transparent 69 | End Sub 70 | 71 | Private Sub CloseBT_Click(sender As Object, e As EventArgs) Handles CloseBT.Click 72 | Close() 73 | End Sub 74 | 75 | Public Sub UpdateColor() 76 | 77 | colorMode = GetINI("SETTING", "ColorMode", "", ININamePath) 78 | 79 | BackColor = edgeColor(colorMode) 80 | Panel1.BackColor = mainColor(colorMode) 81 | Panel1.ForeColor = textColor(colorMode) 82 | ApplyBT.ForeColor = textColor(colorMode) 83 | NoBT.ForeColor = textColor(colorMode) 84 | TxtLabel.ForeColor = textColor(colorMode) 85 | Label1.ForeColor = lightTextColor(colorMode) 86 | 87 | ApplyBT.BackColor = buttonColor(colorMode) 88 | ApplyBT.FlatAppearance.BorderColor = BorderColor(colorMode) 89 | ApplyBT.FlatAppearance.MouseOverBackColor = buttonActiveColor(colorMode) 90 | ApplyBT.FlatAppearance.MouseDownBackColor = BorderColor(colorMode) 91 | 92 | NoBT.BackColor = buttonColor(colorMode) 93 | NoBT.FlatAppearance.BorderColor = BorderColor(colorMode) 94 | NoBT.FlatAppearance.MouseOverBackColor = buttonActiveColor(colorMode) 95 | NoBT.FlatAppearance.MouseDownBackColor = BorderColor(colorMode) 96 | 97 | Select Case colorMode 98 | Case "Dark" 99 | CloseBT.Image = My.Resources.closeicon_w 100 | Case Else 101 | CloseBT.Image = My.Resources.closeicon_b 102 | End Select 103 | End Sub 104 | 105 | Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged 106 | If CheckBox1.Checked Then 107 | SetINI("SETTING", "NoStartupSuggestion", "1", ININamePath) 108 | Else 109 | SetINI("SETTING", "NoStartupSuggestion", "0", ININamePath) 110 | End If 111 | End Sub 112 | 113 | Private Sub ApplyBT_Click(sender As Object, e As EventArgs) Handles ApplyBT.Click 114 | Try 115 | SetStartup() 116 | Catch ex As Exception 117 | MsgBox("시작프로그램 설정 도중 오류가 발생했습니다. 실행 권한을 확인해 보시기 바랍니다.", vbCritical) 118 | End Try 119 | 120 | Close() 121 | End Sub 122 | 123 | Private Sub NoBT_Click(sender As Object, e As EventArgs) Handles NoBT.Click 124 | Close() 125 | End Sub 126 | End Class -------------------------------------------------------------------------------- /utable/UserControls/LoadingSplash.Designer.vb: -------------------------------------------------------------------------------- 1 | _ 2 | Partial Class LoadingSplash 3 | Inherits System.Windows.Forms.UserControl 4 | 5 | 'UserControl은 Dispose를 재정의하여 구성 요소 목록을 정리합니다. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Windows Form 디자이너에 필요합니다. 18 | Private components As System.ComponentModel.IContainer 19 | 20 | '참고: 다음 프로시저는 Windows Form 디자이너에 필요합니다. 21 | '수정하려면 Windows Form 디자이너를 사용하십시오. 22 | '코드 편집기에서는 수정하지 마세요. 23 | _ 24 | Private Sub InitializeComponent() 25 | Me.components = New System.ComponentModel.Container() 26 | Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() 27 | Me.P1 = New System.Windows.Forms.Panel() 28 | Me.P2 = New System.Windows.Forms.Panel() 29 | Me.P3 = New System.Windows.Forms.Panel() 30 | Me.P4 = New System.Windows.Forms.Panel() 31 | Me.Timer1 = New System.Windows.Forms.Timer(Me.components) 32 | Me.TableLayoutPanel1.SuspendLayout() 33 | Me.SuspendLayout() 34 | ' 35 | 'TableLayoutPanel1 36 | ' 37 | Me.TableLayoutPanel1.BackColor = System.Drawing.Color.Transparent 38 | Me.TableLayoutPanel1.ColumnCount = 3 39 | Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 45.0!)) 40 | Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) 41 | Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 45.0!)) 42 | Me.TableLayoutPanel1.Controls.Add(Me.P1, 0, 0) 43 | Me.TableLayoutPanel1.Controls.Add(Me.P2, 2, 0) 44 | Me.TableLayoutPanel1.Controls.Add(Me.P3, 0, 2) 45 | Me.TableLayoutPanel1.Controls.Add(Me.P4, 2, 2) 46 | Me.TableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill 47 | Me.TableLayoutPanel1.Location = New System.Drawing.Point(0, 0) 48 | Me.TableLayoutPanel1.Name = "TableLayoutPanel1" 49 | Me.TableLayoutPanel1.RowCount = 3 50 | Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 45.0!)) 51 | Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) 52 | Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 45.0!)) 53 | Me.TableLayoutPanel1.Size = New System.Drawing.Size(120, 120) 54 | Me.TableLayoutPanel1.TabIndex = 0 55 | ' 56 | 'P1 57 | ' 58 | Me.P1.Dock = System.Windows.Forms.DockStyle.Fill 59 | Me.P1.Location = New System.Drawing.Point(3, 3) 60 | Me.P1.Name = "P1" 61 | Me.P1.Size = New System.Drawing.Size(48, 48) 62 | Me.P1.TabIndex = 0 63 | ' 64 | 'P2 65 | ' 66 | Me.P2.Dock = System.Windows.Forms.DockStyle.Fill 67 | Me.P2.Location = New System.Drawing.Point(69, 3) 68 | Me.P2.Name = "P2" 69 | Me.P2.Size = New System.Drawing.Size(48, 48) 70 | Me.P2.TabIndex = 1 71 | ' 72 | 'P3 73 | ' 74 | Me.P3.Dock = System.Windows.Forms.DockStyle.Fill 75 | Me.P3.Location = New System.Drawing.Point(3, 69) 76 | Me.P3.Name = "P3" 77 | Me.P3.Size = New System.Drawing.Size(48, 48) 78 | Me.P3.TabIndex = 2 79 | ' 80 | 'P4 81 | ' 82 | Me.P4.Dock = System.Windows.Forms.DockStyle.Fill 83 | Me.P4.Location = New System.Drawing.Point(69, 69) 84 | Me.P4.Name = "P4" 85 | Me.P4.Size = New System.Drawing.Size(48, 48) 86 | Me.P4.TabIndex = 3 87 | ' 88 | 'Timer1 89 | ' 90 | Me.Timer1.Enabled = True 91 | Me.Timer1.Interval = 500 92 | ' 93 | 'LoadingSplash 94 | ' 95 | Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) 96 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 97 | Me.BackColor = System.Drawing.Color.Transparent 98 | Me.Controls.Add(Me.TableLayoutPanel1) 99 | Me.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 100 | Me.Name = "LoadingSplash" 101 | Me.Size = New System.Drawing.Size(120, 120) 102 | Me.TableLayoutPanel1.ResumeLayout(False) 103 | Me.ResumeLayout(False) 104 | 105 | End Sub 106 | 107 | Friend WithEvents TableLayoutPanel1 As TableLayoutPanel 108 | Friend WithEvents P1 As Panel 109 | Friend WithEvents P2 As Panel 110 | Friend WithEvents P3 As Panel 111 | Friend WithEvents P4 As Panel 112 | Friend WithEvents Timer1 As Timer 113 | End Class 114 | -------------------------------------------------------------------------------- /utable/Modules/WinModule.vb: -------------------------------------------------------------------------------- 1 | Imports System.Security.Principal 2 | 3 | Module WinModule 4 | 5 | #Region "시작프로그램설정" 6 | 7 | Dim shortcutname = "\uTable.lnk" 8 | 9 | Public Function checkStartUp() As Boolean 10 | Dim destlnk As String = Environment.GetFolderPath(Environment.SpecialFolder.Startup) & shortcutname 11 | 12 | If IO.File.Exists(destlnk) Then 13 | If GetTargetPath(destlnk) = Application.ExecutablePath Then 14 | Return True 15 | Else 16 | Return False 17 | End If 18 | Else 19 | Return False 20 | End If 21 | End Function 22 | 23 | Sub SetStartup() 24 | Dim Path As String 25 | Dim identity = WindowsIdentity.GetCurrent() 26 | Dim principal = New WindowsPrincipal(identity) 27 | 28 | Path = Environment.GetFolderPath(Environment.SpecialFolder.Startup) & shortcutname 29 | 30 | Dim wsh As Object = CreateObject("WScript.Shell") 31 | 32 | Dim MyShortcut 33 | MyShortcut = wsh.CreateShortcut(Path) 34 | MyShortcut.TargetPath = wsh.ExpandEnvironmentStrings(Application.ExecutablePath) 35 | MyShortcut.WindowStyle = 4 36 | MyShortcut.Save() 37 | End Sub 38 | 39 | Sub RemoveStartup() 40 | My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.Startup) & shortcutname) 41 | End Sub 42 | 43 | '바로가기 목적지경로 리턴 2 44 | Function GetTargetPath(ByVal FileName As String) 45 | Dim Obj As Object 46 | Obj = CreateObject("WScript.Shell") 47 | Dim Shortcut As Object 48 | Shortcut = Obj.CreateShortcut(FileName) 49 | GetTargetPath = Shortcut.TargetPath 50 | End Function 51 | 52 | #End Region 53 | 54 | #Region "프로그램 실행 관리" 55 | 56 | '프로그램 재시작 57 | Public Sub reStarter() 58 | Dim exeFullpath As String = Application.ExecutablePath 59 | Dim exePath = exeFullpath.Substring(0, exeFullpath.LastIndexOf("\")) 60 | Dim exeName = Mid(exeFullpath, exeFullpath.LastIndexOf("\") + 2) 61 | 62 | 'MsgBox("'확인'을 눌러 프로그램을 다시 시작합니다.", vbInformation) 63 | 64 | Dim procStartInfo As New ProcessStartInfo 65 | Dim procExecuting As New Process 66 | 67 | With procStartInfo 68 | .UseShellExecute = True 69 | .FileName = "cmd.exe" 70 | .WindowStyle = ProcessWindowStyle.Hidden 71 | .Arguments = "/k @echo off & taskkill /f /im """ + exeName + """ >nul " _ 72 | + " & timeout /t 1 /nobreak >nul" _ 73 | + " & start """" """ + exeFullpath + """ & exit" 74 | End With 75 | 76 | procExecuting = Process.Start(procStartInfo) 77 | End Sub 78 | 79 | Public Sub InfoCopy(form As Form, Optional errortext As String = "") 80 | Dim cominfo As String = "" 81 | 82 | If Not errortext = "" Then 83 | cominfo += "[ERROR LOG]" + vbCr + errortext + vbCr + vbCr 84 | End If 85 | 86 | If MsgBox("프로그램 설정값을 복사하시겠습니까?" + vbCr + vbCr _ 87 | + "오류 보고일 경우, 더욱 정확한 조사를 위해 '예'를 눌러 복사해 주시기 바랍니다." _ 88 | + vbCr + "(시간표와 같은 민감한 개인 정보는 다음 대화 상자에서 포함 여부를 설정하실 수 있습니다.)", 89 | vbQuestion + vbYesNo) = vbYes Then 90 | Dim g As Graphics = form.CreateGraphics 91 | Dim dpi = g.DpiX.ToString() 92 | 93 | cominfo += "[Device Information]" _ 94 | + vbCr + "AppName: " + My.Application.Info.ProductName _ 95 | + vbCr + "AppVersion: " + My.Application.Info.Version.ToString _ 96 | + vbCr + "OS fullname: " + My.Computer.Info.OSFullName.ToString _ 97 | + vbCr + "OS version: " + My.Computer.Info.OSVersion.ToString _ 98 | + vbCr + "OS Platform: " + My.Computer.Info.OSPlatform.ToString _ 99 | + vbCr + "TotalPhysicalMemory: " + My.Computer.Info.TotalPhysicalMemory.ToString _ 100 | + vbCr + "ScreenDPI: " + dpi _ 101 | + vbCr + "OS type: " 102 | If My.Computer.FileSystem.DirectoryExists("C:\Program Files (x86)") Then 103 | cominfo = cominfo + "64Bit OS" 104 | Else 105 | cominfo = cominfo + "32Bit OS" 106 | End If 107 | 108 | cominfo += vbCr + vbCr + "[Application Settings Value]" + vbCr 109 | '설정값 나열 110 | If My.Computer.FileSystem.FileExists(ININamePath) Then 111 | 'My.Settings.defalutTable = OptionSave() 112 | cominfo += My.Computer.FileSystem.ReadAllText(ININamePath, System.Text.Encoding.GetEncoding(949)) 113 | Else 114 | cominfo += "(None)" 115 | End If 116 | 117 | If MsgBox("현재 적용된 시간표 내용(Default.udata)도 포함하시겠습니까?" + vbCr _ 118 | + vbCr + "(해당 설정은 프로그램 오류 조사시에만 사용됩니다." _ 119 | + "하지만 해당 정보는 민감한 개인 정보이기 때문에 제공하기 원치 않으신 경우 " _ 120 | + "'아니오'를 누르시면 해당 정보는 제외된 채 정보가 복사됩니다)", 121 | vbQuestion + vbYesNo) = vbYes Then 122 | cominfo += vbCr + vbCr + "[uTable Default Data]" + vbCr 123 | cominfo += readTable() 124 | cominfo += vbCr + "[End of Data]" 125 | End If 126 | 127 | cominfo += vbCr + vbCr 128 | 129 | cominfo += "[Report Time]" + vbCr + DateTime.Now.ToString 130 | Clipboard.SetText(cominfo) 131 | MsgBox("복사가 완료되었습니다.", vbInformation) 132 | Else 133 | If Not errortext = "" Then 134 | Clipboard.SetText(cominfo) 135 | MsgBox("복사가 완료되었습니다.", vbInformation) 136 | End If 137 | End If 138 | End Sub 139 | 140 | #End Region 141 | 142 | End Module 143 | -------------------------------------------------------------------------------- /utable/Forms/EveryTimeBrowser.Designer.vb: -------------------------------------------------------------------------------- 1 | 2 | Partial Class EveryTimeBrowser 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form은 Dispose를 재정의하여 구성 요소 목록을 정리합니다. 6 | 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Windows Form 디자이너에 필요합니다. 18 | Private components As System.ComponentModel.IContainer 19 | 20 | '참고: 다음 프로시저는 Windows Form 디자이너에 필요합니다. 21 | '수정하려면 Windows Form 디자이너를 사용하십시오. 22 | '코드 편집기에서는 수정하지 마세요. 23 | 24 | Private Sub InitializeComponent() 25 | Me.components = New System.ComponentModel.Container() 26 | Me.WebBrowser1 = New System.Windows.Forms.WebBrowser() 27 | Me.TableChecker = New System.Windows.Forms.Timer(Me.components) 28 | Me.Panel1 = New System.Windows.Forms.Panel() 29 | Me.CloseBT = New System.Windows.Forms.PictureBox() 30 | Me.Label1 = New System.Windows.Forms.Label() 31 | Me.LoadingSplash1 = New uTable.LoadingSplash() 32 | Me.Panel1.SuspendLayout() 33 | CType(Me.CloseBT, System.ComponentModel.ISupportInitialize).BeginInit() 34 | Me.SuspendLayout() 35 | ' 36 | 'WebBrowser1 37 | ' 38 | Me.WebBrowser1.Dock = System.Windows.Forms.DockStyle.Fill 39 | Me.WebBrowser1.Location = New System.Drawing.Point(0, 65) 40 | Me.WebBrowser1.MinimumSize = New System.Drawing.Size(20, 20) 41 | Me.WebBrowser1.Name = "WebBrowser1" 42 | Me.WebBrowser1.Size = New System.Drawing.Size(380, 398) 43 | Me.WebBrowser1.TabIndex = 0 44 | Me.WebBrowser1.Url = New System.Uri("", System.UriKind.Relative) 45 | ' 46 | 'TableChecker 47 | ' 48 | Me.TableChecker.Interval = 500 49 | ' 50 | 'Panel1 51 | ' 52 | Me.Panel1.BackColor = System.Drawing.Color.White 53 | Me.Panel1.Controls.Add(Me.CloseBT) 54 | Me.Panel1.Controls.Add(Me.WebBrowser1) 55 | Me.Panel1.Controls.Add(Me.Label1) 56 | Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill 57 | Me.Panel1.Location = New System.Drawing.Point(1, 1) 58 | Me.Panel1.Name = "Panel1" 59 | Me.Panel1.Size = New System.Drawing.Size(380, 463) 60 | Me.Panel1.TabIndex = 1 61 | ' 62 | 'CloseBT 63 | ' 64 | Me.CloseBT.BackColor = System.Drawing.Color.White 65 | Me.CloseBT.Image = Global.uTable.My.Resources.Resources.closeicon_b 66 | Me.CloseBT.Location = New System.Drawing.Point(347, 3) 67 | Me.CloseBT.Name = "CloseBT" 68 | Me.CloseBT.Size = New System.Drawing.Size(30, 30) 69 | Me.CloseBT.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom 70 | Me.CloseBT.TabIndex = 29 71 | Me.CloseBT.TabStop = False 72 | ' 73 | 'Label1 74 | ' 75 | Me.Label1.BackColor = System.Drawing.Color.White 76 | Me.Label1.Dock = System.Windows.Forms.DockStyle.Top 77 | Me.Label1.Font = New System.Drawing.Font("맑은 고딕", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 78 | Me.Label1.ForeColor = System.Drawing.Color.Gray 79 | Me.Label1.Location = New System.Drawing.Point(0, 0) 80 | Me.Label1.Name = "Label1" 81 | Me.Label1.Size = New System.Drawing.Size(380, 65) 82 | Me.Label1.TabIndex = 0 83 | Me.Label1.Text = "시간표를 불러 올 에브리타임 계정으로" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "로그인 해 주세요." 84 | Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter 85 | ' 86 | 'LoadingSplash1 87 | ' 88 | Me.LoadingSplash1.BackColor = System.Drawing.Color.Transparent 89 | Me.LoadingSplash1.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 90 | Me.LoadingSplash1.Location = New System.Drawing.Point(16, 401) 91 | Me.LoadingSplash1.Margin = New System.Windows.Forms.Padding(4) 92 | Me.LoadingSplash1.Name = "LoadingSplash1" 93 | Me.LoadingSplash1.Size = New System.Drawing.Size(50, 50) 94 | Me.LoadingSplash1.TabIndex = 30 95 | ' 96 | 'EveryTimeBrowser 97 | ' 98 | Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) 99 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 100 | Me.BackColor = System.Drawing.Color.Gray 101 | Me.ClientSize = New System.Drawing.Size(382, 465) 102 | Me.Controls.Add(Me.LoadingSplash1) 103 | Me.Controls.Add(Me.Panel1) 104 | Me.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 105 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None 106 | Me.Icon = Global.uTable.My.Resources.Resources.ptable_icon 107 | Me.Name = "EveryTimeBrowser" 108 | Me.Padding = New System.Windows.Forms.Padding(1) 109 | Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent 110 | Me.Text = "에브리타임 시간표 불러오기" 111 | Me.TopMost = True 112 | Me.TransparencyKey = System.Drawing.Color.Fuchsia 113 | Me.Panel1.ResumeLayout(False) 114 | CType(Me.CloseBT, System.ComponentModel.ISupportInitialize).EndInit() 115 | Me.ResumeLayout(False) 116 | 117 | End Sub 118 | 119 | Friend WithEvents WebBrowser1 As WebBrowser 120 | Friend WithEvents TableChecker As Timer 121 | Friend WithEvents Panel1 As Panel 122 | Friend WithEvents Label1 As Label 123 | Friend WithEvents CloseBT As PictureBox 124 | Friend WithEvents LoadingSplash1 As LoadingSplash 125 | End Class 126 | -------------------------------------------------------------------------------- /utable/Modules/DataModule.vb: -------------------------------------------------------------------------------- 1 | Imports System.IO 2 | Imports System.Web 3 | 'Imports System.Text.RegularExpressions 4 | 'Imports System.Xml 5 | 6 | Module DataModule 7 | 'web에서 문자열 가져오는 함수 8 | Public Function webget(url As String) 9 | Dim source = New System.Net.WebClient() 10 | source.Encoding = System.Text.Encoding.UTF8 11 | 'MsgBox(url) 12 | 13 | Dim sourcestr As String = Nothing 14 | sourcestr = source.DownloadString(url) 15 | 16 | Return sourcestr 17 | End Function 18 | 19 | 'xml형식 파일을 전체값에서 따로 추출하는 함수 20 | Public Function getData(datastr As String, name As String) As String 21 | Return midReturn("<" + name + ">", "", datastr) 22 | 23 | End Function 24 | 25 | Public Function getData_withkeys(datastr As String, name As String) As String 26 | Return midReturn_withkeys("<" + name + ">", "", datastr) 27 | 28 | End Function 29 | 30 | Public Function getDatas(datastr As String, name As String) As List(Of String) 31 | Return multipleMidReturn("<" + name + ">", "", datastr) 32 | 33 | End Function 34 | 35 | 'HEX색상값을 RGB로 바꿔주는 함수 36 | Public Function ConvertToRbg(ByVal HexColor As String) As Color 37 | Dim Red As String 38 | Dim Green As String 39 | Dim Blue As String 40 | HexColor = Replace(HexColor, "#", "") 41 | Red = Val("&H" & Mid(HexColor, 1, 2)) 42 | Green = Val("&H" & Mid(HexColor, 3, 2)) 43 | Blue = Val("&H" & Mid(HexColor, 5, 2)) 44 | Return Color.FromArgb(Red, Green, Blue) 45 | End Function 46 | 47 | '중간의 문자열을 리턴하는 함수 48 | Public Function midReturn(ByVal first As String, ByVal last As String, ByVal total As String) As String 49 | If total.Contains(first) Then 50 | Dim FirstStart As Long = total.IndexOf(first) + first.Length + 1 51 | Return Trim(Mid$(total, FirstStart, total.Substring(FirstStart).IndexOf(last) + 1)) 52 | Else 53 | Return Nothing 54 | End If 55 | End Function 56 | 57 | '중간의 문자열을 리턴하는 함수 58 | Public Function midReturn_withkeys(ByVal first As String, ByVal last As String, ByVal total As String) As String 59 | If total.Contains(first) Then 60 | Dim FirstStart As Long = total.IndexOf(first) + 1 61 | Return Trim(Mid$(total, FirstStart, total.Substring(FirstStart).IndexOf(last) + last.Length + 1)) 62 | Else 63 | Return Nothing 64 | End If 65 | End Function 66 | 67 | '중간의 문자열을 여러개 List로 리턴하는 함수 68 | Public Function multipleMidReturn(ByVal first As String, ByVal last As String, ByRef total As String) As List(Of String) 69 | If total.Contains(first) Then 70 | Dim tmptotal = total 71 | Dim res As New List(Of String) 72 | 73 | While tmptotal.Contains(first) = True 74 | Dim FirstStart As Long = tmptotal.IndexOf(first) + first.Length + 1 75 | res.Add(Trim(Mid$(tmptotal, FirstStart, tmptotal.Substring(FirstStart).IndexOf(last) + 1))) 76 | tmptotal = Mid(tmptotal, FirstStart, tmptotal.Length) 77 | End While 78 | 79 | Return res 80 | Else 81 | Return Nothing 82 | End If 83 | End Function 84 | 85 | Public Sub writeTable(data As String) 86 | My.Computer.FileSystem.WriteAllText(TableSaveLocation(False), data, False, System.Text.Encoding.GetEncoding(949)) 87 | End Sub 88 | 89 | Public Function readTable() As String 90 | If My.Computer.FileSystem.FileExists(TableSaveLocation(False)) Then 91 | 'My.Settings.defalutTable = OptionSave() 92 | Return My.Computer.FileSystem.ReadAllText(TableSaveLocation(False), System.Text.Encoding.GetEncoding(949)) 93 | Else 94 | Return "" 95 | End If 96 | End Function 97 | 98 | Public Function TableSaveLocation(filenameOnly As Boolean) As String 99 | Dim exeFullpath As String = Application.ExecutablePath 100 | Dim finalDir As String = exeFullpath.Substring(0, exeFullpath.LastIndexOf("\")) 101 | Dim finalName As String = "default.utdata" 102 | 103 | '임의 경로 옵션 활성화시 104 | If GetINI("SETTING", "CustomSaveDir", "", ININamePath) = "1" Then 105 | Dim usrDir As String = GetINI("SETTING", "SaveDirectory", "", ININamePath) 106 | Dim usrSaveName As String = GetINI("SETTING", "SaveName", "", ININamePath) 107 | 108 | '사용자가 지정한 디렉토리가 존재할때 109 | If My.Computer.FileSystem.DirectoryExists(usrDir) Then 110 | finalDir = usrDir 111 | '존재 안함 -> 기본 디렉토리 (같은 폴더) 결정 112 | End If 113 | 114 | '파일명이 암것도 아닌게 아닐때 115 | If Not usrSaveName = "" Then 116 | finalName = usrSaveName + ".utdata" 117 | End If 118 | End If 119 | 120 | If filenameOnly Then 121 | Return finalName 122 | Else 123 | Return finalDir + "\" + finalName 124 | End If 125 | End Function 126 | 127 | Public Function FilenameIsOK(ByVal fileNameAndPath As String) As Boolean 128 | Try 129 | Dim fileName = Path.GetFileName(fileNameAndPath) 130 | Dim directory = Path.GetDirectoryName(fileNameAndPath) 131 | For Each c In Path.GetInvalidFileNameChars() 132 | If fileName.Contains(c) Then 133 | Return False 134 | End If 135 | Next 136 | For Each c In Path.GetInvalidPathChars() 137 | If directory.Contains(c) Then 138 | Return False 139 | End If 140 | Next 141 | Catch ex As Exception 142 | Return False 143 | End Try 144 | 145 | Return True 146 | End Function 147 | 148 | Public Function xmlEncode(value As String) As String 149 | Return HttpUtility.HtmlEncode(value) 150 | End Function 151 | 152 | Public Function xmlDecode(value As String) As String 153 | Return HttpUtility.HtmlDecode(value) 154 | End Function 155 | End Module 156 | -------------------------------------------------------------------------------- /utable/Forms/DLLDownloader.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /utable/Forms/StartupAsk.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /utable/Forms/ViewCourse.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /utable/ErrorForm.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /utable/Forms/SetCourse.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 18, 12 122 | 123 | -------------------------------------------------------------------------------- /utable/UserControls/LoadingSplash.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /utable/Forms/EveryTimeBrowser.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /utable/Forms/EveryTimeBrowserNew.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /utable/UserControls/SettingMenu.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /utable/Forms/EverytimeSemesterSelector.vb: -------------------------------------------------------------------------------- 1 | Imports System.Runtime.InteropServices 2 | 3 | Public Class EverytimeSemesterSelector 4 | Dim colorMode As String = Nothing 5 | Dim step_num As Integer = 1 6 | 7 | #Region "Aero 그림자 효과 (Vista이상)" 8 | 9 | Protected Overrides Sub OnHandleCreated(e As EventArgs) 10 | CreateDropShadow(Me) 11 | MyBase.OnHandleCreated(e) 12 | End Sub 13 | 14 | #End Region 15 | 16 | #Region "창 이동, 크기 조절, 붙기 관련" 17 | 18 | 19 | Public Shared Function ReleaseCapture() As Boolean 20 | End Function 21 | 22 | 23 | Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer 24 | End Function 25 | 26 | Private Const WM_NCLBUTTONDOWN As Integer = &HA1 27 | Private Const HTCAPTION As Integer = 2 28 | 29 | Private Sub MoveForm() 30 | ReleaseCapture() 31 | SendMessage(Me.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0) 32 | End Sub 33 | 34 | Private Sub MoveArea_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TitleLabel.MouseDown 35 | If e.Button = Windows.Forms.MouseButtons.Left And Me.WindowState <> FormWindowState.Maximized Then 36 | MoveForm() 37 | End If 38 | End Sub 39 | 40 | #End Region 41 | 42 | Private Sub FadeInEffect(sender As Object, e As EventArgs) Handles MyBase.Shown 43 | Me.Refresh() 44 | FadeIn(Me, 1) 45 | TopMost = False 46 | End Sub 47 | 48 | Private Sub FadeOutEffect(sender As Object, e As EventArgs) Handles MyBase.Closing 49 | FadeOut(Me) 50 | End Sub 51 | 52 | Private Sub EverytimeSemesterSelector_Load(sender As Object, e As EventArgs) Handles MyBase.Load 53 | AgreementRTB.Text = AgreementRTB.Text.Replace("[FileName]", TableSaveLocation(True)) 54 | 55 | Step1Panel.Visible = True 56 | Step2Panel.Visible = False 57 | 58 | yearUpd.Value = Now.Year 59 | Opacity = 0 60 | UpdateColor() 61 | End Sub 62 | 63 | Private Sub CloseBT_MouseEnter(sender As Object, e As EventArgs) Handles CloseBT.MouseEnter 64 | CloseBT.BackColor = buttonActiveColor(colorMode) 65 | End Sub 66 | 67 | Private Sub CloseBT_MouseLeave(sender As Object, e As EventArgs) Handles CloseBT.MouseLeave 68 | CloseBT.BackColor = Color.Transparent 69 | End Sub 70 | 71 | Private Sub CloseBT_Click(sender As Object, e As EventArgs) Handles CloseBT.Click 72 | Close() 73 | End Sub 74 | 75 | Public Sub UpdateColor() 76 | 77 | colorMode = GetINI("SETTING", "ColorMode", "", ININamePath) 78 | 79 | BackColor = edgeColor(colorMode) 80 | Panel1.BackColor = mainColor(colorMode) 81 | Panel1.ForeColor = textColor(colorMode) 82 | NextBT.ForeColor = textColor(colorMode) 83 | Label3.ForeColor = textColor(colorMode) 84 | Label4.ForeColor = textColor(colorMode) 85 | autoChk.ForeColor = textColor(colorMode) 86 | AgreementRTB.BackColor = mainColor(colorMode) 87 | AgreementRTB.ForeColor = textColor(colorMode) 88 | tipLabel.ForeColor = lightTextColor(colorMode) 89 | 90 | NextBT.BackColor = buttonColor(colorMode) 91 | NextBT.FlatAppearance.BorderColor = BorderColor(colorMode) 92 | NextBT.FlatAppearance.MouseOverBackColor = buttonActiveColor(colorMode) 93 | NextBT.FlatAppearance.MouseDownBackColor = BorderColor(colorMode) 94 | 95 | Select Case colorMode 96 | Case "Dark" 97 | CloseBT.Image = My.Resources.closeicon_w 98 | Case Else 99 | CloseBT.Image = My.Resources.closeicon_b 100 | End Select 101 | End Sub 102 | 103 | Private Sub autoChk_CheckedChanged(sender As Object, e As EventArgs) Handles autoChk.CheckedChanged 104 | semesterCombo.Enabled = Not autoChk.Checked 105 | yearUpd.Enabled = Not autoChk.Checked 106 | End Sub 107 | 108 | Private Sub NextBT_Click(sender As Object, e As EventArgs) Handles NextBT.Click 109 | Select Case step_num 110 | Case 1 111 | If semesterCombo.SelectedIndex = -1 And Not autoChk.Checked Then 112 | MsgBox("학기를 선택해 주세요.", vbExclamation) 113 | Exit Sub 114 | End If 115 | 116 | Height += dpicalc(Me, 100) 117 | SetDesktopLocation(Location.X, Location.Y - dpicalc(Me, 100) / 2) 118 | 119 | Step1Panel.Visible = False 120 | Step2Panel.Visible = True 121 | 122 | NextBT.Text = "로그인하기" 123 | 124 | step_num += 1 125 | Case 2 126 | Select Case semesterCombo.SelectedIndex 127 | Case 0 '1학기 128 | EveryTimeBrowserNew.targetUrl = "https://everytime.kr/timetable/" + yearUpd.Value.ToString + "/1" 129 | Case 1 '여름학기 130 | EveryTimeBrowserNew.targetUrl = "https://everytime.kr/timetable/" + yearUpd.Value.ToString + "/%EC%97%AC%EB%A6%84" 131 | Case 2 '2학기 132 | EveryTimeBrowserNew.targetUrl = "https://everytime.kr/timetable/" + yearUpd.Value.ToString + "/2" 133 | Case 3 '겨울학기 134 | EveryTimeBrowserNew.targetUrl = "https://everytime.kr/timetable/" + yearUpd.Value.ToString + "/%EA%B2%A8%EC%9A%B8" 135 | Case Else 136 | EveryTimeBrowserNew.targetUrl = "https://everytime.kr/timetable" 137 | End Select 138 | 139 | FadeOut(Me) 140 | Hide() 141 | Try 142 | EveryTimeBrowserNew.ShowDialog(Form1) 143 | Catch ex As Exception 144 | If MsgBox("브라우저 실행 중 문제가 발생했습니다." + vbCr _ 145 | + "(" + ex.Message + ")" + vbCr + vbCr _ 146 | + "문제 해결 페이지로 이동하시겠습니까?", vbExclamation + vbYesNo) = vbYes Then 147 | TopMost = False 148 | Process.Start("https://utable.sw.pbj.kr/everytime-troubleshooting") 149 | Close() 150 | End If 151 | End Try 152 | 153 | Close() 154 | End Select 155 | End Sub 156 | End Class -------------------------------------------------------------------------------- /utable/UserControls/CellControl.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 107, 17 125 | 126 | -------------------------------------------------------------------------------- /utable/Forms/EverytimeSemesterSelector.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | [주의] 122 | 에브리타임 시간표를 불러오게 되면 기존 시간표([FileName])는 지워지므로 필요한 경우 백업하시기 바랍니다! 123 | 124 | 에브리타임 시간표 불러오기 기능은 자체 브라우저에서 직접 시간표의 값을 읽어들여 uTable에 맞게 자동으로 입력해주는 기능입니다. 125 | 126 | 시간표를 불러오기 위해서는 사용자의 계정으로 로그인하여 시간표 페이지로 접속해야 하는데, 이때문에 사용자는 에브리타임 계정으로 로그인을 하여야 합니다. 로그인 웹페이지로 접속하여 브라우저에서 로그인 하는 것이기 때문에 uTable에서는 ID, 비밀번호를 포함한 어떠한 개인정보도 수집하지 않습니다. 그래도 프로그램 내에서 로그인 하시는 것이 불편하실경우 얼마든지 해당 창을 닫고 직접 추가하셔도 됩니다. 127 | 128 | 에브리타임에서 공식적으로 지원하고 있는 기능이 아니기 때문에 여러 가지 요인으로 인해(예: 사이트 디자인 변경 등) 작동이 원활하지 않을 수 있습니다. 해당 기능이 정상적으로 작동하지 않는 경우, uTable 공식 페이지로 가서 최신 버전을 받아 시도해보시고, 여전히 작동이 되지 않는다면 uTable 프로그램 설정 > 정보 > 오류 보고/피드백 남기기 텍스트를 클릭하셔서 접수해주시면 가능한 빨리 업데이트하도록 하겠습니다. 129 | 130 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | [Aa][Rr][Mm]/ 24 | [Aa][Rr][Mm]64/ 25 | bld/ 26 | [Bb]in/ 27 | [Oo]bj/ 28 | [Ll]og/ 29 | 30 | # Visual Studio 2015/2017 cache/options directory 31 | .vs/ 32 | # Uncomment if you have tasks that create the project's static files in wwwroot 33 | #wwwroot/ 34 | 35 | # Visual Studio 2017 auto generated files 36 | Generated\ Files/ 37 | 38 | # MSTest test Results 39 | [Tt]est[Rr]esult*/ 40 | [Bb]uild[Ll]og.* 41 | 42 | # NUNIT 43 | *.VisualState.xml 44 | TestResult.xml 45 | 46 | # Build Results of an ATL Project 47 | [Dd]ebugPS/ 48 | [Rr]eleasePS/ 49 | dlldata.c 50 | 51 | # Benchmark Results 52 | BenchmarkDotNet.Artifacts/ 53 | 54 | # .NET Core 55 | project.lock.json 56 | project.fragment.lock.json 57 | artifacts/ 58 | 59 | # StyleCop 60 | StyleCopReport.xml 61 | 62 | # Files built by Visual Studio 63 | *_i.c 64 | *_p.c 65 | *_h.h 66 | *.ilk 67 | *.meta 68 | *.obj 69 | *.iobj 70 | *.pch 71 | *.pdb 72 | *.ipdb 73 | *.pgc 74 | *.pgd 75 | *.rsp 76 | *.sbr 77 | *.tlb 78 | *.tli 79 | *.tlh 80 | *.tmp 81 | *.tmp_proj 82 | *_wpftmp.csproj 83 | *.log 84 | *.vspscc 85 | *.vssscc 86 | .builds 87 | *.pidb 88 | *.svclog 89 | *.scc 90 | 91 | # Chutzpah Test files 92 | _Chutzpah* 93 | 94 | # Visual C++ cache files 95 | ipch/ 96 | *.aps 97 | *.ncb 98 | *.opendb 99 | *.opensdf 100 | *.sdf 101 | *.cachefile 102 | *.VC.db 103 | *.VC.VC.opendb 104 | 105 | # Visual Studio profiler 106 | *.psess 107 | *.vsp 108 | *.vspx 109 | *.sap 110 | 111 | # Visual Studio Trace Files 112 | *.e2e 113 | 114 | # TFS 2012 Local Workspace 115 | $tf/ 116 | 117 | # Guidance Automation Toolkit 118 | *.gpState 119 | 120 | # ReSharper is a .NET coding add-in 121 | _ReSharper*/ 122 | *.[Rr]e[Ss]harper 123 | *.DotSettings.user 124 | 125 | # JustCode is a .NET coding add-in 126 | .JustCode 127 | 128 | # TeamCity is a build add-in 129 | _TeamCity* 130 | 131 | # DotCover is a Code Coverage Tool 132 | *.dotCover 133 | 134 | # AxoCover is a Code Coverage Tool 135 | .axoCover/* 136 | !.axoCover/settings.json 137 | 138 | # Visual Studio code coverage results 139 | *.coverage 140 | *.coveragexml 141 | 142 | # NCrunch 143 | _NCrunch_* 144 | .*crunch*.local.xml 145 | nCrunchTemp_* 146 | 147 | # MightyMoose 148 | *.mm.* 149 | AutoTest.Net/ 150 | 151 | # Web workbench (sass) 152 | .sass-cache/ 153 | 154 | # Installshield output folder 155 | [Ee]xpress/ 156 | 157 | # DocProject is a documentation generator add-in 158 | DocProject/buildhelp/ 159 | DocProject/Help/*.HxT 160 | DocProject/Help/*.HxC 161 | DocProject/Help/*.hhc 162 | DocProject/Help/*.hhk 163 | DocProject/Help/*.hhp 164 | DocProject/Help/Html2 165 | DocProject/Help/html 166 | 167 | # Click-Once directory 168 | publish/ 169 | 170 | # Publish Web Output 171 | *.[Pp]ublish.xml 172 | *.azurePubxml 173 | # Note: Comment the next line if you want to checkin your web deploy settings, 174 | # but database connection strings (with potential passwords) will be unencrypted 175 | *.pubxml 176 | *.publishproj 177 | 178 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 179 | # checkin your Azure Web App publish settings, but sensitive information contained 180 | # in these scripts will be unencrypted 181 | PublishScripts/ 182 | 183 | # NuGet Packages 184 | *.nupkg 185 | # The packages folder can be ignored because of Package Restore 186 | **/[Pp]ackages/* 187 | # except build/, which is used as an MSBuild target. 188 | !**/[Pp]ackages/build/ 189 | # Uncomment if necessary however generally it will be regenerated when needed 190 | #!**/[Pp]ackages/repositories.config 191 | # NuGet v3's project.json files produces more ignorable files 192 | *.nuget.props 193 | *.nuget.targets 194 | 195 | # Microsoft Azure Build Output 196 | csx/ 197 | *.build.csdef 198 | 199 | # Microsoft Azure Emulator 200 | ecf/ 201 | rcf/ 202 | 203 | # Windows Store app package directories and files 204 | AppPackages/ 205 | BundleArtifacts/ 206 | Package.StoreAssociation.xml 207 | _pkginfo.txt 208 | *.appx 209 | 210 | # Visual Studio cache files 211 | # files ending in .cache can be ignored 212 | *.[Cc]ache 213 | # but keep track of directories ending in .cache 214 | !?*.[Cc]ache/ 215 | 216 | # Others 217 | ClientBin/ 218 | ~$* 219 | *~ 220 | *.dbmdl 221 | *.dbproj.schemaview 222 | *.jfm 223 | *.pfx 224 | *.publishsettings 225 | orleans.codegen.cs 226 | 227 | # Including strong name files can present a security risk 228 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 229 | #*.snk 230 | 231 | # Since there are multiple workflows, uncomment next line to ignore bower_components 232 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 233 | #bower_components/ 234 | 235 | # RIA/Silverlight projects 236 | Generated_Code/ 237 | 238 | # Backup & report files from converting an old project file 239 | # to a newer Visual Studio version. Backup files are not needed, 240 | # because we have git ;-) 241 | _UpgradeReport_Files/ 242 | Backup*/ 243 | UpgradeLog*.XML 244 | UpgradeLog*.htm 245 | ServiceFabricBackup/ 246 | *.rptproj.bak 247 | 248 | # SQL Server files 249 | *.mdf 250 | *.ldf 251 | *.ndf 252 | 253 | # Business Intelligence projects 254 | *.rdl.data 255 | *.bim.layout 256 | *.bim_*.settings 257 | *.rptproj.rsuser 258 | *- Backup*.rdl 259 | 260 | # Microsoft Fakes 261 | FakesAssemblies/ 262 | 263 | # GhostDoc plugin setting file 264 | *.GhostDoc.xml 265 | 266 | # Node.js Tools for Visual Studio 267 | .ntvs_analysis.dat 268 | node_modules/ 269 | 270 | # Visual Studio 6 build log 271 | *.plg 272 | 273 | # Visual Studio 6 workspace options file 274 | *.opt 275 | 276 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 277 | *.vbw 278 | 279 | # Visual Studio LightSwitch build output 280 | **/*.HTMLClient/GeneratedArtifacts 281 | **/*.DesktopClient/GeneratedArtifacts 282 | **/*.DesktopClient/ModelManifest.xml 283 | **/*.Server/GeneratedArtifacts 284 | **/*.Server/ModelManifest.xml 285 | _Pvt_Extensions 286 | 287 | # Paket dependency manager 288 | .paket/paket.exe 289 | paket-files/ 290 | 291 | # FAKE - F# Make 292 | .fake/ 293 | 294 | # JetBrains Rider 295 | .idea/ 296 | *.sln.iml 297 | 298 | # CodeRush personal settings 299 | .cr/personal 300 | 301 | # Python Tools for Visual Studio (PTVS) 302 | __pycache__/ 303 | *.pyc 304 | 305 | # Cake - Uncomment if you are using it 306 | # tools/** 307 | # !tools/packages.config 308 | 309 | # Tabs Studio 310 | *.tss 311 | 312 | # Telerik's JustMock configuration file 313 | *.jmconfig 314 | 315 | # BizTalk build output 316 | *.btp.cs 317 | *.btm.cs 318 | *.odx.cs 319 | *.xsd.cs 320 | 321 | # OpenCover UI analysis results 322 | OpenCover/ 323 | 324 | # Azure Stream Analytics local run output 325 | ASALocalRun/ 326 | 327 | # MSBuild Binary and Structured Log 328 | *.binlog 329 | 330 | # NVidia Nsight GPU debugger configuration file 331 | *.nvuser 332 | 333 | # MFractors (Xamarin productivity tool) working folder 334 | .mfractor/ 335 | 336 | # Local History for Visual Studio 337 | .localhistory/ 338 | 339 | # BeatPulse healthcheck temp database 340 | healthchecksdb -------------------------------------------------------------------------------- /utable/Forms/EveryTimeBrowserNew.Designer.vb: -------------------------------------------------------------------------------- 1 | 2 | Partial Class EveryTimeBrowserNew 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form은 Dispose를 재정의하여 구성 요소 목록을 정리합니다. 6 | 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Windows Form 디자이너에 필요합니다. 18 | Private components As System.ComponentModel.IContainer 19 | 20 | '참고: 다음 프로시저는 Windows Form 디자이너에 필요합니다. 21 | '수정하려면 Windows Form 디자이너를 사용하십시오. 22 | '코드 편집기에서는 수정하지 마세요. 23 | 24 | Private Sub InitializeComponent() 25 | Me.components = New System.ComponentModel.Container() 26 | Me.TableChecker = New System.Windows.Forms.Timer(Me.components) 27 | Me.Panel1 = New System.Windows.Forms.Panel() 28 | Me.WebView21 = New Microsoft.Web.WebView2.WinForms.WebView2() 29 | Me.Panel2 = New System.Windows.Forms.Panel() 30 | Me.TSLinkLabel1 = New System.Windows.Forms.LinkLabel() 31 | Me.CloseBT = New System.Windows.Forms.PictureBox() 32 | Me.Label1 = New System.Windows.Forms.Label() 33 | Me.LoadingSplash1 = New uTable.LoadingSplash() 34 | Me.Panel1.SuspendLayout() 35 | CType(Me.WebView21, System.ComponentModel.ISupportInitialize).BeginInit() 36 | Me.Panel2.SuspendLayout() 37 | CType(Me.CloseBT, System.ComponentModel.ISupportInitialize).BeginInit() 38 | Me.SuspendLayout() 39 | ' 40 | 'TableChecker 41 | ' 42 | Me.TableChecker.Interval = 500 43 | ' 44 | 'Panel1 45 | ' 46 | Me.Panel1.BackColor = System.Drawing.Color.White 47 | Me.Panel1.Controls.Add(Me.LoadingSplash1) 48 | Me.Panel1.Controls.Add(Me.WebView21) 49 | Me.Panel1.Controls.Add(Me.Panel2) 50 | Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill 51 | Me.Panel1.Location = New System.Drawing.Point(1, 1) 52 | Me.Panel1.Name = "Panel1" 53 | Me.Panel1.Size = New System.Drawing.Size(401, 547) 54 | Me.Panel1.TabIndex = 1 55 | ' 56 | 'WebView21 57 | ' 58 | Me.WebView21.AllowExternalDrop = True 59 | Me.WebView21.CreationProperties = Nothing 60 | Me.WebView21.DefaultBackgroundColor = System.Drawing.Color.White 61 | Me.WebView21.Dock = System.Windows.Forms.DockStyle.Fill 62 | Me.WebView21.Location = New System.Drawing.Point(0, 64) 63 | Me.WebView21.Name = "WebView21" 64 | Me.WebView21.Size = New System.Drawing.Size(401, 483) 65 | Me.WebView21.TabIndex = 30 66 | Me.WebView21.ZoomFactor = 1.0R 67 | ' 68 | 'Panel2 69 | ' 70 | Me.Panel2.Controls.Add(Me.TSLinkLabel1) 71 | Me.Panel2.Controls.Add(Me.CloseBT) 72 | Me.Panel2.Controls.Add(Me.Label1) 73 | Me.Panel2.Dock = System.Windows.Forms.DockStyle.Top 74 | Me.Panel2.Location = New System.Drawing.Point(0, 0) 75 | Me.Panel2.Name = "Panel2" 76 | Me.Panel2.Size = New System.Drawing.Size(401, 64) 77 | Me.Panel2.TabIndex = 33 78 | ' 79 | 'TSLinkLabel1 80 | ' 81 | Me.TSLinkLabel1.Dock = System.Windows.Forms.DockStyle.Top 82 | Me.TSLinkLabel1.LinkColor = System.Drawing.Color.Maroon 83 | Me.TSLinkLabel1.Location = New System.Drawing.Point(0, 33) 84 | Me.TSLinkLabel1.Name = "TSLinkLabel1" 85 | Me.TSLinkLabel1.Size = New System.Drawing.Size(401, 28) 86 | Me.TSLinkLabel1.TabIndex = 30 87 | Me.TSLinkLabel1.TabStop = True 88 | Me.TSLinkLabel1.Text = "로그인에 문제가 있나요?" 89 | Me.TSLinkLabel1.TextAlign = System.Drawing.ContentAlignment.TopCenter 90 | ' 91 | 'CloseBT 92 | ' 93 | Me.CloseBT.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 94 | Me.CloseBT.BackColor = System.Drawing.Color.White 95 | Me.CloseBT.Image = Global.uTable.My.Resources.Resources.closeicon_b 96 | Me.CloseBT.Location = New System.Drawing.Point(368, 3) 97 | Me.CloseBT.Name = "CloseBT" 98 | Me.CloseBT.Size = New System.Drawing.Size(30, 30) 99 | Me.CloseBT.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom 100 | Me.CloseBT.TabIndex = 29 101 | Me.CloseBT.TabStop = False 102 | ' 103 | 'Label1 104 | ' 105 | Me.Label1.BackColor = System.Drawing.Color.White 106 | Me.Label1.Dock = System.Windows.Forms.DockStyle.Top 107 | Me.Label1.Font = New System.Drawing.Font("맑은 고딕", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 108 | Me.Label1.ForeColor = System.Drawing.Color.Gray 109 | Me.Label1.Location = New System.Drawing.Point(0, 0) 110 | Me.Label1.Name = "Label1" 111 | Me.Label1.Size = New System.Drawing.Size(401, 33) 112 | Me.Label1.TabIndex = 0 113 | Me.Label1.Text = "시간표를 불러 올 계정으로 로그인 해 주세요." 114 | Me.Label1.TextAlign = System.Drawing.ContentAlignment.BottomCenter 115 | ' 116 | 'LoadingSplash1 117 | ' 118 | Me.LoadingSplash1.BackColor = System.Drawing.Color.Transparent 119 | Me.LoadingSplash1.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 120 | Me.LoadingSplash1.Location = New System.Drawing.Point(4, 493) 121 | Me.LoadingSplash1.Margin = New System.Windows.Forms.Padding(4) 122 | Me.LoadingSplash1.Name = "LoadingSplash1" 123 | Me.LoadingSplash1.Size = New System.Drawing.Size(50, 50) 124 | Me.LoadingSplash1.TabIndex = 32 125 | ' 126 | 'EveryTimeBrowserNew 127 | ' 128 | Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) 129 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 130 | Me.BackColor = System.Drawing.Color.Gray 131 | Me.ClientSize = New System.Drawing.Size(403, 549) 132 | Me.Controls.Add(Me.Panel1) 133 | Me.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 134 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None 135 | Me.Icon = Global.uTable.My.Resources.Resources.ptable_icon 136 | Me.Name = "EveryTimeBrowserNew" 137 | Me.Padding = New System.Windows.Forms.Padding(1) 138 | Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent 139 | Me.Text = "에브리타임 시간표 불러오기" 140 | Me.TopMost = True 141 | Me.TransparencyKey = System.Drawing.Color.Fuchsia 142 | Me.Panel1.ResumeLayout(False) 143 | CType(Me.WebView21, System.ComponentModel.ISupportInitialize).EndInit() 144 | Me.Panel2.ResumeLayout(False) 145 | CType(Me.CloseBT, System.ComponentModel.ISupportInitialize).EndInit() 146 | Me.ResumeLayout(False) 147 | 148 | End Sub 149 | Friend WithEvents TableChecker As Timer 150 | Friend WithEvents Panel1 As Panel 151 | Friend WithEvents Label1 As Label 152 | Friend WithEvents CloseBT As PictureBox 153 | Friend WithEvents WebView21 As Microsoft.Web.WebView2.WinForms.WebView2 154 | Friend WithEvents LoadingSplash1 As LoadingSplash 155 | Friend WithEvents Panel2 As Panel 156 | Friend WithEvents TSLinkLabel1 As LinkLabel 157 | End Class 158 | -------------------------------------------------------------------------------- /utable/Forms/Form1.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 126, 17 125 | 126 | 127 | 220, 18 128 | 129 | 130 | 312, 18 131 | 132 | 133 | 437, 18 134 | 135 | 136 | 553, 18 137 | 138 | 139 | 1132, 17 140 | 141 | 142 | 665, 18 143 | 144 | 145 | 790, 18 146 | 147 | 148 | 951, 21 149 | 150 | 151 | 1273, 17 152 | 153 | -------------------------------------------------------------------------------- /utable/Forms/OptionForm.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | ※해당 프로그램은 아직 개발 단계에 있습니다! 일부 기능이 불안정할수 있으므로 문제 발견 시 피드백을 주시면 개선하도록 하겠습니다※ 122 | 123 | uTable은 대학생을 위한 간단 데스크탑 시간표 프로그램으로, 누구나 자유롭게 무료로 사용할 수 있는 '오픈 소스 소프트웨어*' 입니다. 124 | 125 | [사용권 동의] 126 | 본 프로그램(uTable) 는 PBJ소프트웨어에서 개발하고 배포하는 무료 소프트웨어입니다. 127 | 이 프로그램은 개인, 가정, 기업, 관공서, 학교, 학원 등 언제나 어디에서나 무료로 제약없이 사용 가능합니다. 128 | 본 프로그램은 현재 개발중이므로 일부 기능이나 작동 등에 결함이 있을 수 있습니다. 또한 본 프로그램으로 인해 생기는 사고나 불이익은 PBJ소프트웨어 측에서 책임 져 드릴 수 없으니 참고 바랍니다. 129 | 이 프로그램을 재배포하실 수는 있으나, 개발자 동의를 거치지 않고 임의로 수정하거나 고친 뒤 배포하지 마시기 바랍니다. 만약 위에 대해 동의하지 않거나 설치를 원하지 않는 경우, 언제든지 설치를 중단하거나 프로그램을 제거하실 수 있습니다. 130 | 131 | *GitHub에 게시된 리포지토리는 GNU 일반 공중 사용 허가서를 따릅니다. 132 | Copyright (c) 2020-2023 Dongjun Park (PBJSoftware) 133 | 134 | This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 135 | 136 | This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 137 | 138 | You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. 139 | 140 | 141 | 17, 17 142 | 143 | 144 | 137, 17 145 | 146 | 147 | 274, 17 148 | 149 | 150 | 413, 17 151 | 152 | 153 | 557, 17 154 | 155 | -------------------------------------------------------------------------------- /utable/UserControls/CellControl.Designer.vb: -------------------------------------------------------------------------------- 1 | _ 2 | Partial Class CellControl 3 | Inherits System.Windows.Forms.UserControl 4 | 5 | 'UserControl은 Dispose를 재정의하여 구성 요소 목록을 정리합니다. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Windows Form 디자이너에 필요합니다. 18 | Private components As System.ComponentModel.IContainer 19 | 20 | '참고: 다음 프로시저는 Windows Form 디자이너에 필요합니다. 21 | '수정하려면 Windows Form 디자이너를 사용하십시오. 22 | '코드 편집기에서는 수정하지 마세요. 23 | _ 24 | Private Sub InitializeComponent() 25 | Me.components = New System.ComponentModel.Container() 26 | Me.TopTimeLabel = New System.Windows.Forms.Label() 27 | Me.BottomTimeLabel = New System.Windows.Forms.Label() 28 | Me.Panel1 = New System.Windows.Forms.Panel() 29 | Me.MemoLabel = New System.Windows.Forms.Label() 30 | Me.ProfLabel = New System.Windows.Forms.Label() 31 | Me.TitleLabel = New System.Windows.Forms.Label() 32 | Me.TopNotchPanel = New System.Windows.Forms.Panel() 33 | Me.Timer1 = New System.Windows.Forms.Timer(Me.components) 34 | Me.TopPanel = New System.Windows.Forms.Panel() 35 | Me.ChkBox1 = New System.Windows.Forms.PictureBox() 36 | Me.AniTimer = New System.Windows.Forms.Timer(Me.components) 37 | Me.Panel1.SuspendLayout() 38 | Me.TopPanel.SuspendLayout() 39 | CType(Me.ChkBox1, System.ComponentModel.ISupportInitialize).BeginInit() 40 | Me.SuspendLayout() 41 | ' 42 | 'TopTimeLabel 43 | ' 44 | Me.TopTimeLabel.Dock = System.Windows.Forms.DockStyle.Fill 45 | Me.TopTimeLabel.Font = New System.Drawing.Font("맑은 고딕", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 46 | Me.TopTimeLabel.Location = New System.Drawing.Point(19, 0) 47 | Me.TopTimeLabel.Margin = New System.Windows.Forms.Padding(0) 48 | Me.TopTimeLabel.Name = "TopTimeLabel" 49 | Me.TopTimeLabel.Padding = New System.Windows.Forms.Padding(0, 2, 0, 0) 50 | Me.TopTimeLabel.Size = New System.Drawing.Size(125, 19) 51 | Me.TopTimeLabel.TabIndex = 0 52 | Me.TopTimeLabel.Text = "TopTimeLabel" 53 | Me.TopTimeLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft 54 | ' 55 | 'BottomTimeLabel 56 | ' 57 | Me.BottomTimeLabel.AutoSize = True 58 | Me.BottomTimeLabel.Dock = System.Windows.Forms.DockStyle.Bottom 59 | Me.BottomTimeLabel.Font = New System.Drawing.Font("맑은 고딕", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 60 | Me.BottomTimeLabel.Location = New System.Drawing.Point(0, 243) 61 | Me.BottomTimeLabel.Name = "BottomTimeLabel" 62 | Me.BottomTimeLabel.Size = New System.Drawing.Size(118, 17) 63 | Me.BottomTimeLabel.TabIndex = 1 64 | Me.BottomTimeLabel.Text = "BottomTimeLabel" 65 | Me.BottomTimeLabel.TextAlign = System.Drawing.ContentAlignment.BottomRight 66 | ' 67 | 'Panel1 68 | ' 69 | Me.Panel1.Controls.Add(Me.MemoLabel) 70 | Me.Panel1.Controls.Add(Me.ProfLabel) 71 | Me.Panel1.Controls.Add(Me.TitleLabel) 72 | Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill 73 | Me.Panel1.Location = New System.Drawing.Point(0, 21) 74 | Me.Panel1.Name = "Panel1" 75 | Me.Panel1.Size = New System.Drawing.Size(144, 222) 76 | Me.Panel1.TabIndex = 2 77 | ' 78 | 'MemoLabel 79 | ' 80 | Me.MemoLabel.AutoSize = True 81 | Me.MemoLabel.Dock = System.Windows.Forms.DockStyle.Top 82 | Me.MemoLabel.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 83 | Me.MemoLabel.Location = New System.Drawing.Point(0, 37) 84 | Me.MemoLabel.MaximumSize = New System.Drawing.Size(144, 0) 85 | Me.MemoLabel.Name = "MemoLabel" 86 | Me.MemoLabel.Size = New System.Drawing.Size(42, 15) 87 | Me.MemoLabel.TabIndex = 2 88 | Me.MemoLabel.Text = "Memo" 89 | Me.MemoLabel.UseMnemonic = False 90 | ' 91 | 'ProfLabel 92 | ' 93 | Me.ProfLabel.AutoSize = True 94 | Me.ProfLabel.Dock = System.Windows.Forms.DockStyle.Top 95 | Me.ProfLabel.Font = New System.Drawing.Font("맑은 고딕", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 96 | Me.ProfLabel.Location = New System.Drawing.Point(0, 20) 97 | Me.ProfLabel.MaximumSize = New System.Drawing.Size(144, 0) 98 | Me.ProfLabel.Name = "ProfLabel" 99 | Me.ProfLabel.Size = New System.Drawing.Size(67, 17) 100 | Me.ProfLabel.TabIndex = 1 101 | Me.ProfLabel.Text = "ProfName" 102 | Me.ProfLabel.UseMnemonic = False 103 | ' 104 | 'TitleLabel 105 | ' 106 | Me.TitleLabel.AutoSize = True 107 | Me.TitleLabel.Dock = System.Windows.Forms.DockStyle.Top 108 | Me.TitleLabel.Font = New System.Drawing.Font("맑은 고딕", 11.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 109 | Me.TitleLabel.Location = New System.Drawing.Point(0, 0) 110 | Me.TitleLabel.MaximumSize = New System.Drawing.Size(144, 0) 111 | Me.TitleLabel.Name = "TitleLabel" 112 | Me.TitleLabel.Size = New System.Drawing.Size(40, 20) 113 | Me.TitleLabel.TabIndex = 0 114 | Me.TitleLabel.Text = "Title" 115 | Me.TitleLabel.UseMnemonic = False 116 | ' 117 | 'TopNotchPanel 118 | ' 119 | Me.TopNotchPanel.Dock = System.Windows.Forms.DockStyle.Top 120 | Me.TopNotchPanel.Location = New System.Drawing.Point(0, 0) 121 | Me.TopNotchPanel.Name = "TopNotchPanel" 122 | Me.TopNotchPanel.Size = New System.Drawing.Size(144, 2) 123 | Me.TopNotchPanel.TabIndex = 3 124 | ' 125 | 'Timer1 126 | ' 127 | Me.Timer1.Enabled = True 128 | Me.Timer1.Interval = 150 129 | ' 130 | 'TopPanel 131 | ' 132 | Me.TopPanel.Controls.Add(Me.TopTimeLabel) 133 | Me.TopPanel.Controls.Add(Me.ChkBox1) 134 | Me.TopPanel.Dock = System.Windows.Forms.DockStyle.Top 135 | Me.TopPanel.Location = New System.Drawing.Point(0, 2) 136 | Me.TopPanel.Name = "TopPanel" 137 | Me.TopPanel.Size = New System.Drawing.Size(144, 19) 138 | Me.TopPanel.TabIndex = 3 139 | ' 140 | 'ChkBox1 141 | ' 142 | Me.ChkBox1.Dock = System.Windows.Forms.DockStyle.Left 143 | Me.ChkBox1.Image = Global.uTable.My.Resources.Resources.check1_w_96 144 | Me.ChkBox1.Location = New System.Drawing.Point(0, 0) 145 | Me.ChkBox1.Name = "ChkBox1" 146 | Me.ChkBox1.Size = New System.Drawing.Size(19, 19) 147 | Me.ChkBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom 148 | Me.ChkBox1.TabIndex = 3 149 | Me.ChkBox1.TabStop = False 150 | ' 151 | 'AniTimer 152 | ' 153 | Me.AniTimer.Interval = 10 154 | ' 155 | 'CellControl 156 | ' 157 | Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) 158 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 159 | Me.BackColor = System.Drawing.Color.Transparent 160 | Me.Controls.Add(Me.Panel1) 161 | Me.Controls.Add(Me.BottomTimeLabel) 162 | Me.Controls.Add(Me.TopPanel) 163 | Me.Controls.Add(Me.TopNotchPanel) 164 | Me.DoubleBuffered = True 165 | Me.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 166 | Me.ForeColor = System.Drawing.Color.White 167 | Me.Name = "CellControl" 168 | Me.Size = New System.Drawing.Size(144, 260) 169 | Me.Panel1.ResumeLayout(False) 170 | Me.Panel1.PerformLayout() 171 | Me.TopPanel.ResumeLayout(False) 172 | CType(Me.ChkBox1, System.ComponentModel.ISupportInitialize).EndInit() 173 | Me.ResumeLayout(False) 174 | Me.PerformLayout() 175 | 176 | End Sub 177 | 178 | Friend WithEvents TopTimeLabel As Label 179 | Friend WithEvents BottomTimeLabel As Label 180 | Friend WithEvents Panel1 As Panel 181 | Friend WithEvents MemoLabel As Label 182 | Friend WithEvents ProfLabel As Label 183 | Friend WithEvents TitleLabel As Label 184 | Friend WithEvents TopNotchPanel As Panel 185 | Friend WithEvents Timer1 As Timer 186 | Friend WithEvents TopPanel As Panel 187 | Friend WithEvents ChkBox1 As PictureBox 188 | Friend WithEvents AniTimer As Timer 189 | End Class 190 | -------------------------------------------------------------------------------- /utable/Forms/EveryTimeBrowser.vb: -------------------------------------------------------------------------------- 1 | Imports System.Runtime.InteropServices 2 | 3 | Public Class EveryTimeBrowser 4 | Dim colorMode As String = Nothing '시간표 채울때 색상에 맞추도록 5 | Public targetUrl As String 6 | Dim webdone As Boolean = False 7 | Dim source As String 8 | 9 | Dim dpivalue As Integer = 100 10 | Dim trialCount As Integer = 0 11 | 12 | #Region "브라우저 확대/축소" 13 | 'Code by Clive Dela Cruz (https://itsourcecode.com/free-projects/vb-net/zoom-webbrowser-using-vb-net/) 14 | 15 | Public Enum Exec 16 | OLECMDID_OPTICAL_ZOOM = 63 17 | End Enum 18 | 19 | Private Enum execOpt 20 | OLECMDEXECOPT_DODEFAULT = 0 21 | OLECMDEXECOPT_PROMPTUSER = 1 22 | OLECMDEXECOPT_DONTPROMPTUSER = 2 23 | OLECMDEXECOPT_SHOWHELP = 3 24 | End Enum 25 | 26 | Public Sub PerformZoom(Browser As WebBrowser, Value As Integer) 27 | Try 28 | Dim Res As Object = Nothing 29 | Dim MyWeb As Object 30 | MyWeb = Browser.ActiveXInstance 31 | MyWeb.ExecWB(Exec.OLECMDID_OPTICAL_ZOOM, execOpt.OLECMDEXECOPT_PROMPTUSER, CObj(Value), CObj(IntPtr.Zero)) 32 | Catch ex As Exception 33 | MsgBox(ex.Message) 34 | End Try 35 | End Sub 36 | 37 | #End Region 38 | 39 | #Region "Aero 그림자 효과 (Vista이상)" 40 | 41 | Protected Overrides Sub OnHandleCreated(e As EventArgs) 42 | CreateDropShadow(Me) 43 | MyBase.OnHandleCreated(e) 44 | End Sub 45 | 46 | #End Region 47 | 48 | 49 | Private Shared Function UrlMkSetSessionOption(ByVal dwOption As Integer, ByVal pBuffer As String, ByVal dwBufferLength As Integer, ByVal dwReserved As Integer) As Integer 50 | End Function 51 | 52 | Const URLMON_OPTION_USERAGENT As Integer = &H10000001 53 | Public Sub ChangeUserAgent(ByVal Agent As String) 54 | UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, Agent, Agent.Length, 0) 55 | End Sub 56 | 57 | Private Sub FadeInEffect(sender As Object, e As EventArgs) Handles MyBase.Shown 58 | Me.Refresh() 59 | dpivalue = dpicalc(Me, 100) 60 | FadeIn(Me, 1) 61 | End Sub 62 | 63 | Private Sub FadeOutEffect(sender As Object, e As EventArgs) Handles MyBase.Closing 64 | FadeOut(Me) 65 | End Sub 66 | 67 | Private Sub EveryTimeBrowser_Load(sender As Object, e As EventArgs) Handles Me.Load 68 | ChangeUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.123 Safari/537.36") 69 | 70 | Opacity = 0 71 | colorMode = GetINI("SETTING", "ColorMode", "", ININamePath) 72 | 73 | If GetINI("SETTING", "CustomFont", "", ININamePath) = "1" And GetINI("SETTING", "ApplyAllGUIFonts", "", ININamePath) = "1" Then 74 | If Not GetINI("SETTING", "CustomFontName", "", ININamePath) = "" Then 75 | Dim fntname = GetINI("SETTING", "CustomFontName", "", ININamePath) 76 | ChangeToCustomFont(Me, fntname) 77 | End If 78 | End If 79 | 80 | LoadingSplash1.BackColor = Color.White 81 | LoadingSplash1.Location = New Point((Width - LoadingSplash1.Width) / 2, (Height - LoadingSplash1.Height) / 2) 82 | LoadingSplash1.highColor = Color.DarkGray 83 | LoadingSplash1.lowColor = Color.LightGray 84 | 85 | WebBrowser1.Navigate(targetUrl) 86 | trialCount = 0 87 | 88 | Refresh() 89 | End Sub 90 | 91 | Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted 92 | source = WebBrowser1.Document.Body.InnerHtml 93 | LoadingSplash1.Visible = False 94 | 95 | If Not source = Nothing Then 96 | If source.Contains("
") Then 97 | Label1.Text = "시간표를 불러오는 중..." 98 | PerformZoom(WebBrowser1, dpivalue) 99 | WebBrowser1.Visible = False 100 | WebBrowser1.Dock = DockStyle.None 101 | WebBrowser1.Width = 1920 102 | TableChecker.Start() 103 | Else 104 | PerformZoom(WebBrowser1, Convert.ToInt32(dpivalue * dpivalue / 100)) 105 | End If 106 | End If 107 | End Sub 108 | 109 | Private Sub TableChecker_Tick(sender As Object, e As EventArgs) Handles TableChecker.Tick 110 | 111 | Dim source As String = WebBrowser1.Document.Body.InnerHtml 112 | Dim tabledata As String = "" 113 | 114 | If source.Contains("class=""subject") Then 115 | 116 | TableChecker.Stop() 117 | 118 | Dim day As Integer = 0 119 | Dim tables As List(Of String) = multipleMidReturn("
", source) 120 | 121 | For Each s As String In tables 122 | 123 | If s.Contains("", s) 125 | 126 | For Each c As String In courses 127 | 128 | Dim name As String = midReturn("

", "

", c) 129 | Dim start As Integer = Convert.ToInt16(midReturn("top:", ";", c).Replace("px", "")) 130 | Dim len As Integer = Convert.ToInt16(midReturn("height:", ";", c).Replace("px", "")) - 1 131 | Dim prof As String = getData(c, "em") 132 | Dim memo As String = getData(c, "span") 133 | Dim color As New Color 134 | 135 | '컬러 추출 136 | Select Case midReturn("subject color", """", c) 137 | Case "1" 138 | color = Color.FromArgb(240, 134, 118) 139 | Case "2" 140 | color = Color.FromArgb(251, 171, 102) 141 | Case "3" 142 | color = Color.FromArgb(236, 195, 105) 143 | Case "4" 144 | color = Color.FromArgb(167, 202, 112) 145 | Case "5" 146 | color = Color.FromArgb(118, 203, 136) 147 | Case "6" 148 | color = Color.FromArgb(125, 209, 193) 149 | Case "7" 150 | color = Color.FromArgb(122, 165, 233) 151 | Case "8" 152 | color = Color.FromArgb(61, 103, 173) 153 | Case "9" 154 | color = Color.FromArgb(159, 134, 225) 155 | Case Else 156 | color = Color.DarkGray 157 | End Select 158 | 159 | '다크 모드로 설정되었을시 어둡게 설정하기 160 | If colorMode = "Dark" Then 161 | color = ControlPaint.Dark(color, 0.2) 162 | End If 163 | 164 | tabledata += "" + vbCrLf 165 | tabledata += vbTab + "" + day.ToString + "" + vbCrLf 166 | tabledata += vbTab + "" + name + "" + vbCrLf 167 | tabledata += vbTab + "" + prof + "" + vbCrLf 168 | tabledata += vbTab + "" + memo + "" + vbCrLf 169 | tabledata += vbTab + "" + start.ToString + "" + vbCrLf 170 | tabledata += vbTab + "" + (start + len).ToString + "" + vbCrLf 171 | tabledata += vbTab + "" + ColorTranslator.ToHtml(color) + "" + vbCrLf 172 | tabledata += "" + vbCrLf 173 | 174 | Next 175 | End If 176 | 177 | day += 1 178 | 179 | If day > 6 Then 180 | Exit For 181 | End If 182 | 183 | Next 184 | 185 | Threading.Thread.Sleep(3000) 186 | WebBrowser1.Navigate("https://everytime.kr/user/logout") 187 | 188 | If MsgBox("불러오기가 완료되었습니다. 바로 적용하시겠습니까?" + vbCr + "기존 시간표는 지워집니다!", 189 | vbQuestion + vbYesNo) = vbYes Then 190 | writeTable("에타에서 불러온 시간표" + vbCrLf + tabledata) 191 | Form1.updateCell() 192 | Close() 193 | End If 194 | 195 | Else 196 | trialCount += 1 197 | 198 | If trialCount = 10 Then 199 | MsgBox("시간표가 불러와지지 않는 것 같습니다.." + vbCr + vbCr _ 200 | + "현재 시간표가 비어 있거나 인터넷 연결이 원활하지 않거나 에브리타임 사이트 구조 변경으로 인해 프로그램이 시간표 값을 읽는 데 문제가 발생한 것일 수 있습니다." _ 201 | + vbCr + vbCr + "시간표가 비어 있는지 확인해 보시고 시간표가 채워져 있는데도 여전히 불러올 수 없다면 최신 버전을 확인해 보시고, 최신 버전인데도 같은 문제가 발생한다면 '프로그램 설정' > '정보' > '오류 보고/피드백 남기기' 텍스트를 클릭하셔서 접수해주시면 가능한 빨리 업데이트하도록 하겠습니다.", vbInformation) 202 | End If 203 | End If 204 | 205 | End Sub 206 | 207 | Private Sub CloseBT_Click(sender As Object, e As EventArgs) Handles CloseBT.Click 208 | Close() 209 | End Sub 210 | 211 | Private Sub WebBrowser1_Navigating(sender As Object, e As WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating 212 | LoadingSplash1.Visible = True 213 | End Sub 214 | End Class -------------------------------------------------------------------------------- /utable/ErrorForm.Designer.vb: -------------------------------------------------------------------------------- 1 | 2 | Partial Class ErrorForm 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form은 Dispose를 재정의하여 구성 요소 목록을 정리합니다. 6 | 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Windows Form 디자이너에 필요합니다. 18 | Private components As System.ComponentModel.IContainer 19 | 20 | '참고: 다음 프로시저는 Windows Form 디자이너에 필요합니다. 21 | '수정하려면 Windows Form 디자이너를 사용하십시오. 22 | '코드 편집기에서는 수정하지 마세요. 23 | 24 | Private Sub InitializeComponent() 25 | Me.components = New System.ComponentModel.Container() 26 | Me.Label1 = New System.Windows.Forms.Label() 27 | Me.Timer1 = New System.Windows.Forms.Timer(Me.components) 28 | Me.Button1 = New System.Windows.Forms.Button() 29 | Me.Panel1 = New System.Windows.Forms.Panel() 30 | Me.Button3 = New System.Windows.Forms.Button() 31 | Me.Button2 = New System.Windows.Forms.Button() 32 | Me.Panel2 = New System.Windows.Forms.Panel() 33 | Me.Label2 = New System.Windows.Forms.Label() 34 | Me.Panel3 = New System.Windows.Forms.Panel() 35 | Me.RichTextBox1 = New System.Windows.Forms.RichTextBox() 36 | Me.Label3 = New System.Windows.Forms.Label() 37 | Me.Panel1.SuspendLayout() 38 | Me.Panel2.SuspendLayout() 39 | Me.Panel3.SuspendLayout() 40 | Me.SuspendLayout() 41 | ' 42 | 'Label1 43 | ' 44 | Me.Label1.AutoSize = True 45 | Me.Label1.Dock = System.Windows.Forms.DockStyle.Top 46 | Me.Label1.Font = New System.Drawing.Font("맑은 고딕", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 47 | Me.Label1.ForeColor = System.Drawing.Color.Black 48 | Me.Label1.Location = New System.Drawing.Point(10, 10) 49 | Me.Label1.Name = "Label1" 50 | Me.Label1.Padding = New System.Windows.Forms.Padding(0, 0, 0, 5) 51 | Me.Label1.Size = New System.Drawing.Size(164, 26) 52 | Me.Label1.TabIndex = 0 53 | Me.Label1.Text = "오류가 발생했습니다." 54 | ' 55 | 'Timer1 56 | ' 57 | Me.Timer1.Interval = 1000 58 | ' 59 | 'Button1 60 | ' 61 | Me.Button1.Dock = System.Windows.Forms.DockStyle.Right 62 | Me.Button1.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 63 | Me.Button1.Location = New System.Drawing.Point(308, 10) 64 | Me.Button1.Name = "Button1" 65 | Me.Button1.Size = New System.Drawing.Size(121, 41) 66 | Me.Button1.TabIndex = 1 67 | Me.Button1.Text = "다시 시작" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "(10 초후 실행)" 68 | Me.Button1.UseVisualStyleBackColor = True 69 | ' 70 | 'Panel1 71 | ' 72 | Me.Panel1.Controls.Add(Me.Button3) 73 | Me.Panel1.Controls.Add(Me.Button2) 74 | Me.Panel1.Controls.Add(Me.Button1) 75 | Me.Panel1.Dock = System.Windows.Forms.DockStyle.Bottom 76 | Me.Panel1.Location = New System.Drawing.Point(0, 303) 77 | Me.Panel1.Name = "Panel1" 78 | Me.Panel1.Padding = New System.Windows.Forms.Padding(10) 79 | Me.Panel1.Size = New System.Drawing.Size(439, 61) 80 | Me.Panel1.TabIndex = 3 81 | ' 82 | 'Button3 83 | ' 84 | Me.Button3.Dock = System.Windows.Forms.DockStyle.Left 85 | Me.Button3.Font = New System.Drawing.Font("맑은 고딕", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 86 | Me.Button3.Location = New System.Drawing.Point(10, 10) 87 | Me.Button3.MinimumSize = New System.Drawing.Size(181, 41) 88 | Me.Button3.Name = "Button3" 89 | Me.Button3.Size = New System.Drawing.Size(181, 41) 90 | Me.Button3.TabIndex = 3 91 | Me.Button3.Text = "오류 보고 페이지 열기" 92 | Me.Button3.UseVisualStyleBackColor = True 93 | ' 94 | 'Button2 95 | ' 96 | Me.Button2.Dock = System.Windows.Forms.DockStyle.Right 97 | Me.Button2.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 98 | Me.Button2.Location = New System.Drawing.Point(212, 10) 99 | Me.Button2.Name = "Button2" 100 | Me.Button2.Size = New System.Drawing.Size(96, 41) 101 | Me.Button2.TabIndex = 2 102 | Me.Button2.Text = "설정 파일" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "삭제 후 종료" 103 | Me.Button2.UseVisualStyleBackColor = True 104 | ' 105 | 'Panel2 106 | ' 107 | Me.Panel2.Controls.Add(Me.Label2) 108 | Me.Panel2.Controls.Add(Me.Label1) 109 | Me.Panel2.Dock = System.Windows.Forms.DockStyle.Top 110 | Me.Panel2.Location = New System.Drawing.Point(0, 0) 111 | Me.Panel2.Name = "Panel2" 112 | Me.Panel2.Padding = New System.Windows.Forms.Padding(10) 113 | Me.Panel2.Size = New System.Drawing.Size(439, 70) 114 | Me.Panel2.TabIndex = 4 115 | ' 116 | 'Label2 117 | ' 118 | Me.Label2.Dock = System.Windows.Forms.DockStyle.Top 119 | Me.Label2.Font = New System.Drawing.Font("맑은 고딕", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 120 | Me.Label2.ForeColor = System.Drawing.Color.Black 121 | Me.Label2.Location = New System.Drawing.Point(10, 36) 122 | Me.Label2.Name = "Label2" 123 | Me.Label2.Size = New System.Drawing.Size(419, 32) 124 | Me.Label2.TabIndex = 1 125 | Me.Label2.Text = "해당 오류가 지속될 경우 설정 파일을 삭제한 후 다시 시도해 보시기 바랍니다." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "(설정 파일을 지울 경우 설정값이 초기화되므로 별도로 백업해 놓으" & 126 | "시기 바랍니다.)" 127 | ' 128 | 'Panel3 129 | ' 130 | Me.Panel3.Controls.Add(Me.RichTextBox1) 131 | Me.Panel3.Controls.Add(Me.Label3) 132 | Me.Panel3.Dock = System.Windows.Forms.DockStyle.Fill 133 | Me.Panel3.Location = New System.Drawing.Point(0, 70) 134 | Me.Panel3.Name = "Panel3" 135 | Me.Panel3.Padding = New System.Windows.Forms.Padding(10, 0, 10, 0) 136 | Me.Panel3.Size = New System.Drawing.Size(439, 233) 137 | Me.Panel3.TabIndex = 5 138 | ' 139 | 'RichTextBox1 140 | ' 141 | Me.RichTextBox1.Dock = System.Windows.Forms.DockStyle.Fill 142 | Me.RichTextBox1.Font = New System.Drawing.Font("맑은 고딕", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 143 | Me.RichTextBox1.Location = New System.Drawing.Point(10, 22) 144 | Me.RichTextBox1.Name = "RichTextBox1" 145 | Me.RichTextBox1.ReadOnly = True 146 | Me.RichTextBox1.Size = New System.Drawing.Size(419, 211) 147 | Me.RichTextBox1.TabIndex = 2 148 | Me.RichTextBox1.Text = "" 149 | ' 150 | 'Label3 151 | ' 152 | Me.Label3.AutoSize = True 153 | Me.Label3.Dock = System.Windows.Forms.DockStyle.Top 154 | Me.Label3.Font = New System.Drawing.Font("맑은 고딕", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 155 | Me.Label3.ForeColor = System.Drawing.Color.Gray 156 | Me.Label3.Location = New System.Drawing.Point(10, 0) 157 | Me.Label3.Name = "Label3" 158 | Me.Label3.Padding = New System.Windows.Forms.Padding(0, 0, 0, 5) 159 | Me.Label3.Size = New System.Drawing.Size(268, 22) 160 | Me.Label3.TabIndex = 1 161 | Me.Label3.Text = "오류 정보 (선택 후 Ctrl + A 하여 복사 가능)" 162 | ' 163 | 'ErrorForm 164 | ' 165 | Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) 166 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 167 | Me.BackColor = System.Drawing.Color.White 168 | Me.ClientSize = New System.Drawing.Size(439, 364) 169 | Me.Controls.Add(Me.Panel3) 170 | Me.Controls.Add(Me.Panel2) 171 | Me.Controls.Add(Me.Panel1) 172 | Me.Font = New System.Drawing.Font("맑은 고딕", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) 173 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow 174 | Me.Icon = Global.uTable.My.Resources.Resources.ptable_icon 175 | Me.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) 176 | Me.MinimumSize = New System.Drawing.Size(437, 395) 177 | Me.Name = "ErrorForm" 178 | Me.ShowIcon = False 179 | Me.StartPosition = System.Windows.Forms.FormStartPosition.Manual 180 | Me.Text = "오류 발생" 181 | Me.TopMost = True 182 | Me.Panel1.ResumeLayout(False) 183 | Me.Panel2.ResumeLayout(False) 184 | Me.Panel2.PerformLayout() 185 | Me.Panel3.ResumeLayout(False) 186 | Me.Panel3.PerformLayout() 187 | Me.ResumeLayout(False) 188 | 189 | End Sub 190 | 191 | Friend WithEvents Label1 As Label 192 | Friend WithEvents Timer1 As Timer 193 | Friend WithEvents Button1 As Button 194 | Friend WithEvents Panel1 As Panel 195 | Friend WithEvents Button2 As Button 196 | Friend WithEvents Panel2 As Panel 197 | Friend WithEvents Label2 As Label 198 | Friend WithEvents Panel3 As Panel 199 | Friend WithEvents RichTextBox1 As RichTextBox 200 | Friend WithEvents Label3 As Label 201 | Friend WithEvents Button3 As Button 202 | End Class 203 | -------------------------------------------------------------------------------- /utable/Forms/EveryTimeBrowserNew.vb: -------------------------------------------------------------------------------- 1 | Imports System.Runtime.InteropServices 2 | Imports System.Text.RegularExpressions 3 | Imports Microsoft.Web.WebView2.Core 4 | 5 | Public Class EveryTimeBrowserNew 6 | Dim colorMode As String = Nothing '시간표 채울때 색상에 맞추도록 7 | Public targetUrl As String 8 | Dim webdone As Boolean = False 9 | Dim source As String 10 | 11 | Dim dpivalue As Integer = 100 12 | Dim trialCount As Integer = 0 13 | 14 | #Region "Aero 그림자 효과 (Vista이상)" 15 | 16 | Protected Overrides Sub OnHandleCreated(e As EventArgs) 17 | CreateDropShadow(Me) 18 | MyBase.OnHandleCreated(e) 19 | End Sub 20 | 21 | #End Region 22 | 23 | #Region "창 이동, 크기 조절, 붙기 관련" 24 | 25 | 26 | Public Shared Function ReleaseCapture() As Boolean 27 | End Function 28 | 29 | 30 | Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer 31 | End Function 32 | 33 | Private Const WM_NCLBUTTONDOWN As Integer = &HA1 34 | Private Const HTCAPTION As Integer = 2 35 | 36 | Private Sub MoveForm() 37 | ReleaseCapture() 38 | SendMessage(Me.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0) 39 | End Sub 40 | 41 | Private Sub MoveArea_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseDown 42 | If e.Button = Windows.Forms.MouseButtons.Left And Me.WindowState <> FormWindowState.Maximized Then 43 | MoveForm() 44 | End If 45 | End Sub 46 | 47 | #End Region 48 | 49 | Private Sub FadeInEffect(sender As Object, e As EventArgs) Handles MyBase.Shown 50 | LoadingSplash1.BackColor = Color.White 51 | LoadingSplash1.Location = New Point((Width - LoadingSplash1.Width) / 2, (Height - LoadingSplash1.Height) / 2) 52 | LoadingSplash1.highColor = Color.DarkGray 53 | LoadingSplash1.lowColor = Color.LightGray 54 | 55 | Me.Refresh() 56 | dpivalue = dpicalc(Me, 100) 57 | 'FadeIn(Me, 1) 58 | End Sub 59 | 60 | Private Sub FadeOutEffect(sender As Object, e As EventArgs) Handles MyBase.Closing 61 | FadeOut(Me) 62 | End Sub 63 | 64 | 65 | Private Sub CloseBT_Click(sender As Object, e As EventArgs) Handles CloseBT.Click 66 | Close() 67 | End Sub 68 | 69 | Private Async Sub EveryTimeBrowserNew_Load(sender As Object, e As EventArgs) Handles MyBase.Load 70 | Dim cachePath As String = System.IO.Path.Combine(System.IO.Path.GetTempPath, "uTable") 71 | Dim options = New CoreWebView2EnvironmentOptions() 72 | Dim env = Await CoreWebView2Environment.CreateAsync(Nothing, cachePath, options) 73 | Await WebView21.EnsureCoreWebView2Async(env) 74 | 75 | colorMode = GetINI("SETTING", "ColorMode", "", ININamePath) 76 | 77 | If GetINI("SETTING", "CustomFont", "", ININamePath) = "1" And GetINI("SETTING", "ApplyAllGUIFonts", "", ININamePath) = "1" Then 78 | If Not GetINI("SETTING", "CustomFontName", "", ININamePath) = "" Then 79 | Dim fntname = GetINI("SETTING", "CustomFontName", "", ININamePath) 80 | ChangeToCustomFont(Me, fntname) 81 | End If 82 | End If 83 | 84 | WebView21.CoreWebView2.Settings.IsReputationCheckingRequired = False 85 | 86 | WebView21.Source = New Uri(targetUrl) 87 | trialCount = 0 88 | 89 | Refresh() 90 | End Sub 91 | 92 | Private Sub WebView2_NavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs) Handles WebView21.NavigationCompleted 93 | 'MsgBox("done!!") 94 | 'source = Await getTableData() 95 | LoadingSplash1.Visible = False 96 | 97 | If WebView21.Source.ToString.Contains("/timetable") Then 98 | 'Debug.Print("Detected!!" + vbCrLf) 99 | TSLinkLabel1.Visible = False 100 | Label1.Text = "시간표를 불러오는 중..." 101 | Label1.Dock = DockStyle.Fill 102 | Label1.TextAlign = ContentAlignment.MiddleCenter 103 | 104 | WebView21.ZoomFactor = 100 / dpivalue 105 | 'PerformZoom(WebBrowser1, dpivalue) 106 | WebView21.Visible = False 107 | WebView21.Dock = DockStyle.None 108 | WebView21.Width = 1920 109 | TableChecker.Start() 110 | Else 111 | 'PerformZoom(WebBrowser1, Convert.ToInt32(dpivalue * dpivalue / 100)) 112 | Debug.Print("Not detected!!" + vbCrLf) 113 | 114 | 115 | End If 116 | End Sub 117 | 118 | Private Async Sub TableChecker_Tick(sender As Object, e As EventArgs) Handles TableChecker.Tick 119 | 120 | Dim source As String = Await getTableData() 121 | Dim tabledata As String = "" 122 | 123 | Debug.Print(vbCrLf + source) 124 | 125 | If source.Contains("class=""subject") Then 126 | 127 | TableChecker.Stop() 128 | 129 | Dim day As Integer = 0 130 | Dim tables As List(Of String) = multipleMidReturn("
", source) 131 | 132 | For Each s As String In tables 133 | 134 | If s.Contains("", s) 136 | 137 | For Each c As String In courses 138 | 139 | Dim name As String = midReturn("

", "

", c) 140 | Dim start As Integer = Convert.ToInt16(midReturn("top:", ";", c).Replace("px", "")) 141 | Dim len As Integer = Convert.ToInt16(midReturn("height:", ";", c).Replace("px", "")) - 1 142 | Dim prof As String = getData(c, "em") 143 | Dim memo As String = getData(c, "span") 144 | Dim color As New Color 145 | 146 | '컬러 추출 147 | Select Case midReturn("subject color", """", c) 148 | Case "1" 149 | color = color.FromArgb(240, 134, 118) 150 | Case "2" 151 | color = color.FromArgb(251, 171, 102) 152 | Case "3" 153 | color = color.FromArgb(236, 195, 105) 154 | Case "4" 155 | color = color.FromArgb(167, 202, 112) 156 | Case "5" 157 | color = color.FromArgb(118, 203, 136) 158 | Case "6" 159 | color = color.FromArgb(125, 209, 193) 160 | Case "7" 161 | color = color.FromArgb(122, 165, 233) 162 | Case "8" 163 | color = color.FromArgb(61, 103, 173) 164 | Case "9" 165 | color = color.FromArgb(159, 134, 225) 166 | Case Else 167 | color = color.DarkGray 168 | End Select 169 | 170 | '다크 모드로 설정되었을시 어둡게 설정하기 171 | If colorMode = "Dark" Then 172 | color = ControlPaint.Dark(color, 0.2) 173 | End If 174 | 175 | tabledata += "" + vbCrLf 176 | tabledata += vbTab + "" + day.ToString + "" + vbCrLf 177 | tabledata += vbTab + "" + name + "" + vbCrLf 178 | tabledata += vbTab + "" + prof + "" + vbCrLf 179 | tabledata += vbTab + "" + memo + "" + vbCrLf 180 | tabledata += vbTab + "" + start.ToString + "" + vbCrLf 181 | tabledata += vbTab + "" + (start + len).ToString + "" + vbCrLf 182 | tabledata += vbTab + "" + ColorTranslator.ToHtml(color) + "" + vbCrLf 183 | tabledata += "" + vbCrLf 184 | 185 | Next 186 | End If 187 | 188 | day += 1 189 | 190 | If day > 6 Then 191 | Exit For 192 | End If 193 | 194 | Next 195 | 196 | Threading.Thread.Sleep(3000) 197 | WebView21.Source = New Uri("https://everytime.kr/user/logout") 198 | 199 | If MsgBox("불러오기가 완료되었습니다. 바로 적용하시겠습니까?" + vbCr + "기존 시간표는 지워집니다!", 200 | vbQuestion + vbYesNo) = vbYes Then 201 | writeTable("에타에서 불러온 시간표" + vbCrLf + tabledata) 202 | Form1.updateCell() 203 | Close() 204 | End If 205 | 206 | Else 207 | trialCount += 1 208 | 209 | If trialCount = 15 Then 210 | TableChecker.Stop() 211 | MsgBox("시간표가 불러와지지 않는 것 같습니다.." + vbCr + vbCr _ 212 | + "현재 시간표가 비어 있거나 인터넷 연결이 원활하지 않거나 에브리타임 사이트 구조 변경으로 인해 프로그램이 시간표 값을 읽는 데 문제가 발생한 것일 수 있습니다." _ 213 | + vbCr + vbCr + "시간표가 비어 있는지 확인해 보시고 시간표가 채워져 있는데도 여전히 불러올 수 없다면 최신 버전을 확인해 보시고, 최신 버전인데도 같은 문제가 발생한다면 '프로그램 설정' > '정보' > '오류 보고/피드백 남기기' 텍스트를 클릭하셔서 접수해주시면 가능한 빨리 업데이트하도록 하겠습니다.", vbInformation) 214 | Close() 215 | End If 216 | End If 217 | 218 | End Sub 219 | 220 | Private Async Function getTableData() As Task(Of String) 221 | Dim html = Await WebView21.ExecuteScriptAsync("document.querySelector('table.tablebody').innerHTML") 222 | html = Regex.Unescape(html) 223 | html = html.Remove(0, 1) 224 | html = html.Remove(html.Length - 1, 1) 225 | Return html 226 | End Function 227 | 228 | Private Sub WebView21_NavigationStarting(sender As Object, e As CoreWebView2NavigationStartingEventArgs) Handles WebView21.NavigationStarting 229 | LoadingSplash1.Visible = True 230 | End Sub 231 | 232 | Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles TSLinkLabel1.LinkClicked 233 | TopMost = False 234 | Process.Start("https://utable.sw.pbj.kr/everytime-troubleshooting") 235 | End Sub 236 | End Class --------------------------------------------------------------------------------