Fix for windows
This commit is contained in:
parent
3e22f9ea93
commit
7931a10b88
@ -27,6 +27,7 @@ if (WIN32)
|
||||
set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_64")
|
||||
list(APPEND CMAKE_PREFIX_PATH "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows")
|
||||
set(Tesseract_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/share/tesseract")
|
||||
set(VCPKG_BIN_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/bin")
|
||||
elseif (VCPKG_TARGET_TRIPLET MATCHES "arm64"
|
||||
OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64"
|
||||
OR CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64"
|
||||
@ -35,11 +36,13 @@ if (WIN32)
|
||||
set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_arm64")
|
||||
list(APPEND CMAKE_PREFIX_PATH "C:/Users/User/.vcpkg-clion/vcpkg/installed/arm64-windows")
|
||||
set(Tesseract_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/arm64-windows/share/tesseract")
|
||||
set(VCPKG_BIN_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/arm64-windows/bin")
|
||||
else ()
|
||||
message(STATUS "Detected x64 target architecture (default)")
|
||||
set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_64")
|
||||
list(APPEND CMAKE_PREFIX_PATH "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows")
|
||||
set(Tesseract_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/share/tesseract")
|
||||
set(VCPKG_BIN_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/bin")
|
||||
endif ()
|
||||
|
||||
find_package(Tesseract CONFIG REQUIRED)
|
||||
@ -164,6 +167,7 @@ if (WIN32)
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/no_devices.png" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/assets/ADBKeyboard.apk" DESTINATION "${CMAKE_BINARY_DIR}/assets")
|
||||
# adb копируется в post-build чтобы не падать при configure если adb.exe занят
|
||||
file(GLOB _adb_files "${CMAKE_CURRENT_SOURCE_DIR}/tools/adb/windows/*")
|
||||
foreach(_adb_file ${_adb_files})
|
||||
@ -204,14 +208,40 @@ if (WIN32)
|
||||
)
|
||||
|
||||
# Copy OpenSSL DLLs required for HTTPS (Qt SSL backend)
|
||||
file(GLOB _openssl_dlls "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/libssl*.dll"
|
||||
"${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/libcrypto*.dll")
|
||||
file(GLOB _openssl_dlls "${VCPKG_BIN_DIR}/libssl*.dll"
|
||||
"${VCPKG_BIN_DIR}/libcrypto*.dll")
|
||||
foreach(_dll ${_openssl_dlls})
|
||||
add_custom_command(TARGET ARC POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_dll}" "$<TARGET_FILE_DIR:ARC>"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
# Copy Tesseract, Leptonica, and their transitive dependency DLLs
|
||||
file(GLOB _tesseract_dlls "${VCPKG_BIN_DIR}/tesseract*.dll"
|
||||
"${VCPKG_BIN_DIR}/leptonica*.dll"
|
||||
"${VCPKG_BIN_DIR}/libpng*.dll"
|
||||
"${VCPKG_BIN_DIR}/jpeg*.dll"
|
||||
"${VCPKG_BIN_DIR}/tiff*.dll"
|
||||
"${VCPKG_BIN_DIR}/zlib*.dll"
|
||||
"${VCPKG_BIN_DIR}/gif*.dll"
|
||||
"${VCPKG_BIN_DIR}/libwebp*.dll"
|
||||
"${VCPKG_BIN_DIR}/libsharpyuv*.dll"
|
||||
"${VCPKG_BIN_DIR}/openjp2*.dll"
|
||||
"${VCPKG_BIN_DIR}/archive*.dll"
|
||||
"${VCPKG_BIN_DIR}/libcurl*.dll"
|
||||
"${VCPKG_BIN_DIR}/lz4*.dll"
|
||||
"${VCPKG_BIN_DIR}/zstd*.dll"
|
||||
"${VCPKG_BIN_DIR}/liblzma*.dll"
|
||||
"${VCPKG_BIN_DIR}/bz2*.dll"
|
||||
"${VCPKG_BIN_DIR}/iconv*.dll"
|
||||
"${VCPKG_BIN_DIR}/charset*.dll"
|
||||
"${VCPKG_BIN_DIR}/libxml2*.dll")
|
||||
foreach(_dll ${_tesseract_dlls})
|
||||
add_custom_command(TARGET ARC POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_dll}" "$<TARGET_FILE_DIR:ARC>"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
elseif (APPLE)
|
||||
target_link_libraries(ARC
|
||||
Qt6::Widgets
|
||||
@ -229,6 +259,7 @@ elseif (APPLE)
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/no_devices.png" DESTINATION "${CMAKE_BINARY_DIR}")
|
||||
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/assets/ADBKeyboard.apk" DESTINATION "${CMAKE_BINARY_DIR}/assets")
|
||||
endif ()
|
||||
|
||||
target_include_directories(ARC PRIVATE
|
||||
|
||||
@ -322,6 +322,21 @@ bool AdbUtils::makeTap(const QString &deviceId, const int x, const int y) {
|
||||
|
||||
bool AdbUtils::enableAdbIMEKeyboard(const QString &deviceId) {
|
||||
const QString adb = adbPath();
|
||||
|
||||
// Проверяем, установлен ли ADB Keyboard
|
||||
QString installedList;
|
||||
startProcess(adb, {"-s", deviceId, "shell", "pm", "list", "packages", "com.android.adbkeyboard"}, &installedList);
|
||||
if (!installedList.contains("com.android.adbkeyboard")) {
|
||||
const QString apkPath = QCoreApplication::applicationDirPath() + "/assets/ADBKeyboard.apk";
|
||||
qDebug() << "[AdbUtils] ADB Keyboard not installed, installing from:" << apkPath;
|
||||
QString installErr;
|
||||
if (!startProcess(adb, {"-s", deviceId, "install", apkPath}, nullptr, &installErr)) {
|
||||
qWarning() << "[AdbUtils] Failed to install ADB Keyboard:" << installErr;
|
||||
return false;
|
||||
}
|
||||
qDebug() << "[AdbUtils] ADB Keyboard installed successfully";
|
||||
}
|
||||
|
||||
struct Step { QStringList args; };
|
||||
Step steps[] = {
|
||||
{{"-s", deviceId, "shell", "ime", "enable", "com.android.adbkeyboard/.AdbIME"}},
|
||||
@ -373,18 +388,22 @@ bool AdbUtils::disableAdbIMEKeyboard(const QString &deviceId) {
|
||||
}
|
||||
|
||||
bool AdbUtils::makeSwipe(const QString &deviceId, const int x1, const int y1, const int x2, const int y2) {
|
||||
return makeSwipe(deviceId, x1, y1, x2, y2, -1);
|
||||
}
|
||||
|
||||
bool AdbUtils::makeSwipe(const QString &deviceId, const int x1, const int y1, const int x2, const int y2, int durationMs) {
|
||||
QStringList args = {
|
||||
"-s", deviceId,
|
||||
"shell", "input",
|
||||
"swipe",
|
||||
QString::number(x1), QString::number(y1),
|
||||
QString::number(x2), QString::number(y2)
|
||||
};
|
||||
if (durationMs > 0) args << QString::number(durationMs);
|
||||
|
||||
QProcess process;
|
||||
process.setWorkingDirectory(adbDir());
|
||||
process.start(
|
||||
adbPath(),
|
||||
{
|
||||
"-s", deviceId,
|
||||
"shell", "input",
|
||||
"swipe",
|
||||
QString::number(x1), QString::number(y1),
|
||||
QString::number(x2), QString::number(y2)
|
||||
}
|
||||
);
|
||||
process.start(adbPath(), args);
|
||||
if (!process.waitForStarted(5000)) {
|
||||
qWarning() << "[AdbUtils] Failed to start adb swipe:" << process.errorString();
|
||||
return false;
|
||||
|
||||
@ -37,6 +37,7 @@ public:
|
||||
static bool disableAdbIMEKeyboard(const QString &deviceId);
|
||||
|
||||
static bool makeSwipe(const QString &deviceId, int x1, int y1, int x2, int y2);
|
||||
static bool makeSwipe(const QString &deviceId, int x1, int y1, int x2, int y2, int durationMs);
|
||||
|
||||
static bool inputText(const QString &deviceId, const QString &text);
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ void GetCardInfoScript::doStart() {
|
||||
qDebug() << "[Black::GetCardInfo] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + m_deviceId + " " + m_appCode;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode;
|
||||
qWarning() << m_error;
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
|
||||
@ -40,11 +40,9 @@ void GetLastTransactionsScript::doStart() {
|
||||
qDebug() << "[Black::GetLastTransactions] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + m_deviceId;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + m_deviceId + ")";
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("black/GetLastTransactions", m_deviceId, m_error,
|
||||
AdbUtils::captureScreenshotBytes(m_deviceId),
|
||||
"FETCH_TRANSACTIONS");
|
||||
AppLogger::log("black/GetLastTransactions", m_deviceId, m_error, {}, "FETCH_TRANSACTIONS");
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
return;
|
||||
|
||||
@ -42,7 +42,7 @@ void GetProfileInfoScript::doStart() {
|
||||
qDebug() << "[Black::GetProfileInfo] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + m_deviceId + " " + m_appCode;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode;
|
||||
qWarning() << m_error;
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
|
||||
@ -38,10 +38,9 @@ void LoginAndCheckAccountsScript::doStart() {
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode, device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cant open the home screen: " + m_deviceId + " " + m_appCode;
|
||||
m_error = "Cant open the home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode;
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("black/LoginAndCheck", m_deviceId, m_error,
|
||||
AdbUtils::captureScreenshotBytes(m_deviceId), "FETCH_PROFILE");
|
||||
AppLogger::log("black/LoginAndCheck", m_deviceId, m_error, {}, "FETCH_PROFILE");
|
||||
BankProfileDAO::updateComment(app.id,
|
||||
"Не прошла проверка " + QDateTime::currentDateTime().toString("dd.MM.yyyy HH:mm:ss"));
|
||||
|
||||
|
||||
@ -52,11 +52,9 @@ void PayByCardScript::makePayment(
|
||||
qDebug() << "[Black::PayByCard] Not on home screen, restarting app...";
|
||||
const BankProfileInfo app = BankProfileDAO::getApplication(m_account.deviceId, m_account.appCode);
|
||||
if (!runAppAndGoToHomeScreen(deviceId, app.package, pinCode, width, height)) {
|
||||
m_error = "Cannot reach home screen: " + deviceId;
|
||||
m_error = "Cannot reach home screen: " + DeviceDAO::getDeviceById(m_account.deviceId).name + " (" + deviceId + ")";
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("black/PayByCard", deviceId, m_error,
|
||||
AdbUtils::captureScreenshotBytes(deviceId),
|
||||
"CREATE_TRANSACTION");
|
||||
AppLogger::log("black/PayByCard", deviceId, m_error, {}, "CREATE_TRANSACTION");
|
||||
AdbUtils::tryToKillApplication(deviceId, app.package);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -40,7 +40,7 @@ void GetCardInfoScript::doStart() {
|
||||
qDebug() << "[Dushanbe::GetCardInfo] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + m_deviceId + " " + m_appCode;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode;
|
||||
qWarning() << m_error;
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
|
||||
@ -258,11 +258,9 @@ void GetLastTransactionsScript::doStart() {
|
||||
qDebug() << "[Dushanbe::GetLastTransactions] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + m_deviceId;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + m_deviceId + ")";
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("dushanbe/GetLastTransactions", m_deviceId, m_error,
|
||||
AdbUtils::captureScreenshotBytes(m_deviceId),
|
||||
"FETCH_TRANSACTIONS");
|
||||
AppLogger::log("dushanbe/GetLastTransactions", m_deviceId, m_error, {}, "FETCH_TRANSACTIONS");
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
return;
|
||||
|
||||
@ -41,7 +41,7 @@ void GetProfileInfoScript::doStart() {
|
||||
qDebug() << "[Dushanbe::GetProfileInfo] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + m_deviceId + " " + m_appCode;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode;
|
||||
qWarning() << m_error;
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
|
||||
@ -37,10 +37,9 @@ void LoginAndCheckAccountsScript::doStart() {
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode, device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cant open the home screen: " + m_deviceId + " " + m_appCode;
|
||||
m_error = "Cant open the home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode;
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("dushanbe/LoginAndCheck", m_deviceId, m_error,
|
||||
AdbUtils::captureScreenshotBytes(m_deviceId), "FETCH_PROFILE");
|
||||
AppLogger::log("dushanbe/LoginAndCheck", m_deviceId, m_error, {}, "FETCH_PROFILE");
|
||||
BankProfileDAO::updateComment(app.id,
|
||||
"Не прошла проверка " + QDateTime::currentDateTime().toString("dd.MM.yyyy HH:mm:ss"));
|
||||
|
||||
|
||||
@ -127,11 +127,9 @@ void PayByCardScript::doStart() {
|
||||
qDebug() << "[Dushanbe::PayByCard] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(device.adbSerial, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + device.id;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + device.id + ")";
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("dushanbe/PayByCard", device.id, m_error,
|
||||
AdbUtils::captureScreenshotBytes(device.adbSerial),
|
||||
"CREATE_TRANSACTION");
|
||||
AppLogger::log("dushanbe/PayByCard", device.id, m_error, {}, "CREATE_TRANSACTION");
|
||||
AdbUtils::tryToKillApplication(device.adbSerial, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
return;
|
||||
|
||||
@ -124,11 +124,9 @@ void PayByPhoneScript::doStart() {
|
||||
qDebug() << "[Dushanbe::PayByPhone] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(device.adbSerial, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + device.id;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + device.id + ")";
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("dushanbe/PayByPhone", device.id, m_error,
|
||||
AdbUtils::captureScreenshotBytes(device.adbSerial),
|
||||
"CREATE_TRANSACTION");
|
||||
AppLogger::log("dushanbe/PayByPhone", device.id, m_error, {}, "CREATE_TRANSACTION");
|
||||
AdbUtils::tryToKillApplication(device.adbSerial, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
return;
|
||||
|
||||
@ -110,7 +110,7 @@ bool CommonScript::runAppAndGoToHomeScreen(
|
||||
}
|
||||
|
||||
// Проверяем на баннер Google Play "Доступно обновление"
|
||||
if (Node gpNode = xmlScreenParser.tryToFindGooglePlayBanner(); !gpNode.isEmpty()) {
|
||||
if (Node gpNode = xmlScreenParser.tryToFindGooglePlayBanner(width, height); !gpNode.isEmpty()) {
|
||||
qDebug() << "[runAppAndGoToHomeScreen] Google Play update banner detected, closing...";
|
||||
AdbUtils::makeTap(deviceId, gpNode.x(), gpNode.y());
|
||||
QThread::msleep(1500);
|
||||
@ -359,6 +359,10 @@ void CommonScript::createBankProfileIfNeeded(const QString &deviceId, const QStr
|
||||
}
|
||||
}
|
||||
|
||||
bool CommonScript::isAppRunning(const QString &deviceId, const QString &packageName) {
|
||||
return !AdbUtils::tryToGetRunningAppPid(deviceId, packageName).isEmpty();
|
||||
}
|
||||
|
||||
void CommonScript::stop() {
|
||||
m_running = false;
|
||||
}
|
||||
|
||||
@ -60,15 +60,22 @@ protected:
|
||||
// Создаёт bank_profile на сервере если ещё не создан
|
||||
void createBankProfileIfNeeded(const QString &deviceId, const QString &appCode);
|
||||
|
||||
// Проверяет что приложение ещё запущено на устройстве
|
||||
static bool isAppRunning(const QString &deviceId, const QString &packageName);
|
||||
|
||||
bool m_running = true;
|
||||
ScreenXmlParser xmlScreenParser;
|
||||
int m_counter = 0;
|
||||
|
||||
QByteArray m_resultScreenshot;
|
||||
|
||||
signals:
|
||||
void finished();
|
||||
|
||||
void finishedWithResult(const QString &result);
|
||||
|
||||
void screenshotReady(const QByteArray &screenshot);
|
||||
|
||||
public slots:
|
||||
virtual void start() final;
|
||||
|
||||
|
||||
@ -59,11 +59,8 @@ void GetCardInfoScript::doStart() {
|
||||
qDebug() << "[GetCardInfo] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + m_deviceId;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + m_deviceId + ")";
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("ozon/GetCardInfo", m_deviceId, m_error,
|
||||
AdbUtils::captureScreenshotBytes(m_deviceId),
|
||||
"FETCH_PROFILE");
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
return;
|
||||
@ -115,11 +112,8 @@ void GetCardInfoScript::doStart() {
|
||||
qDebug() << "[GetCardInfo] Not on home screen before card search, restarting...";
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen before card search: " + m_deviceId;
|
||||
m_error = "Cannot reach home screen before card search: " + device.name + " (" + m_deviceId + ")";
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("ozon/GetCardInfo", m_deviceId, m_error,
|
||||
AdbUtils::captureScreenshotBytes(m_deviceId),
|
||||
"FETCH_PROFILE");
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
return;
|
||||
|
||||
@ -59,10 +59,11 @@ static QString extractTransactionId(const QString &ocrText) {
|
||||
// ID может быть на одной строке: "ID операции B606513042211200000120011700501"
|
||||
// или с дефисами: "ID операции po-3140eb01-002c-5000-8000-033396b637e1"
|
||||
// или разбит на 2 строки: "ID ... po-3140eb01-002c-5000-8000-033396b\n ... 637e1"
|
||||
QRegularExpression reId(R"(ID\s+операции\s*=?\s*([A-Za-zА-Яа-яЁё0-9\-]+(?:\s+[A-Za-zА-Яа-яЁё0-9\-]+)?))");
|
||||
QRegularExpression reId(R"(ID\s+операции\s*=?\s*([A-Za-z0-9\-]+(?:[^\S\n]+[A-Za-z0-9\-]+)?))");
|
||||
if (auto m = reId.match(ocrText); m.hasMatch()) {
|
||||
QString id = m.captured(1);
|
||||
id.remove(QRegularExpression(R"(\s+)"));
|
||||
id.remove(' ');
|
||||
id.remove(QChar(0x00A0));
|
||||
return id;
|
||||
}
|
||||
|
||||
@ -119,7 +120,7 @@ void GetLastTransactionsScript::doStart() {
|
||||
}
|
||||
|
||||
// Выбор режима: поиск конкретной транзакции или сканирование последних
|
||||
if (m_searchAmount > 0) {
|
||||
if (qAbs(m_searchAmount) > 0.01) {
|
||||
searchTransaction(device, accountId);
|
||||
} else {
|
||||
scanRecentTransactions(device, accountId);
|
||||
@ -148,11 +149,11 @@ bool GetLastTransactionsScript::navigateToTransactionList(const DeviceInfo &devi
|
||||
if (!xmlScreenParser.isHomeScreen()) {
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + m_deviceId;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + m_deviceId + ")";
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("ozon/GetLastTransactions", m_deviceId, m_error,
|
||||
AdbUtils::captureScreenshotBytes(m_deviceId),
|
||||
"FETCH_TRANSACTIONS");
|
||||
m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||||
if (!m_resultScreenshot.isEmpty()) emit screenshotReady(m_resultScreenshot);
|
||||
AppLogger::log("ozon/GetLastTransactions", m_deviceId, m_error, {}, "FETCH_TRANSACTIONS");
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
return false;
|
||||
}
|
||||
@ -164,14 +165,14 @@ bool GetLastTransactionsScript::navigateToTransactionList(const DeviceInfo &devi
|
||||
QThread::msleep(500);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
|
||||
// Скроллим до "Все" и тапаем
|
||||
// Скроллим до "Все" и тапаем (быстрый fling чтобы пропустить баннеры)
|
||||
const int navBarTop = device.screenHeight - (device.screenHeight / 10);
|
||||
Node allBtn;
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
if (QThread::currentThread()->isInterruptionRequested()) return false;
|
||||
const int x = device.screenWidth / 2;
|
||||
const int offset = device.screenHeight / 4;
|
||||
AdbUtils::makeSwipe(m_deviceId, x, device.screenHeight - offset, x, offset);
|
||||
QThread::msleep(1000);
|
||||
AdbUtils::makeSwipe(m_deviceId, x, device.screenHeight - 200, x, 200, 100);
|
||||
QThread::msleep(1500);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
|
||||
allBtn = xmlScreenParser.findButtonNode("Все", false);
|
||||
@ -190,6 +191,7 @@ bool GetLastTransactionsScript::navigateToTransactionList(const DeviceInfo &devi
|
||||
|
||||
// Ждём экран "Операции"
|
||||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
if (QThread::currentThread()->isInterruptionRequested()) return false;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
if (xmlScreenParser.isTransactionListScreen()) return true;
|
||||
QThread::msleep(1500);
|
||||
@ -202,33 +204,139 @@ bool GetLastTransactionsScript::navigateToTransactionList(const DeviceInfo &devi
|
||||
|
||||
void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int accountId) {
|
||||
const QTimeZone msk("Europe/Moscow");
|
||||
const int maxScrolls = 15;
|
||||
const int maxScrolls = 30;
|
||||
const int navBarTop = device.screenHeight - (device.screenHeight / 10);
|
||||
|
||||
// Целевая дата в МСК для поиска заголовка дня в списке
|
||||
const QDateTime searchMsk = m_searchTime.toTimeZone(msk);
|
||||
const QDate searchDate = searchMsk.date();
|
||||
|
||||
qDebug() << "[FetchTransactions] Searching: amount=" << m_searchAmount
|
||||
<< "time=" << m_searchTime.toString(Qt::ISODate);
|
||||
<< "time=" << m_searchTime.toString(Qt::ISODate)
|
||||
<< "date(MSK)=" << searchDate.toString("dd.MM.yyyy");
|
||||
|
||||
// ── Шаг 1: скроллим до нужной даты ──────────────────────────────
|
||||
bool dateFound = false;
|
||||
for (int scroll = 0; scroll < maxScrolls; ++scroll) {
|
||||
if (QThread::currentThread()->isInterruptionRequested()) {
|
||||
m_error = "Interrupted";
|
||||
return;
|
||||
}
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
const QList<Node> txButtons = xmlScreenParser.findTransactionButtons(20);
|
||||
|
||||
for (const Node &btn : txButtons) {
|
||||
const TransactionInfo parsed = xmlScreenParser.parseTransactionButtonText(btn.text);
|
||||
if (qAbs(qAbs(parsed.amount) - qAbs(m_searchAmount)) > 0.01) continue;
|
||||
// Ищем заголовки дат на экране (формат: "4 января, вс")
|
||||
static const QMap<QString, int> monthMap = {
|
||||
{"января", 1}, {"февраля", 2}, {"марта", 3}, {"апреля", 4},
|
||||
{"мая", 5}, {"июня", 6}, {"июля", 7}, {"августа", 8},
|
||||
{"сентября", 9}, {"октября", 10}, {"ноября", 11}, {"декабря", 12}
|
||||
};
|
||||
|
||||
bool hasOlderDate = false;
|
||||
for (const Node &node : xmlScreenParser.getNodes()) {
|
||||
if (node.className != "android.widget.TextView") continue;
|
||||
const QString t = node.text.trimmed();
|
||||
// Парсим "4 января, вс" → QDate
|
||||
static const QRegularExpression dateRx(R"((\d{1,2})\s+(\S+),\s+\S+)");
|
||||
const auto match = dateRx.match(t);
|
||||
if (!match.hasMatch()) continue;
|
||||
const int day = match.captured(1).toInt();
|
||||
const int month = monthMap.value(match.captured(2), 0);
|
||||
if (month == 0) continue;
|
||||
const QDate headerDate(searchDate.year(), month, day);
|
||||
if (!headerDate.isValid()) continue;
|
||||
|
||||
if (headerDate == searchDate) {
|
||||
dateFound = true;
|
||||
qDebug() << "[FetchTransactions] Found target date header:" << t;
|
||||
break;
|
||||
}
|
||||
if (headerDate < searchDate) {
|
||||
hasOlderDate = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (dateFound) break;
|
||||
|
||||
if (hasOlderDate) {
|
||||
// Проскочили мимо нужной даты — её нет в списке
|
||||
qDebug() << "[FetchTransactions] Passed target date, not found in list";
|
||||
break;
|
||||
}
|
||||
|
||||
// Скроллим вниз
|
||||
AdbUtils::makeSwipe(m_deviceId, device.screenWidth / 2,
|
||||
device.screenHeight - 300, device.screenWidth / 2, 300, 300);
|
||||
QThread::msleep(1500);
|
||||
}
|
||||
|
||||
if (!dateFound) {
|
||||
m_error = "Date not found in transaction list: " + searchDate.toString("dd.MM.yyyy");
|
||||
qWarning() << "[FetchTransactions]" << m_error;
|
||||
m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||||
if (!m_resultScreenshot.isEmpty()) emit screenshotReady(m_resultScreenshot);
|
||||
return;
|
||||
}
|
||||
|
||||
// ── Шаг 2: на экране с нужной датой ищем транзакцию по сумме ────
|
||||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
if (QThread::currentThread()->isInterruptionRequested()) {
|
||||
m_error = "Interrupted";
|
||||
return;
|
||||
}
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
QList<Node> txButtons = xmlScreenParser.findTransactionButtons(20);
|
||||
|
||||
for (int bi = 0; bi < txButtons.size(); ++bi) {
|
||||
if (QThread::currentThread()->isInterruptionRequested()) {
|
||||
m_error = "Interrupted";
|
||||
return;
|
||||
}
|
||||
|
||||
const TransactionInfo parsed = xmlScreenParser.parseTransactionButtonText(txButtons[bi].text);
|
||||
if (qAbs(parsed.amount - m_searchAmount) > 0.01) continue;
|
||||
|
||||
// Если кнопка за экраном — скроллим до неё, рассчитывая дистанцию
|
||||
if (txButtons[bi].y() <= 0 || txButtons[bi].y() >= navBarTop) {
|
||||
bool scrolledIntoView = false;
|
||||
for (int s = 0; s < 5; ++s) {
|
||||
const int btnY = txButtons[bi].y();
|
||||
const int x = device.screenWidth / 2;
|
||||
const int visibleCenter = navBarTop / 2;
|
||||
// Расстояние от кнопки до центра видимой области + небольшой запас
|
||||
const int delta = btnY - visibleCenter;
|
||||
const int fromY = qBound(100, visibleCenter + delta / 2, device.screenHeight - 100);
|
||||
const int toY = qBound(100, visibleCenter - delta / 2, device.screenHeight - 100);
|
||||
AdbUtils::makeSwipe(m_deviceId, x, fromY, x, toY, 300);
|
||||
QThread::msleep(1000);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
txButtons = xmlScreenParser.findTransactionButtons(20);
|
||||
if (bi < txButtons.size() && txButtons[bi].y() > 0 && txButtons[bi].y() < navBarTop) {
|
||||
scrolledIntoView = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!scrolledIntoView) continue;
|
||||
}
|
||||
|
||||
const Node &visibleBtn = txButtons[bi];
|
||||
qDebug() << "[FetchTransactions] Amount match:" << parsed.amount
|
||||
<< "at" << btn.x() << btn.y();
|
||||
<< "at" << visibleBtn.x() << visibleBtn.y();
|
||||
|
||||
AdbUtils::makeTap(m_deviceId, btn.x(), btn.y());
|
||||
// Тапаем и ждём деталей
|
||||
AdbUtils::makeTap(m_deviceId, visibleBtn.x(), visibleBtn.y());
|
||||
QThread::msleep(2000);
|
||||
|
||||
// Ждём загрузки деталей
|
||||
TransactionInfo detail;
|
||||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
for (int da = 0; da < 10; ++da) {
|
||||
if (QThread::currentThread()->isInterruptionRequested()) {
|
||||
m_error = "Interrupted";
|
||||
return;
|
||||
}
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
detail = xmlScreenParser.parseTransactionDetail();
|
||||
if (!detail.bankTime.isEmpty()) break;
|
||||
if (xmlScreenParser.isTransactionListScreen()) {
|
||||
AdbUtils::makeTap(m_deviceId, btn.x(), btn.y());
|
||||
AdbUtils::makeTap(m_deviceId, visibleBtn.x(), visibleBtn.y());
|
||||
}
|
||||
QThread::msleep(1500);
|
||||
}
|
||||
@ -240,27 +348,22 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int
|
||||
continue;
|
||||
}
|
||||
|
||||
// Парсим время
|
||||
// Парсим дату из деталей
|
||||
QString dtStr = detail.bankTime;
|
||||
for (int ci = 0; ci < dtStr.size(); ++ci) {
|
||||
const QChar ch = dtStr.at(ci);
|
||||
if (ch != ' ' && ch.category() == QChar::Separator_Space) dtStr[ci] = ' ';
|
||||
}
|
||||
|
||||
QDateTime txTime = QDateTime::fromString(dtStr, "dd.MM.yyyy, HH:mm");
|
||||
if (!txTime.isValid()) txTime = QDateTime::fromString(dtStr, "dd.MM.yyyy,HH:mm");
|
||||
if (txTime.isValid()) txTime.setTimeZone(msk);
|
||||
|
||||
// Проверяем ±1 час
|
||||
if (m_searchTime.isValid() && txTime.isValid()) {
|
||||
const qint64 diffSecs = qAbs(txTime.toUTC().secsTo(m_searchTime.toUTC()));
|
||||
if (diffSecs > 3600) {
|
||||
qDebug() << "[FetchTransactions] Time mismatch: tx=" << dtStr
|
||||
<< "diff=" << diffSecs << "sec, skipping";
|
||||
AdbUtils::goBack(m_deviceId);
|
||||
QThread::msleep(1000);
|
||||
continue;
|
||||
}
|
||||
// Проверяем что дата совпадает (тот же день)
|
||||
if (txTime.isValid() && txTime.date() != searchDate) {
|
||||
qDebug() << "[FetchTransactions] Wrong date:" << dtStr << "expected" << searchDate;
|
||||
AdbUtils::goBack(m_deviceId);
|
||||
QThread::msleep(1000);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Нашли!
|
||||
@ -268,9 +371,11 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int
|
||||
<< "amount=" << parsed.amount << "time=" << dtStr
|
||||
<< "name=" << detail.name;
|
||||
|
||||
m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||||
|
||||
// Пробуем получить ID через "Документы" → OCR
|
||||
QString externalId = detail.bankTrExternalId;
|
||||
if (externalId.isEmpty()) {
|
||||
if (externalId.isEmpty() && !QThread::currentThread()->isInterruptionRequested()) {
|
||||
Node docBtn = xmlScreenParser.findButtonNode("Документы", false);
|
||||
if (!docBtn.isEmpty()) {
|
||||
qDebug() << "[FetchTransactions] Tapping 'Документы'...";
|
||||
@ -279,6 +384,7 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int
|
||||
|
||||
bool docLoaded = false;
|
||||
for (int da = 0; da < 15; ++da) {
|
||||
if (QThread::currentThread()->isInterruptionRequested()) break;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
if (!xmlScreenParser.findNodeByContentDesc("Поделиться").isEmpty()) {
|
||||
docLoaded = true;
|
||||
@ -291,6 +397,7 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int
|
||||
QThread::msleep(500);
|
||||
const QByteArray screenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||||
if (!screenshot.isEmpty()) {
|
||||
m_resultScreenshot = screenshot;
|
||||
const QString ocrText = recognizeTextFromImage(screenshot);
|
||||
if (!ocrText.isEmpty()) {
|
||||
qDebug() << "[FetchTransactions] OCR result:" << ocrText;
|
||||
@ -330,21 +437,27 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int
|
||||
TransactionDAO::insertTransactionIfNotExists(tx);
|
||||
}
|
||||
|
||||
if (!m_resultScreenshot.isEmpty())
|
||||
emit screenshotReady(m_resultScreenshot);
|
||||
|
||||
AdbUtils::goBack(m_deviceId);
|
||||
QThread::msleep(1000);
|
||||
return; // успех — m_error пустой
|
||||
AdbUtils::goBack(m_deviceId);
|
||||
QThread::msleep(1000);
|
||||
return; // успех
|
||||
}
|
||||
|
||||
// Скроллим вниз
|
||||
const int x = device.screenWidth / 2;
|
||||
const int offset = device.screenHeight / 4;
|
||||
AdbUtils::makeSwipe(m_deviceId, x, device.screenHeight - offset, x, offset);
|
||||
// Скроллим чуть вниз чтобы увидеть больше транзакций за этот день
|
||||
AdbUtils::makeSwipe(m_deviceId, device.screenWidth / 2,
|
||||
device.screenHeight - 300, device.screenWidth / 2, 300, 300);
|
||||
QThread::msleep(1000);
|
||||
}
|
||||
|
||||
m_error = "Transaction not found: amount=" + QString::number(m_searchAmount, 'f', 2)
|
||||
+ " time=" + m_searchTime.toString(Qt::ISODate);
|
||||
+ " date=" + searchDate.toString("dd.MM.yyyy");
|
||||
qWarning() << "[FetchTransactions]" << m_error;
|
||||
m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||||
if (!m_resultScreenshot.isEmpty()) emit screenshotReady(m_resultScreenshot);
|
||||
}
|
||||
|
||||
void GetLastTransactionsScript::scanRecentTransactions(const DeviceInfo &device, int accountId) {
|
||||
|
||||
@ -55,7 +55,7 @@ void GetProfileInfoScript::doStart() {
|
||||
qDebug() << "[GetProfileInfo] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + m_deviceId + " " + m_appCode;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode;
|
||||
qWarning() << m_error;
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
@ -108,7 +108,8 @@ void GetProfileInfoScript::doStart() {
|
||||
// Извлекаем полное имя и телефон
|
||||
const QString fullName = xmlScreenParser.parseProfileFullName();
|
||||
QString phone = xmlScreenParser.parseProfilePhone();
|
||||
phone.remove(QRegularExpression(R"(\s+)")); // убираем все виды пробелов (включая \u00A0)
|
||||
phone.remove(' ');
|
||||
phone.remove(QChar(0x00A0));
|
||||
|
||||
qDebug() << "[GetProfileInfo] fullName:" << fullName << "phone:" << phone;
|
||||
|
||||
|
||||
@ -42,10 +42,10 @@ void LoginAndCheckAccountsScript::doStart() {
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
|
||||
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode, device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cant open the home screen: " + m_deviceId + " " + m_appCode;
|
||||
m_error = "Cant open the home screen: " + device.name + " (" + m_deviceId + ") " + m_appCode;
|
||||
qWarning() << m_error;
|
||||
AppLogger::log("ozon/LoginAndCheck", m_deviceId, m_error,
|
||||
AdbUtils::captureScreenshotBytes(m_deviceId), "FETCH_PROFILE");
|
||||
m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||||
if (!m_resultScreenshot.isEmpty()) emit screenshotReady(m_resultScreenshot);
|
||||
BankProfileDAO::updateComment(app.id,
|
||||
"Не прошла проверка " + QDateTime::currentDateTime().toString("dd.MM.yyyy HH:mm:ss"));
|
||||
|
||||
@ -58,6 +58,11 @@ void LoginAndCheckAccountsScript::doStart() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Скриншот домашнего экрана
|
||||
m_resultScreenshot = AdbUtils::captureScreenshotBytes(m_deviceId);
|
||||
if (!m_resultScreenshot.isEmpty())
|
||||
emit screenshotReady(m_resultScreenshot);
|
||||
|
||||
// Создаём bank profile если ещё не создан
|
||||
createBankProfileIfNeeded(device.id, m_appCode);
|
||||
|
||||
|
||||
@ -49,10 +49,11 @@ static QString extractTransactionId(const QString &ocrText) {
|
||||
// "ID операции B606513042211200000120011700501"
|
||||
// "ID операции po-3140eb01-002c-5000-8000-033396b637e1"
|
||||
// или разбит на 2 строки
|
||||
QRegularExpression reId(R"(ID\s+операции\s*=?\s*([A-Za-zА-Яа-яЁё0-9\-]+(?:\s+[A-Za-zА-Яа-яЁё0-9\-]+)?))");
|
||||
QRegularExpression reId(R"(ID\s+операции\s*=?\s*([A-Za-zА-Яа-яЁё0-9\-]+(?:[^\S\n]+[A-Za-zА-Яа-яЁё0-9\-]+)?))");
|
||||
if (auto m = reId.match(ocrText); m.hasMatch()) {
|
||||
QString id = m.captured(1);
|
||||
id.remove(QRegularExpression(R"(\s+)"));
|
||||
id.remove(' ');
|
||||
id.remove(QChar(0x00A0));
|
||||
return id;
|
||||
}
|
||||
|
||||
@ -88,62 +89,73 @@ void PayByCardScript::doStart() {
|
||||
return;
|
||||
}
|
||||
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
const QString &adbId = device.adbSerial;
|
||||
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
|
||||
// Закрываем рекламный bottom sheet
|
||||
if (Node adNode = xmlScreenParser.tryToFindAdBanner(); !adNode.isEmpty()) {
|
||||
qDebug() << "[PayByCard] Ad banner detected, closing...";
|
||||
AdbUtils::makeTap(device.id, adNode.x(), adNode.y());
|
||||
AdbUtils::makeTap(adbId, adNode.x(), adNode.y());
|
||||
QThread::msleep(1000);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
}
|
||||
|
||||
// Если не на домашнем экране — перезапускаем
|
||||
if (!xmlScreenParser.isHomeScreen()) {
|
||||
qDebug() << "[PayByCard] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(device.adbSerial, app.package, app.pinCode,
|
||||
if (!runAppAndGoToHomeScreen(adbId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + device.id;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + device.id + ")";
|
||||
qWarning() << m_error;
|
||||
AdbUtils::tryToKillApplication(device.adbSerial, app.package);
|
||||
AdbUtils::tryToKillApplication(adbId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
return;
|
||||
}
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
}
|
||||
|
||||
// Закрываем баннеры
|
||||
tryToCloseAllBannersOnHomePage(device.id, device.screenWidth, device.screenHeight);
|
||||
tryToCloseAllBannersOnHomePage(adbId, device.screenWidth, device.screenHeight);
|
||||
QThread::msleep(500);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
|
||||
// Закрываем баннер Google Play "Доступно обновление"
|
||||
if (Node gpNode = xmlScreenParser.tryToFindGooglePlayBanner(); !gpNode.isEmpty()) {
|
||||
if (Node gpNode = xmlScreenParser.tryToFindGooglePlayBanner(device.screenWidth, device.screenHeight); !gpNode.isEmpty()) {
|
||||
qDebug() << "[PayByCard] Google Play update banner detected, closing...";
|
||||
AdbUtils::makeTap(device.id, gpNode.x(), gpNode.y());
|
||||
AdbUtils::makeTap(adbId, gpNode.x(), gpNode.y());
|
||||
QThread::msleep(1500);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
}
|
||||
|
||||
// Закрываем баннер "Заказать карту" — тапаем сверху экрана
|
||||
if (Node orderCardNode = xmlScreenParser.findTextNode("Заказать карту"); !orderCardNode.isEmpty()) {
|
||||
qDebug() << "[PayByCard] 'Заказать карту' banner detected, closing...";
|
||||
AdbUtils::makeTap(device.id, device.screenWidth / 2, device.screenHeight / 20);
|
||||
AdbUtils::makeTap(adbId, device.screenWidth / 2, device.screenHeight / 20);
|
||||
QThread::msleep(1000);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
}
|
||||
|
||||
makePayment(device.adbSerial, app.pinCode, device.screenWidth, device.screenHeight);
|
||||
makePayment(device.adbSerial, app.package, app.pinCode, device.screenWidth, device.screenHeight);
|
||||
|
||||
emit finishedWithResult(m_error);
|
||||
}
|
||||
|
||||
void PayByCardScript::makePayment(
|
||||
const QString &deviceId,
|
||||
const QString &packageName,
|
||||
const QString &pinCode,
|
||||
const int width,
|
||||
const int height
|
||||
) {
|
||||
auto checkApp = [&]() -> bool {
|
||||
if (!isAppRunning(deviceId, packageName)) {
|
||||
m_error = "Приложение было закрыто";
|
||||
qWarning() << "[PayByCard]" << m_error;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
// 1. Нажимаем "Перевести" на домашнем экране
|
||||
Node transferBtn = xmlScreenParser.findButtonNode("Перевести", false);
|
||||
if (transferBtn.isEmpty()) {
|
||||
@ -159,6 +171,7 @@ void PayByCardScript::makePayment(
|
||||
// 2. Ждём экран "Платежи и переводы"
|
||||
bool paymentsPageLoaded = false;
|
||||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
Node title = xmlScreenParser.findTextNode("Платежи и переводы");
|
||||
if (!title.isEmpty()) {
|
||||
@ -190,6 +203,7 @@ void PayByCardScript::makePayment(
|
||||
// 4. Ждём экран "Перевод по номеру карты"
|
||||
bool cardScreenLoaded = false;
|
||||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
Node title = xmlScreenParser.findTextNode("Перевод по номеру карты");
|
||||
if (!title.isEmpty()) {
|
||||
@ -242,6 +256,7 @@ void PayByCardScript::makePayment(
|
||||
double fee = 0;
|
||||
bool feeCalculated = false;
|
||||
for (int attempt = 0; attempt < 15; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
|
||||
bool foundKomissiya = false;
|
||||
@ -299,6 +314,7 @@ void PayByCardScript::makePayment(
|
||||
|
||||
// 9. Ждём результат: "Успешно" или "Не удалось"
|
||||
for (int attempt = 0; attempt < 15; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
|
||||
// Если PIN-код появился позже — вводим
|
||||
@ -353,6 +369,8 @@ void PayByCardScript::makePayment(
|
||||
QThread::msleep(500);
|
||||
const QByteArray screenshot = AdbUtils::captureScreenshotBytes(deviceId);
|
||||
if (!screenshot.isEmpty()) {
|
||||
m_resultScreenshot = screenshot;
|
||||
emit screenshotReady(m_resultScreenshot);
|
||||
TransactionDAO::updateReceiptImage(txId, screenshot);
|
||||
qDebug() << "[PayByCard] Receipt saved to DB, txId:" << txId;
|
||||
|
||||
@ -366,11 +384,7 @@ void PayByCardScript::makePayment(
|
||||
} else {
|
||||
qWarning() << "[PayByCard] Could not extract transaction ID from OCR text";
|
||||
}
|
||||
} else {
|
||||
qWarning() << "[PayByCard] OCR returned empty text";
|
||||
}
|
||||
} else {
|
||||
qWarning() << "[PayByCard] Screenshot is empty";
|
||||
}
|
||||
} else {
|
||||
qWarning() << "[PayByCard] 'Поделиться' not found, skipping receipt";
|
||||
@ -380,12 +394,20 @@ void PayByCardScript::makePayment(
|
||||
QThread::msleep(1000);
|
||||
}
|
||||
|
||||
AdbUtils::goBack(deviceId);
|
||||
QThread::msleep(1000);
|
||||
AdbUtils::goBack(deviceId);
|
||||
QThread::msleep(1000);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!xmlScreenParser.findTextNode("Не удалось").isEmpty()) {
|
||||
m_error = "Перевод не удался (экран 'Не удалось')";
|
||||
qWarning() << "[PayByCard]" << m_error;
|
||||
AdbUtils::goBack(deviceId);
|
||||
QThread::msleep(1000);
|
||||
AdbUtils::goBack(deviceId);
|
||||
QThread::msleep(1000);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -27,6 +27,7 @@ private:
|
||||
|
||||
void makePayment(
|
||||
const QString &deviceId,
|
||||
const QString &packageName,
|
||||
const QString &pinCode,
|
||||
int width,
|
||||
int height
|
||||
|
||||
@ -49,10 +49,11 @@ static QString extractTransactionId(const QString &ocrText) {
|
||||
// "ID операции B606513042211200000120011700501"
|
||||
// "ID операции po-3140eb01-002c-5000-8000-033396b637e1"
|
||||
// или разбит на 2 строки
|
||||
QRegularExpression reId(R"(ID\s+операции\s*=?\s*([A-Za-zА-Яа-яЁё0-9\-]+(?:\s+[A-Za-zА-Яа-яЁё0-9\-]+)?))");
|
||||
QRegularExpression reId(R"(ID\s+операции\s*=?\s*([A-Za-zА-Яа-яЁё0-9\-]+(?:[^\S\n]+[A-Za-zА-Яа-яЁё0-9\-]+)?))");
|
||||
if (auto m = reId.match(ocrText); m.hasMatch()) {
|
||||
QString id = m.captured(1);
|
||||
id.remove(QRegularExpression(R"(\s+)"));
|
||||
id.remove(' ');
|
||||
id.remove(QChar(0x00A0));
|
||||
return id;
|
||||
}
|
||||
|
||||
@ -89,62 +90,74 @@ void PayByPhoneScript::doStart() {
|
||||
return;
|
||||
}
|
||||
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
const QString &adbId = device.adbSerial;
|
||||
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
|
||||
// Закрываем рекламный bottom sheet
|
||||
if (Node adNode = xmlScreenParser.tryToFindAdBanner(); !adNode.isEmpty()) {
|
||||
qDebug() << "[PayByPhone] Ad banner detected, closing...";
|
||||
AdbUtils::makeTap(device.id, adNode.x(), adNode.y());
|
||||
AdbUtils::makeTap(adbId, adNode.x(), adNode.y());
|
||||
QThread::msleep(1000);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
}
|
||||
|
||||
// Если не на домашнем экране — перезапускаем
|
||||
if (!xmlScreenParser.isHomeScreen()) {
|
||||
qDebug() << "[PayByPhone] Not on home screen, restarting app...";
|
||||
if (!runAppAndGoToHomeScreen(device.adbSerial, app.package, app.pinCode,
|
||||
if (!runAppAndGoToHomeScreen(adbId, app.package, app.pinCode,
|
||||
device.screenWidth, device.screenHeight)) {
|
||||
m_error = "Cannot reach home screen: " + device.id;
|
||||
m_error = "Cannot reach home screen: " + device.name + " (" + device.id + ")";
|
||||
qWarning() << m_error;
|
||||
AdbUtils::tryToKillApplication(device.adbSerial, app.package);
|
||||
AdbUtils::tryToKillApplication(adbId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
return;
|
||||
}
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
}
|
||||
|
||||
// Закрываем баннеры
|
||||
tryToCloseAllBannersOnHomePage(device.id, device.screenWidth, device.screenHeight);
|
||||
tryToCloseAllBannersOnHomePage(adbId, device.screenWidth, device.screenHeight);
|
||||
QThread::msleep(500);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
|
||||
// Закрываем баннер Google Play "Доступно обновление"
|
||||
if (Node gpNode = xmlScreenParser.tryToFindGooglePlayBanner(); !gpNode.isEmpty()) {
|
||||
if (Node gpNode = xmlScreenParser.tryToFindGooglePlayBanner(device.screenWidth, device.screenHeight); !gpNode.isEmpty()) {
|
||||
qDebug() << "[PayByPhone] Google Play update banner detected, closing...";
|
||||
AdbUtils::makeTap(device.id, gpNode.x(), gpNode.y());
|
||||
AdbUtils::makeTap(adbId, gpNode.x(), gpNode.y());
|
||||
QThread::msleep(1500);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
}
|
||||
|
||||
// Закрываем баннер "Заказать карту" — тапаем сверху экрана
|
||||
if (Node orderCardNode = xmlScreenParser.findTextNode("Заказать карту"); !orderCardNode.isEmpty()) {
|
||||
qDebug() << "[PayByPhone] 'Заказать карту' banner detected, closing...";
|
||||
AdbUtils::makeTap(device.id, device.screenWidth / 2, device.screenHeight / 20);
|
||||
AdbUtils::makeTap(adbId, device.screenWidth / 2, device.screenHeight / 20);
|
||||
QThread::msleep(1000);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(device.id, ++m_counter));
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(adbId, ++m_counter));
|
||||
}
|
||||
|
||||
makePayment(device.adbSerial, app.pinCode, device.screenWidth, device.screenHeight);
|
||||
makePayment(device.adbSerial, app.package, app.pinCode, device.screenWidth, device.screenHeight);
|
||||
|
||||
emit finishedWithResult(m_error);
|
||||
}
|
||||
|
||||
void PayByPhoneScript::makePayment(
|
||||
const QString &deviceId,
|
||||
const QString &packageName,
|
||||
const QString &pinCode,
|
||||
const int width,
|
||||
const int height
|
||||
) {
|
||||
// Макрос-проверка: приложение живо?
|
||||
auto checkApp = [&]() -> bool {
|
||||
if (!isAppRunning(deviceId, packageName)) {
|
||||
m_error = "Приложение было закрыто";
|
||||
qWarning() << "[PayByPhone]" << m_error;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
// 1. Нажимаем "Перевести" на домашнем экране
|
||||
Node transferBtn = xmlScreenParser.findButtonNode("Перевести", false);
|
||||
if (transferBtn.isEmpty()) {
|
||||
@ -160,6 +173,7 @@ void PayByPhoneScript::makePayment(
|
||||
// 2. Ждём экран "Платежи и переводы" с полем "Телефон получателя"
|
||||
bool paymentsPageLoaded = false;
|
||||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
Node phoneField = xmlScreenParser.findFirstEditText();
|
||||
if (!phoneField.isEmpty()) {
|
||||
@ -185,7 +199,18 @@ void PayByPhoneScript::makePayment(
|
||||
// 4. Ждём экран "Кому перевести"
|
||||
bool phoneScreenLoaded = false;
|
||||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
|
||||
// Закрываем диалог "Разрешить доступ к контактам"
|
||||
Node notNowBtn = xmlScreenParser.findButtonNode("Не сейчас", false);
|
||||
if (!notNowBtn.isEmpty()) {
|
||||
qDebug() << "[PayByPhone] Contacts permission dialog detected, tapping 'Не сейчас'...";
|
||||
AdbUtils::makeTap(deviceId, notNowBtn.x(), notNowBtn.y());
|
||||
QThread::msleep(1500);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
}
|
||||
|
||||
Node title = xmlScreenParser.findTextNode("Кому перевести");
|
||||
if (!title.isEmpty()) {
|
||||
phoneScreenLoaded = true;
|
||||
@ -204,6 +229,7 @@ void PayByPhoneScript::makePayment(
|
||||
// 5. Тапаем на EditText и вводим номер телефона
|
||||
Node phoneInput;
|
||||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
phoneInput = xmlScreenParser.findFirstEditText();
|
||||
if (!phoneInput.isEmpty()) break;
|
||||
@ -226,6 +252,7 @@ void PayByPhoneScript::makePayment(
|
||||
bool bankSelected = false;
|
||||
bool otherBankClicked = false;
|
||||
for (int attempt = 0; attempt < 20; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
|
||||
// Проверяем: уже на экране суммы?
|
||||
@ -303,8 +330,9 @@ void PayByPhoneScript::makePayment(
|
||||
&& node.contentDesc != "base-go-back-button"
|
||||
&& node.contentDesc != "native-toolbar-close-button"
|
||||
&& node.contentDesc != "clear-input-icon") {
|
||||
qDebug() << "[PayByPhone] Found bank in list, tapping:" << node.contentDesc << "bounds:" << node.x() << node.y();
|
||||
AdbUtils::makeTap(deviceId, node.x(), node.y());
|
||||
const int tapX = node.x1() + node.width() / 4;
|
||||
qDebug() << "[PayByPhone] Found bank in list, tapping:" << node.contentDesc << "tapX:" << tapX << "y:" << node.y();
|
||||
AdbUtils::makeTap(deviceId, tapX, node.y());
|
||||
bankFound = true;
|
||||
break;
|
||||
}
|
||||
@ -365,6 +393,7 @@ void PayByPhoneScript::makePayment(
|
||||
// 7. Ждём экран "Подтвердите перевод" с кнопкой "Перевести ..."
|
||||
bool confirmScreenLoaded = false;
|
||||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
Node confirmTitle = xmlScreenParser.findTextNode("Подтвердите перевод");
|
||||
if (!confirmTitle.isEmpty()) {
|
||||
@ -404,6 +433,7 @@ void PayByPhoneScript::makePayment(
|
||||
|
||||
// 9. Ждём результат: "Успешно" или "Не удалось"
|
||||
for (int attempt = 0; attempt < 15; ++attempt) {
|
||||
if (!checkApp()) return;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
|
||||
// Если PIN-код появился позже — вводим
|
||||
@ -457,6 +487,8 @@ void PayByPhoneScript::makePayment(
|
||||
QThread::msleep(500);
|
||||
const QByteArray screenshot = AdbUtils::captureScreenshotBytes(deviceId);
|
||||
if (!screenshot.isEmpty()) {
|
||||
m_resultScreenshot = screenshot;
|
||||
emit screenshotReady(m_resultScreenshot);
|
||||
TransactionDAO::updateReceiptImage(txId, screenshot);
|
||||
qDebug() << "[PayByPhone] Receipt saved to DB, txId:" << txId;
|
||||
|
||||
@ -470,11 +502,7 @@ void PayByPhoneScript::makePayment(
|
||||
} else {
|
||||
qWarning() << "[PayByPhone] Could not extract transaction ID from OCR text";
|
||||
}
|
||||
} else {
|
||||
qWarning() << "[PayByPhone] OCR returned empty text";
|
||||
}
|
||||
} else {
|
||||
qWarning() << "[PayByPhone] Screenshot is empty";
|
||||
}
|
||||
} else {
|
||||
qWarning() << "[PayByPhone] 'Поделиться' not found, skipping receipt";
|
||||
@ -484,12 +512,20 @@ void PayByPhoneScript::makePayment(
|
||||
QThread::msleep(1000);
|
||||
}
|
||||
|
||||
AdbUtils::goBack(deviceId);
|
||||
QThread::msleep(1000);
|
||||
AdbUtils::goBack(deviceId);
|
||||
QThread::msleep(1000);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!xmlScreenParser.findTextNode("Не удалось").isEmpty()) {
|
||||
m_error = "Перевод не удался (экран 'Не удалось')";
|
||||
qWarning() << "[PayByPhone]" << m_error;
|
||||
AdbUtils::goBack(deviceId);
|
||||
QThread::msleep(1000);
|
||||
AdbUtils::goBack(deviceId);
|
||||
QThread::msleep(1000);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -29,6 +29,7 @@ private:
|
||||
|
||||
void makePayment(
|
||||
const QString &deviceId,
|
||||
const QString &packageName,
|
||||
const QString &pinCode,
|
||||
int width,
|
||||
int height
|
||||
|
||||
@ -40,6 +40,7 @@ static const QRegularExpression reNameAlt(R"(Перевод ([А-Яа-яЁё\s\*
|
||||
static const QRegularExpression reCardData(R"(цифрами\s+(\d\s\d\s\d\s\d).*?Сумма:\s([\d\s]+)\sруб)");
|
||||
|
||||
Node ScreenXmlParser::tryToFindBannerOrDialog(const int width, const int height) {
|
||||
if (m_nodes.isEmpty()) return {};
|
||||
// 1. Ищем push banner - он перекрывает весь экран
|
||||
Node first = m_nodes[0];
|
||||
for (const Node &node: m_nodes) {
|
||||
@ -221,7 +222,7 @@ Node ScreenXmlParser::tryToFindAdBanner() {
|
||||
return {};
|
||||
}
|
||||
|
||||
Node ScreenXmlParser::tryToFindGooglePlayBanner() {
|
||||
Node ScreenXmlParser::tryToFindGooglePlayBanner(const int screenWidth, const int screenHeight) {
|
||||
// Баннер Google Play "Доступно обновление" — ищем кнопку закрытия по content-desc
|
||||
for (const Node &node : m_nodes) {
|
||||
if (node.contentDesc.contains("Закрыть диалоговое окно") && node.clickable) {
|
||||
@ -233,7 +234,9 @@ Node ScreenXmlParser::tryToFindGooglePlayBanner() {
|
||||
if (node.contentDesc.contains("Доступно обновление")) {
|
||||
// Тапаем в верхнюю часть экрана (выше баннера), чтобы закрыть
|
||||
Node tapNode;
|
||||
tapNode.setBounds(540, 100, 541, 101);
|
||||
const int cx = screenWidth / 2;
|
||||
const int cy = screenHeight / 20;
|
||||
tapNode.setBounds(cx, cy, cx + 1, cy + 1);
|
||||
return tapNode;
|
||||
}
|
||||
}
|
||||
@ -413,7 +416,10 @@ QString ScreenXmlParser::parseProfilePhone() {
|
||||
for (const Node &node: m_nodes) {
|
||||
if (node.text.contains("Номер телефона")) {
|
||||
const int idx = node.text.indexOf("Номер телефона");
|
||||
return node.text.left(idx).trimmed();
|
||||
QString phone = node.text.left(idx).trimmed();
|
||||
phone.remove(' ');
|
||||
phone.remove(QChar(0x00A0));
|
||||
return phone;
|
||||
}
|
||||
}
|
||||
return {};
|
||||
|
||||
@ -42,7 +42,7 @@ public:
|
||||
|
||||
Node tryToFindAdBanner();
|
||||
|
||||
Node tryToFindGooglePlayBanner();
|
||||
Node tryToFindGooglePlayBanner(int screenWidth, int screenHeight);
|
||||
|
||||
// Returns a Button node whose text is exactly 4 digits (card last numbers)
|
||||
Node findCardButtonOnHomeScreen();
|
||||
@ -94,6 +94,8 @@ public:
|
||||
|
||||
void test();
|
||||
|
||||
[[nodiscard]] const QList<Node> &getNodes() const { return m_nodes; }
|
||||
|
||||
private:
|
||||
QList<Node> m_nodes;
|
||||
QDomElement m_xml;
|
||||
|
||||
@ -174,9 +174,9 @@ if %errorlevel% neq 0 goto :VCEnd</Command>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.vcxproj">
|
||||
<Project>{03783F02-4787-32E2-833D-3EA75403B734}</Project>
|
||||
<Name>ARCDesktopProject</Name>
|
||||
<ProjectReference Include="C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARC.vcxproj">
|
||||
<Project>{0DFFB647-077E-3BCD-9EA4-BDCE49AC4298}</Project>
|
||||
<Name>ARC</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
PlatformToolSet=v143:VCToolArchitecture=NativeARM64:VCToolsVersion=14.43.34808:TargetPlatformVersion=10.0.22621.0:
|
||||
Release|x64|C:\Users\User\CLionProjects\ARCDeskProject\build_x64\|
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,63 +0,0 @@
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\main.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\main.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\MainWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\MainWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\TutorialWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\TutorialWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\bank\AccountSettingsWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\AccountSettingsWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\bank\AccountWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\AccountWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\bank\BankListWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\BankListWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\bank\BankSettingsWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\BankSettingsWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\bank\TransactionWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\TransactionWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\device\DeviceWidget.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\DeviceWidget.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\event\EventWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\EventWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\log\LogWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\LogWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\widget\common\CollapsibleSection.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\CollapsibleSection.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\widget\common\FlowLayout.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\FlowLayout.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\widget\loader\ErrorWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\ErrorWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\widget\loader\LoaderDialog.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\LoaderDialog.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\widget\loader\LoaderWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\LoaderWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\views\widget\loader\RegistrationWindow.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\RegistrationWindow.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\services\AppLogger.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\AppLogger.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\services\DeviceScreener.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\DeviceScreener.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\services\EventHandler.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\EventHandler.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\services\net\NetworkService.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\NetworkService.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\DatabaseManager.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\DatabaseManager.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\dao\AccountDAO.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\AccountDAO.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\dao\AppLogDAO.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\AppLogDAO.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\dao\ApplicationDAO.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\ApplicationDAO.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\dao\BankDAO.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\BankDAO.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\dao\CommonDataDAO.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\CommonDataDAO.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\dao\DeviceDAO.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\DeviceDAO.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\dao\EventDAO.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\EventDAO.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\dao\SettingsDAO.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\SettingsDAO.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\dao\TransactionDAO.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\TransactionDAO.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\database\time\DateUtils.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\DateUtils.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\adb\AdbUtils.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\AdbUtils.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\birbank\CommonBirbankScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\CommonBirbankScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\birbank\GetLastDaysHistoryBirbankScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\GetLastDaysHistoryBirbankScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\birbank\LoginAndCheckAccountsBirbankScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\LoginAndCheckAccountsBirbankScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\birbank\PayByCardBirbankScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\PayByCardBirbankScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\birbank\ScreenXmlBirbankParser.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\ScreenXmlBirbankParser.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ozon\CommonScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\android\ozon\CommonScript.cpp.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ozon\GetCardInfoScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\GetCardInfoScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ozon\GetLastTransactionsScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\GetLastTransactionsScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ozon\GetProfileInfoScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\GetProfileInfoScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ozon\LoginAndCheckAccountsScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\android\ozon\LoginAndCheckAccountsScript.cpp.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ozon\PayByPhoneScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\android\ozon\PayByPhoneScript.cpp.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ozon\ScreenXmlParser.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\android\ozon\ScreenXmlParser.cpp.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\rshb\CommonScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\android\rshb\CommonScript.cpp.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\rshb\GetLastDaysHistoryScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\GetLastDaysHistoryScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\rshb\HomeScreenScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\HomeScreenScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\rshb\LoginAndCheckAccountsScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\android\rshb\LoginAndCheckAccountsScript.cpp.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\rshb\PayByPhoneScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\android\rshb\PayByPhoneScript.cpp.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\rshb\ScreenXmlParser.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\android\rshb\ScreenXmlParser.cpp.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\rshb\SyncAccountDataScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\SyncAccountDataScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\toss\CommonTossScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\CommonTossScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\toss\GetLastDaysHistoryTossScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\GetLastDaysHistoryTossScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\toss\LoginAndCheckAccountsTossScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\LoginAndCheckAccountsTossScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\toss\PayByCardTossScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\PayByCardTossScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\toss\ScreenXmlTossParser.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\ScreenXmlTossParser.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ziraat\CommonZiraatScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\CommonZiraatScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ziraat\GetLastDaysHistoryZiraatScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\GetLastDaysHistoryZiraatScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ziraat\LoginAndCheckAccountsZiraatScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\LoginAndCheckAccountsZiraatScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ziraat\PayByIbanScript.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\PayByIbanScript.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\android\ziraat\ScreenXmlZiraatParser.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\ScreenXmlZiraatParser.obj
|
||||
C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject_autogen\mocs_compilation_Release.cpp;C:\Users\User\CLionProjects\ARCDeskProject\build_x64\ARCDesktopProject.dir\Release\mocs_compilation_Release.obj
|
||||
@ -1,10 +0,0 @@
|
||||
^C:\USERS\USER\CLIONPROJECTS\ARCDESKPROJECT\CMAKELISTS.TXT
|
||||
setlocal
|
||||
"C:\Program Files\CMake\bin\cmake.exe" -SC:/Users/User/CLionProjects/ARCDeskProject -BC:/Users/User/CLionProjects/ARCDeskProject/build_x64 --check-stamp-file C:/Users/User/CLionProjects/ARCDeskProject/build_x64/CMakeFiles/generate.stamp
|
||||
if %errorlevel% neq 0 goto :cmEnd
|
||||
:cmEnd
|
||||
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
|
||||
:cmErrorLevel
|
||||
exit /b %1
|
||||
:cmDone
|
||||
if %errorlevel% neq 0 goto :VCEnd
|
||||
@ -1,358 +0,0 @@
|
||||
^C:\USERS\USER\CLIONPROJECTS\ARCDESKPROJECT\CMAKELISTS.TXT
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKECXXINFORMATION.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKECHECKCOMPILERFLAGCOMMONPATTERNS.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKECOMMONLANGUAGEINCLUDE.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKEFINDDEPENDENCYMACRO.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKEGENERICSYSTEM.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKEINITIALIZECONFIGS.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKELANGUAGEINFORMATION.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKERCINFORMATION.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKESYSTEMSPECIFICINFORMATION.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CMAKESYSTEMSPECIFICINITIALIZE.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CHECKCXXCOMPILERFLAG.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CHECKCXXSOURCECOMPILES.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CHECKINCLUDEFILECXX.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\CHECKLIBRARYEXISTS.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\COMPILER\CMAKECOMMONCOMPILERMACROS.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\COMPILER\MSVC-CXX.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\COMPILER\MSVC.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\FINDCURL.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\FINDLIBARCHIVE.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\FINDPACKAGEHANDLESTANDARDARGS.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\FINDPACKAGEMESSAGE.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\FINDTHREADS.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\FINDVULKAN.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\FINDZLIB.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\GNUINSTALLDIRS.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\INTERNAL\CMAKECXXLINKERINFORMATION.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\INTERNAL\CMAKECOMMONLINKERINFORMATION.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\INTERNAL\CHECKCOMPILERFLAG.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\INTERNAL\CHECKFLAGCOMMONCONFIG.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\INTERNAL\CHECKSOURCECOMPILES.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\LINKER\MSVC-CXX.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\LINKER\MSVC.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\PLATFORM\LINKER\WINDOWS-MSVC-CXX.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\PLATFORM\LINKER\WINDOWS-MSVC.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\PLATFORM\WINDOWS-INITIALIZE.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\PLATFORM\WINDOWS-MSVC-CXX.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\PLATFORM\WINDOWS-MSVC.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\PLATFORM\WINDOWS.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\PLATFORM\WINDOWSPATHS.CMAKE
|
||||
C:\PROGRAM FILES\CMAKE\SHARE\CMAKE-4.0\MODULES\SELECTLIBRARYCONFIGURATIONS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\FINDWRAPATOMIC.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\FINDWRAPVULKANHEADERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QT6CONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QT6CONFIGEXTRAS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QT6CONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QT6CONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QT6DEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QT6TARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QT6VERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTFEATURE.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTFEATURECOMMON.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTINSTALLPATHS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICANDROIDHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICAPPLEHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICCMAKEHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICCMAKEVERSIONHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICDEPENDENCYHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICEXTERNALPROJECTHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICFINALIZERHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICFINDPACKAGEHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICGITHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICPLUGINHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICPLUGINHELPERS_V2.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMATTRIBUTIONHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMCPEHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMDEPHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMFILEHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMGENERATIONHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMLICENSEHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMOPSHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMPURLHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMPYTHONHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMQTENTITYHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICSBOMSYSTEMDEPHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICTARGETHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICTESTHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICTOOLHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICWALKLIBSHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6\QTPUBLICWINDOWSHELPERS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6COREADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6CORECONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6CORECONFIGEXTRAS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6CORECONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6CORECONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6COREDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6COREMACROS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6CORETARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6CORETARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6CORETARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORE\QT6COREVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6COREPRIVATE\QT6COREPRIVATEADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6COREPRIVATE\QT6COREPRIVATECONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6COREPRIVATE\QT6COREPRIVATECONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6COREPRIVATE\QT6COREPRIVATECONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6COREPRIVATE\QT6COREPRIVATEDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6COREPRIVATE\QT6COREPRIVATETARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6COREPRIVATE\QT6COREPRIVATEVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORETOOLS\QT6CORETOOLSADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORETOOLS\QT6CORETOOLSCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORETOOLS\QT6CORETOOLSCONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORETOOLS\QT6CORETOOLSCONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORETOOLS\QT6CORETOOLSDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORETOOLS\QT6CORETOOLSTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORETOOLS\QT6CORETOOLSTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORETOOLS\QT6CORETOOLSTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6CORETOOLS\QT6CORETOOLSVERSIONLESSTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ENTRYPOINTPRIVATE\QT6ENTRYPOINTPRIVATEADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ENTRYPOINTPRIVATE\QT6ENTRYPOINTPRIVATECONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ENTRYPOINTPRIVATE\QT6ENTRYPOINTPRIVATECONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ENTRYPOINTPRIVATE\QT6ENTRYPOINTPRIVATECONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ENTRYPOINTPRIVATE\QT6ENTRYPOINTPRIVATETARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ENTRYPOINTPRIVATE\QT6ENTRYPOINTPRIVATETARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ENTRYPOINTPRIVATE\QT6ENTRYPOINTPRIVATETARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ENTRYPOINTPRIVATE\QT6ENTRYPOINTPRIVATEVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUIADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUICONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUICONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUICONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUIDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUIPLUGINS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUITARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUITARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUITARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6GUIVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QGIFPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QGIFPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QGIFPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QGIFPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QGIFPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QICOPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QICOPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QICOPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QICOPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QICOPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QJPEGPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QJPEGPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QJPEGPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QJPEGPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QJPEGPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QMINIMALINTEGRATIONPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QMINIMALINTEGRATIONPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QMINIMALINTEGRATIONPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QMINIMALINTEGRATIONPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QMINIMALINTEGRATIONPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QOFFSCREENINTEGRATIONPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QOFFSCREENINTEGRATIONPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QOFFSCREENINTEGRATIONPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QOFFSCREENINTEGRATIONPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QOFFSCREENINTEGRATIONPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGICONPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGICONPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGICONPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGICONPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGICONPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QSVGPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QTUIOTOUCHPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QTUIOTOUCHPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QTUIOTOUCHPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QTUIOTOUCHPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QTUIOTOUCHPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSDIRECT2DINTEGRATIONPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSDIRECT2DINTEGRATIONPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSDIRECT2DINTEGRATIONPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSDIRECT2DINTEGRATIONPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSDIRECT2DINTEGRATIONPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSINTEGRATIONPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSINTEGRATIONPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSINTEGRATIONPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSINTEGRATIONPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUI\QT6QWINDOWSINTEGRATIONPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUIPRIVATE\QT6GUIPRIVATEADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUIPRIVATE\QT6GUIPRIVATECONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUIPRIVATE\QT6GUIPRIVATECONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUIPRIVATE\QT6GUIPRIVATECONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUIPRIVATE\QT6GUIPRIVATEDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUIPRIVATE\QT6GUIPRIVATETARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUIPRIVATE\QT6GUIPRIVATEVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUITOOLS\QT6GUITOOLSADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUITOOLS\QT6GUITOOLSCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUITOOLS\QT6GUITOOLSCONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUITOOLS\QT6GUITOOLSCONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUITOOLS\QT6GUITOOLSDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUITOOLS\QT6GUITOOLSTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUITOOLS\QT6GUITOOLSTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUITOOLS\QT6GUITOOLSTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6GUITOOLS\QT6GUITOOLSVERSIONLESSTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKCONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKCONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKPLUGINS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6NETWORKVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QNLMNIPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QNLMNIPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QNLMNIPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QNLMNIPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QNLMNIPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QSCHANNELBACKENDPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QSCHANNELBACKENDPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QSCHANNELBACKENDPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QSCHANNELBACKENDPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QSCHANNELBACKENDPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDCERTONLYPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDCERTONLYPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDCERTONLYPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDCERTONLYPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDCERTONLYPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDOPENSSLPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDOPENSSLPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDOPENSSLPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDOPENSSLPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORK\QT6QTLSBACKENDOPENSSLPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORKPRIVATE\QT6NETWORKPRIVATEADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORKPRIVATE\QT6NETWORKPRIVATECONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORKPRIVATE\QT6NETWORKPRIVATECONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORKPRIVATE\QT6NETWORKPRIVATECONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORKPRIVATE\QT6NETWORKPRIVATEDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORKPRIVATE\QT6NETWORKPRIVATETARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6NETWORKPRIVATE\QT6NETWORKPRIVATEVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QIBASEDRIVERPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QIBASEDRIVERPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QIBASEDRIVERPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QIBASEDRIVERPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QIBASEDRIVERPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QMIMERSQLDRIVERPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QMIMERSQLDRIVERPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QMIMERSQLDRIVERPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QMIMERSQLDRIVERPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QMIMERSQLDRIVERPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QOCIDRIVERPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QOCIDRIVERPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QOCIDRIVERPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QOCIDRIVERPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QOCIDRIVERPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QODBCDRIVERPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QODBCDRIVERPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QODBCDRIVERPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QODBCDRIVERPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QODBCDRIVERPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QPSQLDRIVERPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QPSQLDRIVERPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QPSQLDRIVERPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QPSQLDRIVERPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QPSQLDRIVERPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QSQLITEDRIVERPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QSQLITEDRIVERPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QSQLITEDRIVERPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QSQLITEDRIVERPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6QSQLITEDRIVERPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLCONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLCONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLPLUGINS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQL\QT6SQLVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQLPRIVATE\QT6SQLPRIVATEADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQLPRIVATE\QT6SQLPRIVATECONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQLPRIVATE\QT6SQLPRIVATECONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQLPRIVATE\QT6SQLPRIVATECONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQLPRIVATE\QT6SQLPRIVATEDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQLPRIVATE\QT6SQLPRIVATETARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6SQLPRIVATE\QT6SQLPRIVATEVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6QMODERNWINDOWSSTYLEPLUGINADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6QMODERNWINDOWSSTYLEPLUGINCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6QMODERNWINDOWSSTYLEPLUGINTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6QMODERNWINDOWSSTYLEPLUGINTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6QMODERNWINDOWSSTYLEPLUGINTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSCONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSCONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSMACROS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSPLUGINS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETS\QT6WIDGETSVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSPRIVATE\QT6WIDGETSPRIVATEADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSPRIVATE\QT6WIDGETSPRIVATECONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSPRIVATE\QT6WIDGETSPRIVATECONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSPRIVATE\QT6WIDGETSPRIVATECONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSPRIVATE\QT6WIDGETSPRIVATEDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSPRIVATE\QT6WIDGETSPRIVATETARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSPRIVATE\QT6WIDGETSPRIVATEVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSTOOLS\QT6WIDGETSTOOLSADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSTOOLS\QT6WIDGETSTOOLSCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSTOOLS\QT6WIDGETSTOOLSCONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSTOOLS\QT6WIDGETSTOOLSCONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSTOOLS\QT6WIDGETSTOOLSDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSTOOLS\QT6WIDGETSTOOLSTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSTOOLS\QT6WIDGETSTOOLSTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSTOOLS\QT6WIDGETSTOOLSTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6WIDGETSTOOLS\QT6WIDGETSTOOLSVERSIONLESSTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XML\QT6XMLADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XML\QT6XMLCONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XML\QT6XMLCONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XML\QT6XMLCONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XML\QT6XMLDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XML\QT6XMLTARGETS-DEBUG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XML\QT6XMLTARGETS-RELWITHDEBINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XML\QT6XMLTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XML\QT6XMLVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XMLPRIVATE\QT6XMLPRIVATEADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XMLPRIVATE\QT6XMLPRIVATECONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XMLPRIVATE\QT6XMLPRIVATECONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XMLPRIVATE\QT6XMLPRIVATECONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XMLPRIVATE\QT6XMLPRIVATEDEPENDENCIES.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XMLPRIVATE\QT6XMLPRIVATETARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6XMLPRIVATE\QT6XMLPRIVATEVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ZLIBPRIVATE\QT6ZLIBPRIVATEADDITIONALTARGETINFO.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ZLIBPRIVATE\QT6ZLIBPRIVATECONFIG.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ZLIBPRIVATE\QT6ZLIBPRIVATECONFIGVERSION.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ZLIBPRIVATE\QT6ZLIBPRIVATECONFIGVERSIONIMPL.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ZLIBPRIVATE\QT6ZLIBPRIVATETARGETS.CMAKE
|
||||
C:\QT\6.9.0\MSVC2022_64\LIB\CMAKE\QT6ZLIBPRIVATE\QT6ZLIBPRIVATEVERSIONLESSALIASTARGETS.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\WEBP\WEBPCONFIG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\WEBP\WEBPCONFIGVERSION.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\WEBP\WEBPTARGETS-DEBUG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\WEBP\WEBPTARGETS-RELEASE.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\WEBP\WEBPTARGETS.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\CURL\CURLCONFIG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\CURL\CURLCONFIGVERSION.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\CURL\CURLTARGETS-DEBUG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\CURL\CURLTARGETS-RELEASE.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\CURL\CURLTARGETS.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\LEPTONICA\LEPTONICACONFIG-VERSION.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\LEPTONICA\LEPTONICACONFIG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\LEPTONICA\LEPTONICATARGETS-DEBUG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\LEPTONICA\LEPTONICATARGETS-RELEASE.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\LEPTONICA\LEPTONICATARGETS.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\OPENJPEG\OPENJPEGCONFIG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\OPENJPEG\OPENJPEGCONFIGVERSION.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\OPENJPEG\OPENJPEGTARGETS-DEBUG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\OPENJPEG\OPENJPEGTARGETS-RELEASE.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\OPENJPEG\OPENJPEGTARGETS.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\TESSERACT\TESSERACTCONFIG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\TESSERACT\TESSERACTCONFIGVERSION.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\TESSERACT\TESSERACTTARGETS-DEBUG.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\TESSERACT\TESSERACTTARGETS-RELEASE.CMAKE
|
||||
C:\USERS\USER\.VCPKG-CLION\VCPKG\INSTALLED\X64-WINDOWS\SHARE\TESSERACT\TESSERACTTARGETS.CMAKE
|
||||
C:\USERS\USER\CLIONPROJECTS\ARCDESKPROJECT\BUILD_X64\CMAKEFILES\4.0.2\CMAKECXXCOMPILER.CMAKE
|
||||
C:\USERS\USER\CLIONPROJECTS\ARCDESKPROJECT\BUILD_X64\CMAKEFILES\4.0.2\CMAKERCCOMPILER.CMAKE
|
||||
C:\USERS\USER\CLIONPROJECTS\ARCDESKPROJECT\BUILD_X64\CMAKEFILES\4.0.2\CMAKESYSTEM.CMAKE
|
||||
@ -1,2 +0,0 @@
|
||||
^C:\USERS\USER\CLIONPROJECTS\ARCDESKPROJECT\CMAKELISTS.TXT
|
||||
C:\USERS\USER\CLIONPROJECTS\ARCDESKPROJECT\BUILD_X64\CMAKEFILES\GENERATE.STAMP
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project>
|
||||
<ProjectOutputs>
|
||||
<ProjectOutput>
|
||||
<FullPath>C:\Users\User\CLionProjects\ARCDeskProject\build_x64\x64\Release\ZERO_CHECK</FullPath>
|
||||
</ProjectOutput>
|
||||
<ProjectOutput>
|
||||
<FullPath>C:\Users\User\CLionProjects\ARCDeskProject\build_x64\Release\ARCDesktopProject.exe</FullPath>
|
||||
</ProjectOutput>
|
||||
</ProjectOutputs>
|
||||
<ContentFiles />
|
||||
<SatelliteDlls />
|
||||
<NonRecipeFileRefs />
|
||||
</Project>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user