1
0
forked from BRT/arc

Fix for windows

This commit is contained in:
slava 2026-04-08 15:43:59 +07:00
parent 3e22f9ea93
commit 7931a10b88
274 changed files with 777 additions and 24692 deletions

View File

@ -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

View File

@ -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) {
QProcess process;
process.setWorkingDirectory(adbDir());
process.start(
adbPath(),
{
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(), args);
if (!process.waitForStarted(5000)) {
qWarning() << "[AdbUtils] Failed to start adb swipe:" << process.errorString();
return false;

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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"));

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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"));

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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,37 +348,34 @@ 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";
// Проверяем что дата совпадает (тот же день)
if (txTime.isValid() && txTime.date() != searchDate) {
qDebug() << "[FetchTransactions] Wrong date:" << dtStr << "expected" << searchDate;
AdbUtils::goBack(m_deviceId);
QThread::msleep(1000);
continue;
}
}
// Нашли!
qDebug() << "[FetchTransactions] FOUND transaction:"
<< "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) {

View File

@ -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;

View File

@ -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);

View File

@ -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;
}

View File

@ -27,6 +27,7 @@ private:
void makePayment(
const QString &deviceId,
const QString &packageName,
const QString &pinCode,
int width,
int height

View File

@ -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;
}

View File

@ -29,6 +29,7 @@ private:
void makePayment(
const QString &deviceId,
const QString &packageName,
const QString &pinCode,
int width,
int height

View File

@ -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 {};

View File

@ -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;

View File

@ -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" />

View File

@ -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\|

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,2 +0,0 @@
^C:\USERS\USER\CLIONPROJECTS\ARCDESKPROJECT\CMAKELISTS.TXT
C:\USERS\USER\CLIONPROJECTS\ARCDESKPROJECT\BUILD_X64\CMAKEFILES\GENERATE.STAMP

File diff suppressed because one or more lines are too long

View File

@ -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>

Some files were not shown because too many files have changed in this diff Show More