_Kurt Posted October 21, 2007 Share Posted October 21, 2007 I've read several articles over the web and I know for a fact it is possible.I came accross an article explaining how to do it:To capture any window, completely visible, partially visible, or complete invisible, Win32 API provides two special messages, WM_PRINT and WM_PRINTCLIENT. Both these messages take a device context handle as a parameter, and the window handling these messages is supposed to draw itself or its client area into the device context provided.The author explains about how it can be done here, however I cannot translate any part of this to autoit.Does his example work? Is this possible?Thanks,Kurt Awaiting Diablo III.. Link to comment Share on other sites More sharing options...
Richard Robertson Posted October 21, 2007 Share Posted October 21, 2007 (edited) Never mind... After reading the link, I found it was more complicated than I though it would have been. Edited October 21, 2007 by Richard Robertson Link to comment Share on other sites More sharing options...
Zedna Posted October 21, 2007 Share Posted October 21, 2007 It's interesting. I think this first simple method (without hooks, asm, etc.) can be modified to solve missing client area painted by WM_PAINT: Here is original code: void PrintWindow(HWND hWnd) { HDC hDCMem = CreateCompatibleDC(NULL); RECT rect; GetWindowRect(hWnd, & rect); HBITMAP hBmp = NULL; { HDC hDC = GetDC(hWnd); hBmp = CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top); ReleaseDC(hWnd, hDC); } HGDIOBJ hOld = SelectObject(hDCMem, hBmp); SendMessage(hWnd, WM_PRINT, (WPARAM) hDCMem, PRF_CHILDREN | PRF_CLIENT | PRF_ERASEBKGND | PRF_NONCLIENT | PRF_OWNED); SelectObject(hDCMem, hOld); DeleteObject(hDCMem); OpenClipboard(hWnd); EmptyClipboard(); SetClipboardData(CF_BITMAP, hBmp); CloseClipboard(); } I think there can maded second memory DC/bitmap and content of client area painted by WM_PAINT could be somehow copied to this second memory DC/bitmap. Then these two memory bitmaps can be combined together when they are moved to Clipboard. It's just my idea. Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
_Kurt Posted October 21, 2007 Author Share Posted October 21, 2007 Yeah, I figured something like that out too. But all of this is too complicated for me, I don't have the knowledge or the understanding of C++ to translate. I'm not asking for someone to translate it, because that would be kind of lazy of me, but if anyone has any spare time and gets this working, it would be a great contribution to Example Scripts. Thanks, Kurt Awaiting Diablo III.. Link to comment Share on other sites More sharing options...
Richard Robertson Posted October 21, 2007 Share Posted October 21, 2007 OK, Kurt, I assume you are looking to read the window painting of a different executable right? One you don't have access to the code for? That will require some stack modifications unless the program in question contains the WM_PAINTCLIENT handler. Link to comment Share on other sites More sharing options...
_Kurt Posted October 21, 2007 Author Share Posted October 21, 2007 If I'm not mistaken, there is a section on that:Handling WM_PRINTCLIENT Message without Source Code Change:What if you do not have the source code of the window ?Right? Awaiting Diablo III.. Link to comment Share on other sites More sharing options...
Richard Robertson Posted October 22, 2007 Share Posted October 22, 2007 That section is the section that requires the assembly. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now