Release v0.6.36: offload notification registration and mitigate Viber paste timing
This commit is contained in:
1 parent
d13e9849a7
commit
94cab4c112
16 files changed
+220
-19
No files matched your search
@@ -50,6 +50,30 @@ void registerScreenshotNotifications()
|
||||
// Notify the shell that notification identity/activation registration changed.
|
||||
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,nullptr,nullptr);
|
||||
}
|
||||
HANDLE startScreenshotNotificationRegistration()
|
||||
{
|
||||
auto path=std::filesystem::path(executable()).parent_path()/L"KSwitcher.Screenshot.exe";
|
||||
auto command=L"\""+path.wstring()+L"\" --register-notifications";
|
||||
STARTUPINFOW startup{sizeof(startup)};
|
||||
startup.dwFlags=STARTF_USESHOWWINDOW; startup.wShowWindow=SW_HIDE;
|
||||
PROCESS_INFORMATION process{};
|
||||
if(!CreateProcessW(path.c_str(),command.data(),nullptr,nullptr,FALSE,CREATE_NO_WINDOW,
|
||||
nullptr,path.parent_path().c_str(),&startup,&process))
|
||||
throw std::runtime_error(utf8(lastError(L"Cannot start notification registration helper")));
|
||||
CloseHandle(process.hThread);
|
||||
return process.hProcess;
|
||||
}
|
||||
void registerScreenshotNotificationsInHelper()
|
||||
{
|
||||
auto process=startScreenshotNotificationRegistration();
|
||||
auto wait=WaitForSingleObject(process,10000);
|
||||
DWORD code=ERROR_GEN_FAILURE;
|
||||
bool completed=wait==WAIT_OBJECT_0 && GetExitCodeProcess(process,&code);
|
||||
CloseHandle(process);
|
||||
if(!completed || code)
|
||||
throw std::runtime_error(completed ? "Notification registration helper failed: "+std::to_string(code)
|
||||
: "Notification registration helper did not complete within 10 seconds");
|
||||
}
|
||||
bool validScreenshotToken(const std::wstring &id)
|
||||
{
|
||||
if(id.size()!=36) return false;
|
||||
|
||||
Reference in new issue
Block a user