mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Fix autostart toggling.
This commit is contained in:
parent
5c4b68d632
commit
1ea6224e60
3 changed files with 61 additions and 54 deletions
|
@ -562,7 +562,9 @@ bool AutostartSupported() {
|
||||||
|
|
||||||
void AutostartToggle(bool enabled, Fn<void(bool)> done) {
|
void AutostartToggle(bool enabled, Fn<void(bool)> done) {
|
||||||
const auto guard = gsl::finally([&] {
|
const auto guard = gsl::finally([&] {
|
||||||
done(enabled);
|
if (done) {
|
||||||
|
done(enabled);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
#ifdef __HAIKU__
|
#ifdef __HAIKU__
|
||||||
|
|
|
@ -182,7 +182,9 @@ void IgnoreApplicationActivationRightNow() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutostartToggle(bool enabled, Fn<void(bool)> done) {
|
void AutostartToggle(bool enabled, Fn<void(bool)> done) {
|
||||||
done(false);
|
if (done) {
|
||||||
|
done(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AutostartSkip() {
|
bool AutostartSkip() {
|
||||||
|
|
|
@ -78,7 +78,7 @@ bool finished = true;
|
||||||
QMargins simpleMargins, margins;
|
QMargins simpleMargins, margins;
|
||||||
HICON bigIcon = 0, smallIcon = 0, overlayIcon = 0;
|
HICON bigIcon = 0, smallIcon = 0, overlayIcon = 0;
|
||||||
|
|
||||||
BOOL CALLBACK _ActivateProcess(HWND hWnd, LPARAM lParam) {
|
BOOL CALLBACK ActivateProcessByPid(HWND hWnd, LPARAM lParam) {
|
||||||
uint64 &processId(*(uint64*)lParam);
|
uint64 &processId(*(uint64*)lParam);
|
||||||
|
|
||||||
DWORD dwProcessId;
|
DWORD dwProcessId;
|
||||||
|
@ -143,11 +143,58 @@ void DeleteMyModules() {
|
||||||
RemoveDirectory(modules.c_str());
|
RemoveDirectory(modules.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ManageAppLink(bool create, bool silent, int path_csidl, const wchar_t *args, const wchar_t *description) {
|
||||||
|
if (cExeName().isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WCHAR startupFolder[MAX_PATH];
|
||||||
|
HRESULT hr = SHGetFolderPath(0, path_csidl, 0, SHGFP_TYPE_CURRENT, startupFolder);
|
||||||
|
if (SUCCEEDED(hr)) {
|
||||||
|
QString lnk = QString::fromWCharArray(startupFolder) + '\\' + AppFile.utf16() + qsl(".lnk");
|
||||||
|
if (create) {
|
||||||
|
const auto shellLink = base::WinRT::TryCreateInstance<IShellLink>(
|
||||||
|
CLSID_ShellLink,
|
||||||
|
CLSCTX_INPROC_SERVER);
|
||||||
|
if (shellLink) {
|
||||||
|
QString exe = QDir::toNativeSeparators(cExeDir() + cExeName()), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath());
|
||||||
|
shellLink->SetArguments(args);
|
||||||
|
shellLink->SetPath(exe.toStdWString().c_str());
|
||||||
|
shellLink->SetWorkingDirectory(dir.toStdWString().c_str());
|
||||||
|
shellLink->SetDescription(description);
|
||||||
|
|
||||||
|
if (const auto propertyStore = shellLink.try_as<IPropertyStore>()) {
|
||||||
|
PROPVARIANT appIdPropVar;
|
||||||
|
hr = InitPropVariantFromString(AppUserModelId::getId(), &appIdPropVar);
|
||||||
|
if (SUCCEEDED(hr)) {
|
||||||
|
hr = propertyStore->SetValue(AppUserModelId::getKey(), appIdPropVar);
|
||||||
|
PropVariantClear(&appIdPropVar);
|
||||||
|
if (SUCCEEDED(hr)) {
|
||||||
|
hr = propertyStore->Commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (const auto persistFile = shellLink.try_as<IPersistFile>()) {
|
||||||
|
hr = persistFile->Save(lnk.toStdWString().c_str(), TRUE);
|
||||||
|
} else {
|
||||||
|
if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hr));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hr));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
QFile::remove(lnk);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!silent) LOG(("App Error: could not get CSIDL %1 folder %2").arg(path_csidl).arg(hr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void psActivateProcess(uint64 pid) {
|
void psActivateProcess(uint64 pid) {
|
||||||
if (pid) {
|
if (pid) {
|
||||||
::EnumWindows((WNDENUMPROC)_ActivateProcess, (LPARAM)&pid);
|
::EnumWindows((WNDENUMPROC)ActivateProcessByPid, (LPARAM)&pid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -364,8 +411,11 @@ void AutostartToggle(bool enabled, Fn<void(bool)> done) {
|
||||||
enabled,
|
enabled,
|
||||||
done ? Fn<void(bool)>(callback) : nullptr);
|
done ? Fn<void(bool)>(callback) : nullptr);
|
||||||
#else // OS_WIN_STORE
|
#else // OS_WIN_STORE
|
||||||
_manageAppLnk(start, silent, CSIDL_STARTUP, L"-autostart", L"Telegram autorun link.\nYou can disable autorun in Telegram settings.");
|
const auto silent = !done;
|
||||||
done(enabled);
|
ManageAppLink(enabled, silent, CSIDL_STARTUP, L"-autostart", L"Telegram autorun link.\nYou can disable autorun in Telegram settings.");
|
||||||
|
if (done) {
|
||||||
|
done(enabled);
|
||||||
|
}
|
||||||
#endif // OS_WIN_STORE
|
#endif // OS_WIN_STORE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -533,55 +583,8 @@ void psNewVersion() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _manageAppLnk(bool create, bool silent, int path_csidl, const wchar_t *args, const wchar_t *description) {
|
|
||||||
if (cExeName().isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
WCHAR startupFolder[MAX_PATH];
|
|
||||||
HRESULT hr = SHGetFolderPath(0, path_csidl, 0, SHGFP_TYPE_CURRENT, startupFolder);
|
|
||||||
if (SUCCEEDED(hr)) {
|
|
||||||
QString lnk = QString::fromWCharArray(startupFolder) + '\\' + AppFile.utf16() + qsl(".lnk");
|
|
||||||
if (create) {
|
|
||||||
const auto shellLink = base::WinRT::TryCreateInstance<IShellLink>(
|
|
||||||
CLSID_ShellLink,
|
|
||||||
CLSCTX_INPROC_SERVER);
|
|
||||||
if (shellLink) {
|
|
||||||
QString exe = QDir::toNativeSeparators(cExeDir() + cExeName()), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath());
|
|
||||||
shellLink->SetArguments(args);
|
|
||||||
shellLink->SetPath(exe.toStdWString().c_str());
|
|
||||||
shellLink->SetWorkingDirectory(dir.toStdWString().c_str());
|
|
||||||
shellLink->SetDescription(description);
|
|
||||||
|
|
||||||
if (const auto propertyStore = shellLink.try_as<IPropertyStore>()) {
|
|
||||||
PROPVARIANT appIdPropVar;
|
|
||||||
hr = InitPropVariantFromString(AppUserModelId::getId(), &appIdPropVar);
|
|
||||||
if (SUCCEEDED(hr)) {
|
|
||||||
hr = propertyStore->SetValue(AppUserModelId::getKey(), appIdPropVar);
|
|
||||||
PropVariantClear(&appIdPropVar);
|
|
||||||
if (SUCCEEDED(hr)) {
|
|
||||||
hr = propertyStore->Commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (const auto persistFile = shellLink.try_as<IPersistFile>()) {
|
|
||||||
hr = persistFile->Save(lnk.toStdWString().c_str(), TRUE);
|
|
||||||
} else {
|
|
||||||
if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hr));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hr));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
QFile::remove(lnk);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!silent) LOG(("App Error: could not get CSIDL %1 folder %2").arg(path_csidl).arg(hr));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void psSendToMenu(bool send, bool silent) {
|
void psSendToMenu(bool send, bool silent) {
|
||||||
_manageAppLnk(send, silent, CSIDL_SENDTO, L"-sendpath", L"Telegram send to link.\nYou can disable send to menu item in Telegram settings.");
|
ManageAppLink(send, silent, CSIDL_SENDTO, L"-sendpath", L"Telegram send to link.\nYou can disable send to menu item in Telegram settings.");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool psLaunchMaps(const Data::LocationPoint &point) {
|
bool psLaunchMaps(const Data::LocationPoint &point) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue