Processing Ajax...

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

Confirm
Close Dialog

User Image
Dempf
12 discussion posts
Hello,

I've used the prevent window deactivation feature with great success. However, with the new FFXIV 3.1 patch, clicking back onto a fullscreen window causes a short display driver refresh (takes about 7 seconds for me). I think that it might be flushing the VRAM cache or something.

To be clear: I can still move my cursor away from the fullscreen game window to another monitor and do whatever tasks I want. However, moving the cursor back to the game window and clicking causes a refresh.

Is it possible to add a "prevent window reactivation" feature in order to prevent the FFXIV fullscreen window from knowing that it was just switched to?
Nov 10, 2015  • #1
Keith Lammers (BFS)'s profile on WallpaperFusion.com
It's an interesting thought! But preventing reactivation would prevent input from being sent to the application, which would make it more or less useless :)
Nov 12, 2015  • #2
User Image
Dempf
12 discussion posts
Thank you for the response.

I hooked into the game process using Spy++ to look at messages that it's receiving from the window manager (before and after left mouse click or WM_LBUTTONDOWN) and pasted a log snipped below.

I don't know if it's WM_NCACTIVATE that's causing the screen refresh, but it might be WM_DISPLAYCHANGE or WM_WINDOWPOSCHANGING or WM_NCCALCSIZE.

I spent a few hours trying to write & inject my own WndProc hook into the game in order to change the behavior of those messages, but I'm pretty useless at Windows programming.

Anyway, this might be beyond the scope of DisplayFusion since it's a pretty specific issue that probably only affects the one game. But if you have any advice, it would be appreciated :)

Code

<004135> 0000000000040624 S WM_NCACTIVATE fActive:True
<004136> 0000000000040624 S WM_DISPLAYCHANGE cBitsPerPixel:32 cxScreen:5860 cyScreen:1080
<004137> 0000000000040624 R WM_DISPLAYCHANGE
<004138> 0000000000040624 S WM_STYLECHANGING wStyleType:GWL_EXSTYLE | GWL_STYLE lpss:00E2E7D0
<004139> 0000000000040624 R WM_STYLECHANGING
<004140> 0000000000040624 S WM_STYLECHANGED wStyleType:GWL_EXSTYLE | GWL_STYLE lpss:00E2E7D0
<004141> 0000000000040624 R WM_STYLECHANGED
<004142> 0000000000040624 S WM_STYLECHANGING wStyleType:GWL_EXSTYLE lpss:00E2E7D0
<004143> 0000000000040624 R WM_STYLECHANGING
<004144> 0000000000040624 S WM_STYLECHANGED wStyleType:GWL_EXSTYLE lpss:00E2E7D0
<004145> 0000000000040624 R WM_STYLECHANGED
<004146> 0000000000040624 S WM_WINDOWPOSCHANGING lpwp:00E2E920
<004147> 0000000000040624 R WM_WINDOWPOSCHANGING
<004148> 0000000000040624 S WM_NCCALCSIZE fCalcValidRects:True lpncsp:00E2E870
<004149> 0000000000040624 R WM_NCCALCSIZE fuValidRect:0000 lpncsp:00E2EBB0
<004150> 0000000000040624 S WM_WINDOWPOSCHANGED lpwp:00E2E920
<004151> 0000000000040624 R WM_WINDOWPOSCHANGED
<004152> 0000000000040624 S WM_WINDOWPOSCHANGING lpwp:00E2E920
<004153> 0000000000040624 R WM_WINDOWPOSCHANGING
<004154> 0000000000040624 S WM_DISPLAYCHANGE cBitsPerPixel:32 cxScreen:5860 cyScreen:1080
<004155> 0000000000040624 R WM_DISPLAYCHANGE
<004156> 0000000000040624 S WM_WINDOWPOSCHANGING lpwp:00E2EC00
<004157> 0000000000040624 R WM_WINDOWPOSCHANGING
<004158> 0000000000040624 S WM_NCCALCSIZE fCalcValidRects:True lpncsp:00E2EB50
<004159> 0000000000040624 R WM_NCCALCSIZE fuValidRect:0000 lpncsp:00E2EE90
<004160> 0000000000040624 S WM_WINDOWPOSCHANGED lpwp:00E2EC00
<004161> 0000000000040624 R WM_WINDOWPOSCHANGED
<004162> 0000000000040624 S WM_WINDOWPOSCHANGING lpwp:00E2EC00
<004163> 0000000000040624 R WM_WINDOWPOSCHANGING
<004164> 0000000000040624 S WM_WINDOWPOSCHANGED lpwp:00E2EC00
<004165> 0000000000040624 R WM_WINDOWPOSCHANGED
<004166> 0000000000040624 R WM_NCACTIVATE
<004167> 0000000000040624 S WM_WINDOWPOSCHANGING lpwp:00E2F570
<004168> 0000000000040624 R WM_WINDOWPOSCHANGING
<004169> 0000000000040624 S WM_NCHITTEST xPos:3091 yPos:41
<004170> 0000000000040624 R WM_NCHITTEST nHittest:HTCLIENT
<004171> 0000000000040624 S WM_NCHITTEST xPos:3091 yPos:41
<004172> 0000000000040624 R WM_NCHITTEST nHittest:HTCLIENT
<004173> 0000000000040624 S WM_SETCURSOR hwnd:00040624 nHittest:HTCLIENT wMouseMsg:WM_LBUTTONDOWN
<004174> 0000000000040624 R WM_SETCURSOR fHaltProcessing:False
<004175> 0000000000040624 P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:3091 yPos:41
<004176> 0000000000040624 S WM_GETTEXT cchTextMax:1000 lpszText:00E2DC60
<004177> 0000000000040624 R WM_GETTEXT cchCopied:17 lpszText:00E2E790 ("")
<004178> 0000000000040624 P WM_MOUSEMOVE fwKeys:MK_LBUTTON xPos:2930 yPos:540
<004179> 0000000000040624 P WM_LBUTTONUP fwKeys:0000 xPos:2930 yPos:540
<004180> 0000000000040624 S WM_CAPTURECHANGED hwndNewCapture:00000000
<004181> 0000000000040624 R WM_CAPTURECHANGED
Nov 13, 2015 (modified Nov 13, 2015)  • #3
Jon Tackabury (BFS)'s profile on WallpaperFusion.com
It's probably the WM_DISPLAYCHANGE message that's causing the display refresh, it can definitely do that. As for fixing it? I'm not sure I can be much help there, sorry. :(
Nov 16, 2015  • #4
User Image
Dempf
12 discussion posts
It was in fact the WM_DISPLAYCHANGE message. I wrote a program to hook function calls to ChangeDisplaySettings and that (mostly) fixed the issue. I think WM_WINDOWPOSCHANGING is still causing some brief flickering, and I'm not sure how to intercept that message though.
Nov 16, 2015  • #5
Jon Tackabury (BFS)'s profile on WallpaperFusion.com
You might need to use a different hook (wndprocproc vs wndcallprocret) to intercept the messages and prevent the application from receiving them.
Nov 23, 2015  • #6
Subscribe to this discussion topic using RSS
Was this helpful?  Login to Vote(-)  Login to Vote(-)