Skip to content

Instantly share code, notes, and snippets.

View EBNull's full-sized avatar

EBNull EBNull

  • New York, NY
  • 12:42 (UTC -04:00)
View GitHub Profile
@EBNull
EBNull / getobject.py
Created December 5, 2012 20:19
"Missing" win32com utilities for getting object instances from DLLs or from run-time licenced servers
__all__ = (
####### Class Objects
#CoGetClassObject - Normal, not wrapped
'CoDllGetClassObject', #Get ClassObject from a DLL file
####### ClassFactory::CreateInstance Wrappers
'CoCreateInstanceFromFactory', #Create an object via IClassFactory::CreateInstance
'CoCreateInstanceFromFactoryLicenced', #Create a licenced object via IClassFactory2::CreateInstanceLic
@EBNull
EBNull / iclassfactory2.py
Created November 19, 2012 21:53
Create an instance of a COM object with IClassFactory2 for objects that require licensing.
import pythoncom
import win32com.client
from uuid import UUID
from ctypes import OleDLL, WinDLL, c_long, c_ulong, byref, WINFUNCTYPE, POINTER, c_char_p, pointer
from ctypes.wintypes import HRESULT
IID_IClassFactory2 = "{B196B28F-BAB4-101A-B69C-00AA00341D07}"
def CoCreateInstanceLicenced(clsid_class, iid_interface=pythoncom.IID_IDispatch, key='', dwClsContext=pythoncom.CLSCTX_SERVER, pythoncom_iid_interface=pythoncom.IID_IDispatch, pythoncom_wrapdisp=True):
@EBNull
EBNull / tempdb.py
Created October 16, 2012 20:56
In django, create a database definition that only exists for the current session.
"""
Example:
import django.db
from cStringIO import StringIO
def inspect_mdb(filename):
db_dict = {'ENGINE': 'access.pyodbc', 'OPTIONS': {'driver': 'access'}, 'NAME': filename}
with temp_db(db_dict, 'test') as using:
django.db.connections[using].cursor() #Connect immediately
@EBNull
EBNull / reversem2m.py
Created September 28, 2012 17:43
Django reverse M2M field (for admin, etc)
#This class lets you add the 'other side' of a m2m to a django model.
#Why this is better than just using related_name:
# -Admin sees it as a real field, gives you the filter_horizontal widget if you ask
#
#Issues:
# -Probably breaks syncdb (table tries to be created twice)
#
#Non-issues:
# -Doesn't break south (custom introspection rule makes this field ignored)
@EBNull
EBNull / clipboard.py
Created September 4, 2012 21:03
Copy / Retreive text to / from windows clipboard
def clipcopy(z):
#http://stackoverflow.com/questions/579687
z = unicode(z)
try:
import win32clipboard
except ImportError:
from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
@EBNull
EBNull / qsettingswrap.py
Created April 4, 2012 18:15
Wrap a QSettings object with a more pythonic attribute based paradigm
from PyQt4 import QtCore
from config import get_data_path
class SettingsWrapper(object):
"""Wrapper for QSettings using attribute access with conversion functions"""
_known_settings = {
#'setting': (conversionFuncRead, conversionFuncReadAttr, default),
}
def __init__(self, settings, subtree=None):
self._settings = settings
from django.contrib import admin
#Allow lookup by any kwargs in admin
#Reverts https://docs.djangoproject.com/en/1.2/releases/1.2.4/#restricted-filters-in-admin-interface
admin.ModelAdmin.lookup_allowed = lambda i, k, v: True
@EBNull
EBNull / usergroups_win32.py
Created February 28, 2012 22:06
Get current user groups (win32)
import ctypes
import win32net
def getUsername(name_format=8):
#Only NameUserSamCompatable supported if not on a domain.
#'' is returned in that case.
#NameUserSamCompatable = 2
#NameUserPrincipal = 8,
bufsz = ctypes.c_ulong()
ctypes.windll.secur32.GetUserNameExW(name_format, None, ctypes.byref(bufsz))
@EBNull
EBNull / basicapp.py
Created February 16, 2012 19:08
Basis for a general PyQT app
import os
import sys
import ctypes
import traceback
import logging
log = logging.getLogger()
from QtBinding import QtCore, QtGui
def remove_window_context_help_button(qwindow):
@EBNull
EBNull / forcefocus.py
Created December 1, 2011 19:11
Force windows application focus (attempting to bypass SetForegroundWindow restrictions)
import platform
#wnd is a HWND
def forceFocus(wnd):
if platform.system() != 'Windows':
return
SPI_GETFOREGROUNDLOCKTIMEOUT = 0x2000
SPI_SETFOREGROUNDLOCKTIMEOUT = 0x2001
SW_RESTORE = 9