Fixed an issue that Rainmeter crashes if bang is executed via exe during initializing the skins.

This commit is contained in:
spx
2011-02-16 14:46:17 +00:00
parent cb3a7d3a75
commit 96f8407c74
3 changed files with 25 additions and 8 deletions

View File

@ -171,7 +171,13 @@ void Initialize(bool DummyLS, LPCTSTR CmdLine)
*/
void ExecuteBang(LPCTSTR szBang)
{
if (Rainmeter) Rainmeter->ExecuteCommand(szBang, NULL);
if (Rainmeter && szBang)
{
// ExecuteBang needs to be delayed since it crashes if done during processing.
// The receiver must free a given string buffer (lParam) by using free().
WCHAR* bang = _wcsdup(szBang);
PostMessage(Rainmeter->GetTrayWindow()->GetWindow(), WM_TRAY_DELAYED_EXECUTE, (WPARAM)NULL, (LPARAM)bang);
}
}
/*
@ -1318,7 +1324,7 @@ void RainmeterRefreshAppWide()
if (Rainmeter)
{
// Refresh needs to be delayed since it crashes if done during Update()
PostMessage(Rainmeter->GetTrayWindow()->GetWindow(), WM_DELAYED_REFRESH_ALL, (WPARAM)NULL, (LPARAM)NULL);
PostMessage(Rainmeter->GetTrayWindow()->GetWindow(), WM_TRAY_DELAYED_REFRESH_ALL, (WPARAM)NULL, (LPARAM)NULL);
}
}