(hgdiobj, cbBuffer=None, lpvObject=None)
| 441 | # __out LPVOID lpvObject |
| 442 | # ); |
| 443 | def GetObject(hgdiobj, cbBuffer=None, lpvObject=None): |
| 444 | _GetObject = windll.gdi32.GetObject |
| 445 | _GetObject.argtypes = [HGDIOBJ, ctypes.c_int, LPVOID] |
| 446 | _GetObject.restype = ctypes.c_int |
| 447 | _GetObject.errcheck = RaiseIfZero |
| 448 | |
| 449 | # Both cbBuffer and lpvObject can be omitted, the correct |
| 450 | # size and structure to return are automatically deduced. |
| 451 | # If lpvObject is given it must be a ctypes object, not a pointer. |
| 452 | # Always returns a ctypes object. |
| 453 | |
| 454 | if cbBuffer is not None: |
| 455 | if lpvObject is None: |
| 456 | lpvObject = ctypes.create_string_buffer("", cbBuffer) |
| 457 | elif lpvObject is not None: |
| 458 | cbBuffer = sizeof(lpvObject) |
| 459 | else: # most likely case, both are None |
| 460 | t = GetObjectType(hgdiobj) |
| 461 | if t == OBJ_PEN: |
| 462 | cbBuffer = sizeof(LOGPEN) |
| 463 | lpvObject = LOGPEN() |
| 464 | elif t == OBJ_BRUSH: |
| 465 | cbBuffer = sizeof(LOGBRUSH) |
| 466 | lpvObject = LOGBRUSH() |
| 467 | elif t == OBJ_PAL: |
| 468 | cbBuffer = _GetObject(hgdiobj, 0, None) |
| 469 | lpvObject = (WORD * (cbBuffer // sizeof(WORD)))() |
| 470 | elif t == OBJ_FONT: |
| 471 | cbBuffer = sizeof(LOGFONT) |
| 472 | lpvObject = LOGFONT() |
| 473 | elif t == OBJ_BITMAP: # try the two possible types of bitmap |
| 474 | cbBuffer = sizeof(DIBSECTION) |
| 475 | lpvObject = DIBSECTION() |
| 476 | try: |
| 477 | _GetObject(hgdiobj, cbBuffer, byref(lpvObject)) |
| 478 | return lpvObject |
| 479 | except WindowsError: |
| 480 | cbBuffer = sizeof(BITMAP) |
| 481 | lpvObject = BITMAP() |
| 482 | elif t == OBJ_EXTPEN: |
| 483 | cbBuffer = sizeof(LOGEXTPEN) |
| 484 | lpvObject = LOGEXTPEN() |
| 485 | else: |
| 486 | cbBuffer = _GetObject(hgdiobj, 0, None) |
| 487 | lpvObject = ctypes.create_string_buffer("", cbBuffer) |
| 488 | _GetObject(hgdiobj, cbBuffer, byref(lpvObject)) |
| 489 | return lpvObject |
| 490 | |
| 491 | |
| 492 | # LONG GetBitmapBits( |
no test coverage detected