diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..c06d5fa
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,56 @@
+cmake_minimum_required(VERSION 3.10)
+
+set(VCPKG_FEATURE_FLAGS manifests)
+
+project(openvpn-gui C)
+
+add_executable(${PROJECT_NAME} WIN32
+ access.c
+ echo.c
+ env_set.c
+ localization.c
+ main.c
+ manage.c
+ misc.c
+ openvpn.c
+ openvpn_config.c
+ options.c
+ passphrase.c
+ proxy.c
+ registry.c
+ save_pass.c
+ scripts.c
+ service.c
+ tray.c
+ viewlog.c
+ res/openvpn-gui-res.rc)
+
+configure_file(config-msvc.h config.h COPYONLY)
+
+find_package(OpenSSL REQUIRED)
+target_link_libraries(${PROJECT_NAME} OpenSSL::SSL
+ Wtsapi32.lib
+ Netapi32.lib
+ ws2_32.lib
+ Winhttp.lib
+ Secur32.lib
+ Comctl32.lib
+ Crypt32.lib
+ Shlwapi.lib
+ Advapi32.lib
+ Shell32.lib
+ Gdi32.lib
+ Comdlg32.lib
+ Ole32.lib)
+
+target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
+
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
+set(CMAKE_RC_FLAGS "/D \"HAVE_CONFIG_H\" /D \"_MSC_VER\"")
+
+target_compile_definitions(${PROJECT_NAME} PRIVATE
+ _UNICODE
+ UNICODE
+ WIN32_LEAN_AND_MEAN
+ HAVE_CONFIG_H
+ _CRT_NON_CONFORMING_WCSTOK)
diff --git a/openvpn-gui.sln b/openvpn-gui.sln
deleted file mode 100644
index d1bad55..0000000
--- a/openvpn-gui.sln
+++ /dev/null
@@ -1,25 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29503.13
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openvpn-gui", "openvpn-gui.vcxproj", "{028B1211-5625-48F7-B2D7-98C2F1994A70}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {028B1211-5625-48F7-B2D7-98C2F1994A70}.Debug|x64.ActiveCfg = Debug|x64
- {028B1211-5625-48F7-B2D7-98C2F1994A70}.Debug|x64.Build.0 = Debug|x64
- {028B1211-5625-48F7-B2D7-98C2F1994A70}.Debug|x86.ActiveCfg = Debug|x64
- {028B1211-5625-48F7-B2D7-98C2F1994A70}.Debug|x86.Build.0 = Debug|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {677FA70E-DBAF-45FD-B11B-4603B40AFCBE}
- EndGlobalSection
-EndGlobal
diff --git a/openvpn-gui.vcxproj b/openvpn-gui.vcxproj
deleted file mode 100644
index e50b664..0000000
--- a/openvpn-gui.vcxproj
+++ /dev/null
@@ -1,187 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- 16.0
- {028B1211-5625-48F7-B2D7-98C2F1994A70}
- Win32Proj
-
-
-
- Application
- true
- v142
-
-
- Application
- false
- v142
-
-
- Application
- true
- v142
-
-
- Application
- false
- v142
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
- true
-
-
- false
-
-
- false
-
-
-
- WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
- MultiThreadedDebugDLL
- Level3
- ProgramDatabase
- Disabled
-
-
- MachineX86
- true
- Windows
-
-
-
-
- WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
- MultiThreadedDLL
- Level3
- ProgramDatabase
-
-
- MachineX86
- true
- Windows
- true
- true
-
-
-
-
- WIN32_LEAN_AND_MEAN;UNICODE;_UNICODE;_INC_MATH;_CRT_NON_CONFORMING_WCSTOK;HAVE_CONFIG_H
-
-
- $(SolutionDir);%(AdditionalIncludeDirectories)
-
-
- $(SolutionDir);%(AdditionalIncludeDirectories)
- false
- openvpn-gui-res.rc
- HAVE_CONFIG_H;_MSC_VER
-
-
- Netapi32.lib;Wtsapi32.lib;Comctl32.lib;Secur32.lib;Ws2_32.lib;Crypt32.lib;Shlwapi.lib;Winhttp.lib;%(AdditionalDependencies)
-
-
- copy config-msvc.h config.h
-
-
-
-
- copy config-msvc.h config.h
-
-
- $(SolutionDir);%(AdditionalIncludeDirectories)
- _INC_MATH;WIN32_LEAN_AND_MEAN;UNICODE;_UNICODE;_CRT_NON_CONFORMING_WCSTOK;HAVE_CONFIG_H
-
-
- Netapi32.lib;Wtsapi32.lib;Comctl32.lib;Secur32.lib;Ws2_32.lib;Crypt32.lib;Shlwapi.lib;Winhttp.lib;%(AdditionalDependencies)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/openvpn-gui.vcxproj.filters b/openvpn-gui.vcxproj.filters
deleted file mode 100644
index aa7b8f8..0000000
--- a/openvpn-gui.vcxproj.filters
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;hm;inl;inc;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav
-
-
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
-
-
- Resource Files
-
-
-
\ No newline at end of file