| 1 | # This file is part of Xpra. |
| 2 | # Copyright (C) 2017 Antoine Martin <antoine@devloop.org.uk> |
| 3 | # Xpra is released under the terms of the GNU GPL v2, or, at your option, any |
| 4 | # later version. See the file COPYING for details. |
| 5 | |
| 6 | import struct |
| 7 | from xpra.log import Logger |
| 8 | log = Logger("win32") |
| 9 | |
| 10 | ctypedef long HRESULT |
| 11 | ctypedef long SHSTDAPI |
| 12 | ctypedef void* HWND |
| 13 | |
| 14 | ctypedef Py_UNICODE WCHAR |
| 15 | ctypedef const WCHAR* LPCOLESTR |
| 16 | |
| 17 | |
| 18 | cdef extern from "windows.h": |
| 19 | pass |
| 20 | cdef extern from "guiddef.h": |
| 21 | ctypedef struct GUID: |
| 22 | pass |
| 23 | ctypedef void* REFIID |
| 24 | ctypedef void* LPCLSID |
| 25 | |
| 26 | cdef extern from "shlobj.h": |
| 27 | SHSTDAPI SHCLSIDFromString(LPCOLESTR lpsz, LPCLSID pclsid) |
| 28 | cdef extern from "shobjidl.h": |
| 29 | pass |
| 30 | #GUID IID_IShellFolder |
| 31 | #DEFINE_GUID (IID_IShellFolder, __MSABI_LONG(0x000214e6), 0, 0, 0xc0, 0, 0, 0, 0, 0, 0, 0x46); |
| 32 | |
| 33 | cdef extern from "propkey.h": |
| 34 | pass |
| 35 | cdef extern from "propvarutil.h": |
| 36 | pass |
| 37 | cdef extern from "shellapi.h": |
| 38 | SHSTDAPI SHGetPropertyStoreForWindow(HWND hwnd, REFIID riid, void **ppv) |
| 39 | |
| 40 | cdef extern from "propsys.h": |
| 41 | ctypedef struct IPropertyStore: |
| 42 | pass |
| 43 | |
| 44 | |
| 45 | def set_app_id(hwnd, app_id): |
| 46 | log("set_app_id(%i, %i)", hwnd, app_id) |
| 47 | cdef IPropertyStore *pps |
| 48 | cdef HWND hWnd = <void *> hwnd |
| 49 | #cdef GUID IID_IShellFolder |
| 50 | cdef GUID IID_IShellFolder |
| 51 | u16 = "{000214E6-0000-0000-C000-000000000046}".encode("utf16") |
| 52 | SHCLSIDFromString(u16, &IID_IShellFolder); |
| 53 | #CLSIDFromString(u'{56FDF344-FD6D-11d0-958A-006097C9A090}', &IID_IShellFolder) |
| 54 | cdef SHSTDAPI hr = SHGetPropertyStoreForWindow(hWnd, <REFIID> &IID_IShellFolder, <void **> &pps) |