Textractor_test/GUI/extensions.cpp

36 lines
1.2 KiB
C++
Raw Normal View History

2018-07-27 13:42:21 +08:00
#include "extensions.h"
#include <map>
2018-07-29 03:41:21 +08:00
#include <QDir>
2018-07-27 13:42:21 +08:00
std::map<int, ExtensionFunction> extensions;
2018-07-29 03:41:21 +08:00
std::map<int, QString> LoadExtensions()
2018-07-27 13:42:21 +08:00
{
2018-07-29 03:41:21 +08:00
extensions = std::map<int, ExtensionFunction>();
std::map<int, QString> extensionNames;
wchar_t path[MAX_PATH] = {};
(QDir::currentPath() + "/*_nexthooker_extension.dll").toWCharArray(path);
2018-07-27 13:42:21 +08:00
WIN32_FIND_DATAW fileData;
HANDLE file = FindFirstFileW(path, &fileData);
do
2018-07-29 03:41:21 +08:00
if (GetProcAddress(GetModuleHandleW(fileData.cFileName), "OnNewSentence") ||
GetProcAddress(LoadLibraryW(fileData.cFileName), "OnNewSentence")
)
{
extensions[std::wcstol(fileData.cFileName, nullptr, 10)] = (ExtensionFunction)GetProcAddress(GetModuleHandleW(fileData.cFileName), "OnNewSentence");
QString name = QString::fromWCharArray(fileData.cFileName);
name.chop(sizeof("_nexthooker_extension.dll") - 1);
name.remove(0, name.split("_")[0].length() + 1);
extensionNames[std::wcstol(fileData.cFileName, nullptr, 10)] = name;
}
2018-07-27 13:42:21 +08:00
while (FindNextFileW(file, &fileData) != 0);
return extensionNames;
}
std::wstring DispatchSentenceToExtensions(std::wstring sentence, std::unordered_map<std::string, int> miscInfo)
{
2018-07-29 03:41:21 +08:00
for (auto extension : extensions)
extension.second(sentence, miscInfo);
2018-07-27 13:42:21 +08:00
return sentence;
}