Hook Function
========================================================================== */
-static LRESULT CALLBACK MsgHookProc(UINT code, WPARAM wParam, LPARAM lParam)
+static LRESULT CALLBACK MsgHookProc(UINT nCode, WPARAM wParam, LPARAM lParam)
{
- MSG const* const msg = reinterpret_cast<LPMSG>(lParam);
- if (msg->message == WM_SYSCOMMAND) {
- if (msg->wParam == SC_SCREENSAVE) {
- PostMessage(hNotifyWnd_, notifyWndMsgId_, wParam, lParam);
+ const LPMSG msg = reinterpret_cast<LPMSG>(lParam);
+ if (nCode == HC_ACTION) {
+ if (msg->message == WM_SYSCOMMAND) {
+ if (msg->wParam == SC_SCREENSAVE) {
+ PostMessage(hNotifyWnd_, notifyWndMsgId_, wParam, lParam);
+ }
}
}
- return CallNextHookEx(hook_, code, wParam, lParam);
+ return CallNextHookEx(hook_, nCode, wParam, lParam);
}
/* =============================================================================
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{51f0faf5-9928-418a-bdf0-57133f81d6b5}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="ScreensaverNotify.cpp">
<ClInclude Include="ScreensaverNotify.h">
<Filter>Source Files</Filter>
</ClInclude>
- <ClInclude Include="resource.h" />
+ <ClInclude Include="resource.h">
+ <Filter>Source Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
- <ResourceCompile Include="ScreensaverNotify.rc" />
+ <ResourceCompile Include="ScreensaverNotify.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
</ItemGroup>
</Project>
\ No newline at end of file
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{240fe0a1-842e-48f1-bd9d-126731782b14}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\ScreensaverNotify\ScreensaverNotify.cpp">
<ClInclude Include="..\ScreensaverNotify\ScreensaverNotify.h">
<Filter>Source Files</Filter>
</ClInclude>
- <ClInclude Include="resource.h" />
+ <ClInclude Include="resource.h">
+ <Filter>Source Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
- <ResourceCompile Include="ScreensaverNotify32.rc" />
+ <ResourceCompile Include="ScreensaverNotify32.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
</ItemGroup>
</Project>
\ No newline at end of file
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{256e848e-f08e-4891-a6d2-e72679385047}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="ScreensaverNotifierProxy.cpp">
<ClInclude Include="ScreensaverNotifierProxy.h">
<Filter>Source Files</Filter>
</ClInclude>
- <ClInclude Include="resource.h" />
+ <ClInclude Include="resource.h">
+ <Filter>Source Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
- <ResourceCompile Include="ScreensaverProxy32.rc" />
+ <ResourceCompile Include="ScreensaverProxy32.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
</ItemGroup>
</Project>
\ No newline at end of file
static UINT uTaskbarRestart = 0;
switch (msg) {
case WM_CREATE:
- {
return TRUE;
- }
case WM_TIMER:
- {
if (wParam == SCRSV_TIMER_ID) {
if (!IsScreensaverRunning()) {
StartScreensaverPollTimer(false);
}
}
return 0;
- }
default:
- if (hookWndMsg_ != 0 && msg == hookWndMsg_) {
+ if (hookWndMsg_ != 0 && msg == hookWndMsg_ && !alreadyNotified_) {
/* Windows sends SC_SCREENSAVE when it tries to start a screensaver.
If screensaver is set to "none" or if another application cancels
this event, we would falsely mute windows.
Sleep(500);
if (IsScreensaverRunning()) {
/* SC_SCREENSAVE might be fired multiple times */
- if (!alreadyNotified_) {
- alreadyNotified_ = true;
- SendMessage(hNotifyWnd_, WM_SCRNSAVE_CHANGE, SCRNSAVE_START, 0);
- StartScreensaverPollTimer();
- }
+ alreadyNotified_ = true;
+ SendMessage(hNotifyWnd_, WM_SCRNSAVE_CHANGE, SCRNSAVE_START, 0);
+ StartScreensaverPollTimer(true);
}
}
break;
RegisterHook regHook_;
UnregisterHook unregHook_;
- void StartScreensaverPollTimer(bool start = true);
+ void StartScreensaverPollTimer(bool start);
bool IsScreensaverRunning();
SetForegroundWindow(hWnd);
TrackPopupMenuEx(GetSubMenu(hTrayMenu_, 0), TPM_NONOTIFY | TPM_TOPALIGN
| TPM_LEFTALIGN, p.x, p.y, hWnd_, nullptr);
- PostMessage(hWnd, WM_NULL, 0, 0);
break;
}
default: