From 6b9d01824e71586029c03aefa13493df7648e2c5 Mon Sep 17 00:00:00 2001 From: "shixiong.Liu" Date: Mon, 11 Nov 2024 18:04:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0envtools=20demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- env_tools/EnvHelper.cpp | 76 +++++++++++ env_tools/EnvHelper.h | 29 +++++ env_tools/EnvTools.cpp | 25 ++++ env_tools/EnvTools.h | 21 +++ env_tools/EnvTools.qrc | 4 + env_tools/EnvTools.ui | 191 ++++++++++++++++++++++++++++ env_tools/evn_tools.sln | 25 ++++ env_tools/evn_tools.vcxproj | 111 ++++++++++++++++ env_tools/evn_tools.vcxproj.filters | 52 ++++++++ env_tools/main.cpp | 10 ++ 10 files changed, 544 insertions(+) create mode 100644 env_tools/EnvHelper.cpp create mode 100644 env_tools/EnvHelper.h create mode 100644 env_tools/EnvTools.cpp create mode 100644 env_tools/EnvTools.h create mode 100644 env_tools/EnvTools.qrc create mode 100644 env_tools/EnvTools.ui create mode 100644 env_tools/evn_tools.sln create mode 100644 env_tools/evn_tools.vcxproj create mode 100644 env_tools/evn_tools.vcxproj.filters create mode 100644 env_tools/main.cpp diff --git a/env_tools/EnvHelper.cpp b/env_tools/EnvHelper.cpp new file mode 100644 index 0000000..d9ecb3f --- /dev/null +++ b/env_tools/EnvHelper.cpp @@ -0,0 +1,76 @@ +#include "EnvHelper.h" +#include +#include +#include +#include + +EnvHelper::EnvHelper() +{ + this->_init_env(); +} + +EnvHelper::~EnvHelper() +{ + +} + +std::map EnvHelper::get_env() const +{ + std::map result = {}; + for (const wstring& item : _vec_env) { + if (item.empty()) { + continue; + } + if (item[0] == '=') { + continue; + } + std::vector values = _split(item, L'='); + if (values.empty()) + { + continue; + } + result[values[0]] = values[1]; + } + return result; +} + +bool EnvHelper::_init_env() +{ + LPWCH envStrings = GetEnvironmentStringsW(); + if (envStrings == NULL) { + return false; + } + + // 遍历环境变量 + LPWCH envVar = envStrings; + while (*envVar) { + // 从环境变量字符串中提取键和值 + std::wcout << envVar << std::endl; + + // 移动到下一个环境变量 + envVar += wcslen(envVar) + 1; + wstring var = envVar; + _vec_env.push_back(var); + } + + // 释放环境变量字符串指针 + FreeEnvironmentStringsW(envStrings); + return true; +} + + +std::vector EnvHelper::_split(const wstring& str, wchar_t delimiter) const { + std::vector tokens; + size_t start = 0; + size_t end = str.find(delimiter); + + while (end != wstring::npos) { + tokens.push_back(str.substr(start, end - start)); + start = end + 1; + end = str.find(delimiter, start); + } + + // 添加最后一个子串 + tokens.push_back(str.substr(start)); + return tokens; +} diff --git a/env_tools/EnvHelper.h b/env_tools/EnvHelper.h new file mode 100644 index 0000000..e790d72 --- /dev/null +++ b/env_tools/EnvHelper.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +#include + +using std::wstring; +using std::vector; + +class EnvHelper +{ +public: + EnvHelper(); + ~EnvHelper(); + + EnvHelper& operator=(const EnvHelper& left) = delete; + EnvHelper(const EnvHelper& left) = delete; + std::map get_env() const; + +private: + bool _init_env(); + std::vector _split(const std::wstring& str, wchar_t delimiter) const; + +private: + vector _vec_env; + + +}; + diff --git a/env_tools/EnvTools.cpp b/env_tools/EnvTools.cpp new file mode 100644 index 0000000..c87fe13 --- /dev/null +++ b/env_tools/EnvTools.cpp @@ -0,0 +1,25 @@ +#include "EnvTools.h" +#include + +EnvTools::EnvTools(QWidget* parent) + : QWidget(parent) +{ + ui.setupUi(this); + this->_init_ui(); +} + +EnvTools::~EnvTools() +{} + +void EnvTools::_init_ui() +{ + std::map values = _env_helper.get_env(); + + int idx = 0; + for (auto& item : values) { + this->ui.tableWidget->insertRow(idx); + this->ui.tableWidget->setItem(idx, 0, new QTableWidgetItem(QString::fromStdWString(item.first))); + this->ui.tableWidget->setItem(idx, 1, new QTableWidgetItem(QString::fromStdWString(item.second))); + idx++; + } +} diff --git a/env_tools/EnvTools.h b/env_tools/EnvTools.h new file mode 100644 index 0000000..bc384c4 --- /dev/null +++ b/env_tools/EnvTools.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include "ui_EnvTools.h" +#include "EnvHelper.h" + +class EnvTools : public QWidget +{ + Q_OBJECT + +public: + EnvTools(QWidget* parent = nullptr); + ~EnvTools(); + +private: + void _init_ui(); + +private: + Ui::EnvToolsClass ui; + EnvHelper _env_helper; +}; diff --git a/env_tools/EnvTools.qrc b/env_tools/EnvTools.qrc new file mode 100644 index 0000000..3cb6333 --- /dev/null +++ b/env_tools/EnvTools.qrc @@ -0,0 +1,4 @@ + + + + diff --git a/env_tools/EnvTools.ui b/env_tools/EnvTools.ui new file mode 100644 index 0000000..b92dc65 --- /dev/null +++ b/env_tools/EnvTools.ui @@ -0,0 +1,191 @@ + + + EnvToolsClass + + + + 0 + 0 + 937 + 622 + + + + EnvTools + + + + 0 + + + 10 + + + 10 + + + 10 + + + 10 + + + + + + + + + + + + Other: + + + + + + + true + + + true + + + + Name + + + + + Value + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Add + + + + + + + Del + + + + + + + + + + + + + + + PATH evn: + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Add + + + + + + + Del + + + + + + + + + + + + + + + Tips: To apply the environment variable changes, you need to restart Explorer. + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 重启explorer + + + + + + + + + + + + + + + + diff --git a/env_tools/evn_tools.sln b/env_tools/evn_tools.sln new file mode 100644 index 0000000..f9e4250 --- /dev/null +++ b/env_tools/evn_tools.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32602.291 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "evn_tools", "evn_tools.vcxproj", "{9E8A8CE2-EC9C-4041-8C4A-4D17ED31A1DE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9E8A8CE2-EC9C-4041-8C4A-4D17ED31A1DE}.Debug|x64.ActiveCfg = Debug|x64 + {9E8A8CE2-EC9C-4041-8C4A-4D17ED31A1DE}.Debug|x64.Build.0 = Debug|x64 + {9E8A8CE2-EC9C-4041-8C4A-4D17ED31A1DE}.Release|x64.ActiveCfg = Release|x64 + {9E8A8CE2-EC9C-4041-8C4A-4D17ED31A1DE}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F1743090-610E-44E3-AD30-99699CD063BB} + EndGlobalSection +EndGlobal diff --git a/env_tools/evn_tools.vcxproj b/env_tools/evn_tools.vcxproj new file mode 100644 index 0000000..be924b0 --- /dev/null +++ b/env_tools/evn_tools.vcxproj @@ -0,0 +1,111 @@ + + + + + Debug + x64 + + + Release + x64 + + + + {9E8A8CE2-EC9C-4041-8C4A-4D17ED31A1DE} + QtVS_v304 + 10.0 + 10.0 + $(MSBuildProjectDirectory)\QtMsBuild + + + + Application + v142 + true + Unicode + + + Application + v142 + false + true + Unicode + + + + + + + 5.15.11_x64_static + core;gui;widgets + debug + + + 5.15.11_x64_static + core;gui;widgets + release + + + + + + + + + + + + + + + + + + + + + + true + Level3 + true + true + + + Windows + true + + + + + true + Level3 + true + true + true + true + + + Windows + false + true + true + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/env_tools/evn_tools.vcxproj.filters b/env_tools/evn_tools.vcxproj.filters new file mode 100644 index 0000000..f1be65e --- /dev/null +++ b/env_tools/evn_tools.vcxproj.filters @@ -0,0 +1,52 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + qml;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} + qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {99349809-55BA-4b9d-BF79-8FDBB0286EB3} + ui + + + {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C} + ts + + + + + Resource Files + + + Form Files + + + Header Files + + + Source Files + + + + + Source Files + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/env_tools/main.cpp b/env_tools/main.cpp new file mode 100644 index 0000000..807cf22 --- /dev/null +++ b/env_tools/main.cpp @@ -0,0 +1,10 @@ +#include "EnvTools.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + EnvTools w; + w.show(); + return a.exec(); +}