Hi.
While waiting for the commit of my localspl-Patches, i want to picked up an fun project:
Has anyone an Idea, how to modify "user32.dll" and "winex11.drv" to open a Window, when I already have the X11 Window-ID (example: XSCREENSAVER_WINDOW=0x280020)?
My Idea is to include the wrapper code in explorer.exe and use similar code as already present for "/desktop".
The Window width and height is not known on startup and does not match a well-known Desktop Size. I think, I need to add an Export to winex11.drv to fetch the size and reuse "X11DRV_create_desktop()" or add an Export to someting similar as "X11DRV_create_desktop()".
The client registers a Window Class with a known name ("WindowsScreenSaverClass") and then CreateWindowEx must be redirected to the already created X11-Window.
A lightwight solution might be to implement minimal features from "scrsave.lib" (RegisterClass) in "explorer.exe" and then call "ScreenSaverProc" directly.
Any Ideas?
Yep, I've done this before but it was an evil, awful hack and I don't have the patch anymore (probably just as well) :)
The way I did it was just to redirect the first created window, but again, it was hacky. Hopefully you can find a better way.
On Thu, 19 Oct 2006 00:04:39 +0200, Detlef Riekenberg wrote:
Hi.
While waiting for the commit of my localspl-Patches, i want to picked up an fun project:
Has anyone an Idea, how to modify "user32.dll" and "winex11.drv" to open a Window, when I already have the X11 Window-ID (example: XSCREENSAVER_WINDOW=0x280020)?
My Idea is to include the wrapper code in explorer.exe and use similar code as already present for "/desktop".
The Window width and height is not known on startup and does not match a well-known Desktop Size. I think, I need to add an Export to winex11.drv to fetch the size and reuse "X11DRV_create_desktop()" or add an Export to someting similar as "X11DRV_create_desktop()".
The client registers a Window Class with a known name ("WindowsScreenSaverClass") and then CreateWindowEx must be redirected to the already created X11-Window.
A lightwight solution might be to implement minimal features from "scrsave.lib" (RegisterClass) in "explorer.exe" and then call "ScreenSaverProc" directly.
Any Ideas?
On Mo, 2006-10-23 at 11:11 -0700, Mike Hearn wrote:
The way I did it was just to redirect the first created window, but again, it was hacky. Hopefully you can find a better way.
I dropped the explorer-idea and patched only winex11.drv:
After XSCREENSAVER_WINDOW was detected on DllMain/PROCESS_ATTACH, I validated lpszClassName from CREATESTRUCTA (in X11DRV_CreateWindow), set a new flag in x11drv_win_data and modified create_whole_window / destroy_whole_window.
That was ok for fullscreen, but it need more work (and a wrapper) for the Preview-Case ("wine screensavername.scr /p hWnd") With "/s" for the preview in "xscrennsaver-demo", the graphic is to large.