win32ui screen capture

Me Mine
Fri Jun 27 01:50:25 EDT 2003


On Fri, 27 Jun 2003 05:11:04 GMT, "Mark S Pryor"
<marks.pryorSHRUB at CHENEYverizon.net> wrote:

>Hi,
><Me Mine> wrote in message
>news:o43nfvsc8r4q934p709l1g3thtoube37qn at 4ax.com...
>> i,
>> I have trying to code a small console app that will
>> allow a user to select a window and then create a
>> screen capture of the window.  I haven't been able to
>> figure out how to do the screen capture part.  The
>> code is as follows, the commented out lines at the end
>> are things I have tried, but don't work.  Whenever I
>> try to create a compatibe Bitmap or DC it comes back
>> with an error as
>> win32ui: CreateCompatibleDC failed
>> or
>> AttributeError: CreateCompatibleDC
>> Any help would be greatly appreciated.
>>
>> import win32gui
>> import win32ui
>>
>> numWindows = 0
>> windows = []
>> winDict = {}
>> windowsText=[]
>> inc = 0
>>
>> def _MyCallback( hwnd, extra ):
>> extra.append(hwnd)
>>
>>
>> win32gui.EnumWindows(_MyCallback, windows)
>> for i in windows:
>> if win32gui.IsWindowVisible(i):
>> if win32gui.IsWindowVisible:
>> windowsText.append(i)
>> winDict[numWindows] = i
>> numWindows +=1
>>
>>
>>
>>
>> print "Please select a window to capture"
>> for window in windowsText:
>> windowText = win32gui.GetWindowText(window)
>> print inc, windowText
>> inc += 1
>>
>> selection = input()
>>
>> print win32gui.GetWindowText(winDict[selection])
>> myDC = win32ui.CreateDCFromHandle(winDict[selection])
>> win32gui.SetForegroundWindow(winDict[selection])
>> win_sz = win32gui.GetClientRect(winDict[selection])
>> myBitMap = win32ui.CreateBitmap()
>> #myMemDC = win32ui.CreateCompatibleDC(myDC)
>> #myBitMap.BitBlt((0,0),(win_sz[2],win_sz[3],myDC,(0,0),0))
>> #myBitMap.CreateCompatibleBitMap(myDC,win_sz[2], win_sz[3])
>> #myBitMap.CreateCompatibleDC(myDC)
>>
>>
>> Thanks,
>> Rob
>
>You may be able to make this work ... eventually. However,
>circulating in the Python community you will find the C file
>_grabscreen.c with all the same API calls you are trying to use
>in standard C.
>
>see this post
>http://groups.google.com/groups?selm=mailman.1011217637.9447.python-list%40p
>ython.org
>
>It explains how to compile the module _grabscreen.pyd with MS Visual C.
>I was able to get a screen shot script in 10 minutes after I read this
>post. If you don't have a grabscreen module already, see this ZIP file
>for the relevant files. Use the file ImageGrab1.py to make a screen
>capture of the desktop and save the results as PNG.
>
>(for ActivePython 2.2 only)
>http://mysite.verizon.net/res1ur2j/GrabScreen.zip
>
>you will need PIL from
>http://www.pythonware.com/products/pil/
>
>hth,
>Mark Pryor
>
Thanks for reponding Mark.  I have looked at the grab function in
ImagrGrab from PIL.  And it does do exactly what I want it to do,
which is great, but I was hoping to do the program using win32ui and
win32gui so that I could get a better understanding over how Windows
(the OS) operates.  The part that bothers me (and the reason why I'm
pursueing this) is because in MS C++ the BitBlt function can take the
Window DC directly as opposed to the BitBlt function in python, which
cannot.  Python's BitBlt function (for PyCDC objects in win32ui), can
only take other PyCDC objects for the source of the copy.
Unfortunatley, once I have the window handle I can call the
GetWindowDC method, but it returns HDC  Yet, I unable to use this
object to call BitBlt on.  When I uncomment the the BitBlt line of
code I get a n error of

TypeError: The 'O' param must be a PyCDC object

So, it appears that I need to do something with the HDC, so I can do a
bitblt transer to the memory DC, but I don't know how to get a PyCDC
object from a HDC.

Thanks,

Rob


----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeed.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =---




More information about the Python-list mailing list