From 1b95a23b888939d97dc47556533ccf716fdbf9e1 Mon Sep 17 00:00:00 2001 From: Anonymous275 Date: Tue, 3 Mar 2020 23:22:18 +0200 Subject: [PATCH] Gets the full path of beamng --- main.cpp | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 91 insertions(+), 2 deletions(-) diff --git a/main.cpp b/main.cpp index ab2201f..9f305cc 100644 --- a/main.cpp +++ b/main.cpp @@ -2,8 +2,97 @@ //// Created by Anonymous275 on 3/3/2020. //// -int main(){ +#include +#include +#include +#include +#define MAX_KEY_LENGTH 255 +#define MAX_VALUE_NAME 16383 +std::string keyName; + +std::string QueryKey(HKEY hKey) +{ + TCHAR achKey[MAX_KEY_LENGTH]; // buffer for subkey name + DWORD cbName; // size of name string + TCHAR achClass[MAX_PATH] = TEXT(""); // buffer for class name + DWORD cchClassName = MAX_PATH; // size of class string + DWORD cSubKeys=0; // number of subkeys + DWORD cbMaxSubKey; // longest subkey size + DWORD cchMaxClass; // longest class string + DWORD cValues; // number of values for key + DWORD cchMaxValue; // longest value name + DWORD cbMaxValueData; // longest value data + DWORD cbSecurityDescriptor; // size of security descriptor + FILETIME ftLastWriteTime; // last write time + + DWORD i, retCode; + + TCHAR achValue[MAX_VALUE_NAME]; + DWORD cchValue = MAX_VALUE_NAME; + + retCode = RegQueryInfoKey( + hKey, // key handle + achClass, // buffer for class name + &cchClassName, // size of class string + NULL, // reserved + &cSubKeys, // number of subkeys + &cbMaxSubKey, // longest subkey size + &cchMaxClass, // longest class string + &cValues, // number of values for this key + &cchMaxValue, // longest value name + &cbMaxValueData, // longest value data + &cbSecurityDescriptor, // security descriptor + &ftLastWriteTime); // last write time - return 0; + + BYTE* buffer = new BYTE[cbMaxValueData]; + ZeroMemory(buffer, cbMaxValueData); + + if (cValues) + { + for (i=0, retCode = ERROR_SUCCESS; i(buffer); + return Path.substr(0,Path.length()-2); + } + } + }else{ + std::cout << "Error Failed to Find Beamng\n"; + } + delete [] buffer; + return ""; } + + +int main() +{ + HKEY hKey; + LONG dwRegOPenKey = RegOpenKeyEx(HKEY_CLASSES_ROOT, "beamng\\DefaultIcon", 0, KEY_READ, &hKey); + if(dwRegOPenKey == ERROR_SUCCESS){ + keyName = QueryKey(hKey); + std::cout << keyName << std::endl; //Prints the exe path + }else{ + std::cout << "Error Failed to Find Beamng\n"; + } + RegCloseKey(hKey); + + system("pause"); + return 0; +} \ No newline at end of file