mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Wrap ShGetKnownFolderPath
This commit is contained in:
parent
7fbd939435
commit
fee0353451
@ -1252,6 +1252,7 @@ class TagsModel(QAbstractItemModel): # {{{
|
|||||||
_('Author names cannot contain & characters.')).exec_()
|
_('Author names cannot contain & characters.')).exec_()
|
||||||
return False
|
return False
|
||||||
if key == 'search':
|
if key == 'search':
|
||||||
|
print(1111111111, val)
|
||||||
if val in self.db.saved_search_names():
|
if val in self.db.saved_search_names():
|
||||||
error_dialog(self.gui_parent, _('Duplicate search name'),
|
error_dialog(self.gui_parent, _('Duplicate search name'),
|
||||||
_('The saved search name %s is already used.')%val).exec_()
|
_('The saved search name %s is already used.')%val).exec_()
|
||||||
|
@ -151,6 +151,10 @@ class BuildTest(unittest.TestCase):
|
|||||||
import tempfile
|
import tempfile
|
||||||
from calibre import strftime
|
from calibre import strftime
|
||||||
from calibre_extensions import winutil
|
from calibre_extensions import winutil
|
||||||
|
self.assertEqual(winutil.special_folder_path(winutil.CSIDL_APPDATA), winutil.known_folder_path(winutil.FOLDERID_RoamingAppData))
|
||||||
|
self.assertEqual(winutil.special_folder_path(winutil.CSIDL_LOCAL_APPDATA), winutil.known_folder_path(winutil.FOLDERID_LocalAppData))
|
||||||
|
self.assertEqual(winutil.special_folder_path(winutil.CSIDL_FONTS), winutil.known_folder_path(winutil.FOLDERID_Fonts))
|
||||||
|
self.assertEqual(winutil.special_folder_path(winutil.CSIDL_PROFILE), winutil.known_folder_path(winutil.FOLDERID_Profile))
|
||||||
|
|
||||||
def au(x, name):
|
def au(x, name):
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
|
@ -18,8 +18,8 @@ set_error_from_hresult(const char *file, const int line, const HRESULT hr, const
|
|||||||
LPCWSTR msg = err.ErrorMessage();
|
LPCWSTR msg = err.ErrorMessage();
|
||||||
PyObject *pmsg = PyUnicode_FromWideChar(msg, -1);
|
PyObject *pmsg = PyUnicode_FromWideChar(msg, -1);
|
||||||
PyObject *ans;
|
PyObject *ans;
|
||||||
if (name) ans = PyErr_Format(PyExc_OSError, "%s:%d:%s:%V: %S", file, line, prefix, pmsg, "Out of memory", name);
|
if (name) ans = PyErr_Format(PyExc_OSError, "%s:%d:%s:[%li] %V: %S", file, line, prefix, hr, pmsg, "Out of memory", name);
|
||||||
else ans = PyErr_Format(PyExc_OSError, "%s:%d:%s:%V", file, line, prefix, pmsg, "Out of memory");
|
else ans = PyErr_Format(PyExc_OSError, "%s:%d:%s:[%li] %V", file, line, prefix, hr, pmsg, "Out of memory");
|
||||||
Py_CLEAR(pmsg);
|
Py_CLEAR(pmsg);
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,59 @@
|
|||||||
#include <atlbase.h> // for CComPtr
|
#include <atlbase.h> // for CComPtr
|
||||||
#include <versionhelpers.h>
|
#include <versionhelpers.h>
|
||||||
|
|
||||||
|
// GUID {{{
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
GUID guid;
|
||||||
|
} PyGUID;
|
||||||
|
|
||||||
|
static PyTypeObject PyGUIDType = {
|
||||||
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
|
};
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
create_guid(const wchar_t *str) {
|
||||||
|
PyGUID *self = (PyGUID *) PyGUIDType.tp_alloc(&PyGUIDType, 0);
|
||||||
|
if (self) {
|
||||||
|
HRESULT hr = IIDFromString(str, &self->guid);
|
||||||
|
if (FAILED(hr)) return error_from_hresult(hr);
|
||||||
|
}
|
||||||
|
return (PyObject*)self;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
create_guid(const GUID &g) {
|
||||||
|
PyGUID *self = (PyGUID *) PyGUIDType.tp_alloc(&PyGUIDType, 0);
|
||||||
|
if (self) self->guid = g;
|
||||||
|
return (PyObject*)self;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
PyGUID_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
|
||||||
|
wchar_raii s;
|
||||||
|
if (!PyArg_ParseTuple(args, "O&", py_to_wchar_no_none, &s)) return NULL;
|
||||||
|
return create_guid(s.ptr());
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
PyGUID_dealloc(PyGUID *self) { }
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
PyGUID_repr(PyGUID *self) {
|
||||||
|
com_wchar_raii s;
|
||||||
|
HRESULT hr = StringFromIID(self->guid, s.address());
|
||||||
|
if (FAILED(hr)) return error_from_hresult(hr);
|
||||||
|
return PyUnicode_FromWideChar(s.ptr(), -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define M(name, args) {#name, (PyCFunction)Handle_##name, args, ""}
|
||||||
|
static PyMethodDef PyGUID_methods[] = {
|
||||||
|
{NULL, NULL, 0, NULL}
|
||||||
|
};
|
||||||
|
#undef M
|
||||||
|
|
||||||
|
// }}}
|
||||||
|
|
||||||
// Handle {{{
|
// Handle {{{
|
||||||
typedef enum { NormalHandle, ModuleHandle, IconHandle } WinHandleType;
|
typedef enum { NormalHandle, ModuleHandle, IconHandle } WinHandleType;
|
||||||
|
|
||||||
@ -243,6 +296,16 @@ winutil_folder_path(PyObject *self, PyObject *args) {
|
|||||||
return PyUnicode_FromWideChar(wbuf, -1);
|
return PyUnicode_FromWideChar(wbuf, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
known_folder_path(PyObject *self, PyObject *args) {
|
||||||
|
PyGUID *id;
|
||||||
|
DWORD flags = KF_FLAG_DEFAULT;
|
||||||
|
if (!PyArg_ParseTuple(args, "O!|k", &PyGUIDType, &id, &flags)) return NULL;
|
||||||
|
com_wchar_raii path;
|
||||||
|
HRESULT hr = SHGetKnownFolderPath(id->guid, flags, NULL, path.address());
|
||||||
|
return PyUnicode_FromWideChar(path.ptr(), -1);
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
winutil_internet_connected(PyObject *self, PyObject *args) {
|
winutil_internet_connected(PyObject *self, PyObject *args) {
|
||||||
DWORD flags;
|
DWORD flags;
|
||||||
@ -1014,6 +1077,7 @@ static PyMethodDef winutil_methods[] = {
|
|||||||
M(parse_cmdline, METH_VARARGS),
|
M(parse_cmdline, METH_VARARGS),
|
||||||
M(write_file, METH_VARARGS),
|
M(write_file, METH_VARARGS),
|
||||||
M(wait_named_pipe, METH_VARARGS),
|
M(wait_named_pipe, METH_VARARGS),
|
||||||
|
M(known_folder_path, METH_VARARGS),
|
||||||
|
|
||||||
{"special_folder_path", winutil_folder_path, METH_VARARGS,
|
{"special_folder_path", winutil_folder_path, METH_VARARGS,
|
||||||
"special_folder_path(csidl_id) -> path\n\n"
|
"special_folder_path(csidl_id) -> path\n\n"
|
||||||
@ -1153,129 +1217,199 @@ static struct PyModuleDef winutil_module = {
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
CALIBRE_MODINIT_FUNC PyInit_winutil(void) {
|
CALIBRE_MODINIT_FUNC PyInit_winutil(void) {
|
||||||
HandleNumberMethods.nb_int = (unaryfunc)Handle_as_int;
|
#define add_type(name, doc, obj) obj##Type.tp_name = "winutil." #name; obj##Type.tp_doc = doc; obj##Type.tp_basicsize = sizeof(obj); \
|
||||||
HandleNumberMethods.nb_bool = (inquiry)Handle_as_bool;
|
obj##Type.tp_itemsize = 0; obj##Type.tp_flags = Py_TPFLAGS_DEFAULT; obj##Type.tp_repr = (reprfunc)obj##_repr; \
|
||||||
HandleType.tp_name = "winutil.Handle";
|
obj##Type.tp_str = (reprfunc)obj##_repr; obj##Type.tp_new = obj##_new; obj##Type.tp_dealloc = (destructor)obj##_dealloc; \
|
||||||
HandleType.tp_doc = "Wrappers for Win32 handles that free the handle on delete automatically";
|
obj##Type.tp_methods = obj##_methods; \
|
||||||
HandleType.tp_basicsize = sizeof(Handle);
|
if (PyType_Ready(&obj##Type) < 0) { Py_CLEAR(m); return NULL; } \
|
||||||
HandleType.tp_itemsize = 0;
|
Py_INCREF(&obj##Type); if (PyModule_AddObject(m, #name, (PyObject*) &obj##Type) < 0) { Py_CLEAR(m); Py_DECREF(&obj##Type); return NULL; }
|
||||||
HandleType.tp_flags = Py_TPFLAGS_DEFAULT;
|
|
||||||
HandleType.tp_repr = (reprfunc)Handle_repr;
|
|
||||||
HandleType.tp_as_number = &HandleNumberMethods;
|
|
||||||
HandleType.tp_str = (reprfunc)Handle_repr;
|
|
||||||
HandleType.tp_new = Handle_new;
|
|
||||||
HandleType.tp_methods = Handle_methods;
|
|
||||||
HandleType.tp_dealloc = (destructor)Handle_dealloc;
|
|
||||||
if (PyType_Ready(&HandleType) < 0) return NULL;
|
|
||||||
|
|
||||||
PyObject *m = PyModule_Create(&winutil_module);
|
PyObject *m = PyModule_Create(&winutil_module);
|
||||||
|
|
||||||
if (m == NULL) return NULL;
|
if (m == NULL) return NULL;
|
||||||
|
|
||||||
Py_INCREF(&HandleType);
|
HandleNumberMethods.nb_int = (unaryfunc)Handle_as_int;
|
||||||
if (PyModule_AddObject(m, "Handle", (PyObject *) &HandleType) < 0) {
|
HandleNumberMethods.nb_bool = (inquiry)Handle_as_bool;
|
||||||
Py_DECREF(&HandleType);
|
HandleType.tp_as_number = &HandleNumberMethods;
|
||||||
Py_DECREF(m);
|
add_type(Handle, "Wrappers for Win32 handles that free the handle on delete automatically", Handle);
|
||||||
return NULL;
|
add_type(GUID, "Wrapper for Win32 GUID", PyGUID);
|
||||||
}
|
#undef add_type
|
||||||
PyModule_AddIntConstant(m, "CSIDL_ADMINTOOLS", CSIDL_ADMINTOOLS);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_APPDATA", CSIDL_APPDATA);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_COMMON_ADMINTOOLS", CSIDL_COMMON_ADMINTOOLS);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_COMMON_APPDATA", CSIDL_COMMON_APPDATA);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_COMMON_DOCUMENTS", CSIDL_COMMON_DOCUMENTS);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_COOKIES", CSIDL_COOKIES);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_FLAG_CREATE", CSIDL_FLAG_CREATE);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_FLAG_DONT_VERIFY", CSIDL_FLAG_DONT_VERIFY);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_FONTS", CSIDL_FONTS);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_HISTORY", CSIDL_HISTORY);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_INTERNET_CACHE", CSIDL_INTERNET_CACHE);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_LOCAL_APPDATA", CSIDL_LOCAL_APPDATA);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_MYPICTURES", CSIDL_MYPICTURES);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_PERSONAL", CSIDL_PERSONAL);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_PROGRAM_FILES", CSIDL_PROGRAM_FILES);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_PROGRAM_FILES_COMMON", CSIDL_PROGRAM_FILES_COMMON);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_SYSTEM", CSIDL_SYSTEM);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_WINDOWS", CSIDL_WINDOWS);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_PROFILE", CSIDL_PROFILE);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_STARTUP", CSIDL_STARTUP);
|
|
||||||
PyModule_AddIntConstant(m, "CSIDL_COMMON_STARTUP", CSIDL_COMMON_STARTUP);
|
|
||||||
PyModule_AddIntConstant(m, "CREATE_NEW", CREATE_NEW);
|
|
||||||
PyModule_AddIntConstant(m, "CREATE_ALWAYS", CREATE_ALWAYS);
|
|
||||||
PyModule_AddIntConstant(m, "OPEN_EXISTING", OPEN_EXISTING);
|
|
||||||
PyModule_AddIntConstant(m, "OPEN_ALWAYS", OPEN_ALWAYS);
|
|
||||||
PyModule_AddIntConstant(m, "TRUNCATE_EXISTING", TRUNCATE_EXISTING);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_SHARE_READ", FILE_SHARE_READ);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_SHARE_WRITE", FILE_SHARE_WRITE);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_SHARE_DELETE", FILE_SHARE_DELETE);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_SHARE_VALID_FLAGS", FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_ATTRIBUTE_READONLY", FILE_ATTRIBUTE_READONLY);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_ATTRIBUTE_NORMAL", FILE_ATTRIBUTE_NORMAL);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_ATTRIBUTE_TEMPORARY", FILE_ATTRIBUTE_TEMPORARY);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_FLAG_DELETE_ON_CLOSE", FILE_FLAG_DELETE_ON_CLOSE);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_FLAG_SEQUENTIAL_SCAN", FILE_FLAG_SEQUENTIAL_SCAN);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_FLAG_RANDOM_ACCESS", FILE_FLAG_RANDOM_ACCESS);
|
|
||||||
PyModule_AddIntConstant(m, "GENERIC_READ", GENERIC_READ);
|
|
||||||
PyModule_AddIntConstant(m, "GENERIC_WRITE", GENERIC_WRITE);
|
|
||||||
PyModule_AddIntConstant(m, "DELETE", DELETE);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_BEGIN", FILE_BEGIN);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_CURRENT", FILE_CURRENT);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_END", FILE_END);
|
|
||||||
PyModule_AddIntConstant(m, "MOVEFILE_COPY_ALLOWED", MOVEFILE_COPY_ALLOWED);
|
|
||||||
PyModule_AddIntConstant(m, "MOVEFILE_CREATE_HARDLINK", MOVEFILE_CREATE_HARDLINK);
|
|
||||||
PyModule_AddIntConstant(m, "MOVEFILE_DELAY_UNTIL_REBOOT", MOVEFILE_DELAY_UNTIL_REBOOT);
|
|
||||||
PyModule_AddIntConstant(m, "MOVEFILE_FAIL_IF_NOT_TRACKABLE", MOVEFILE_FAIL_IF_NOT_TRACKABLE);
|
|
||||||
PyModule_AddIntConstant(m, "MOVEFILE_REPLACE_EXISTING", MOVEFILE_REPLACE_EXISTING);
|
|
||||||
PyModule_AddIntConstant(m, "MOVEFILE_WRITE_THROUGH", MOVEFILE_WRITE_THROUGH);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_NOTIFY_CHANGE_FILE_NAME", FILE_NOTIFY_CHANGE_FILE_NAME);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_NOTIFY_CHANGE_DIR_NAME", FILE_NOTIFY_CHANGE_DIR_NAME);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_NOTIFY_CHANGE_ATTRIBUTES", FILE_NOTIFY_CHANGE_ATTRIBUTES);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_NOTIFY_CHANGE_SIZE", FILE_NOTIFY_CHANGE_SIZE);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_NOTIFY_CHANGE_LAST_WRITE", FILE_NOTIFY_CHANGE_LAST_WRITE);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_NOTIFY_CHANGE_LAST_ACCESS", FILE_NOTIFY_CHANGE_LAST_ACCESS);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_NOTIFY_CHANGE_CREATION", FILE_NOTIFY_CHANGE_CREATION);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_NOTIFY_CHANGE_SECURITY", FILE_NOTIFY_CHANGE_SECURITY);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_ACTION_ADDED", FILE_ACTION_ADDED);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_ACTION_REMOVED", FILE_ACTION_REMOVED);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_ACTION_MODIFIED", FILE_ACTION_MODIFIED);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_ACTION_RENAMED_OLD_NAME", FILE_ACTION_RENAMED_OLD_NAME);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_ACTION_RENAMED_NEW_NAME", FILE_ACTION_RENAMED_NEW_NAME);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_LIST_DIRECTORY", FILE_LIST_DIRECTORY);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_FLAG_BACKUP_SEMANTICS", FILE_FLAG_BACKUP_SEMANTICS);
|
|
||||||
PyModule_AddIntConstant(m, "SHGFP_TYPE_CURRENT", SHGFP_TYPE_CURRENT);
|
|
||||||
PyModule_AddIntConstant(m, "SHGFP_TYPE_DEFAULT", SHGFP_TYPE_DEFAULT);
|
|
||||||
PyModule_AddIntConstant(m, "PIPE_ACCESS_INBOUND", PIPE_ACCESS_INBOUND);
|
|
||||||
PyModule_AddIntConstant(m, "FILE_FLAG_FIRST_PIPE_INSTANCE", FILE_FLAG_FIRST_PIPE_INSTANCE);
|
|
||||||
PyModule_AddIntConstant(m, "PIPE_TYPE_BYTE", PIPE_TYPE_BYTE);
|
|
||||||
PyModule_AddIntConstant(m, "PIPE_READMODE_BYTE", PIPE_READMODE_BYTE);
|
|
||||||
PyModule_AddIntConstant(m, "PIPE_WAIT", PIPE_WAIT);
|
|
||||||
PyModule_AddIntConstant(m, "PIPE_REJECT_REMOTE_CLIENTS", PIPE_REJECT_REMOTE_CLIENTS);
|
|
||||||
PyModule_AddIntConstant(m, "HANDLE_FLAG_INHERIT", HANDLE_FLAG_INHERIT);
|
|
||||||
PyModule_AddIntConstant(m, "HANDLE_FLAG_PROTECT_FROM_CLOSE", HANDLE_FLAG_PROTECT_FROM_CLOSE);
|
|
||||||
PyModule_AddIntConstant(m, "VK_RMENU", VK_RMENU);
|
|
||||||
PyModule_AddIntConstant(m, "DONT_RESOLVE_DLL_REFERENCES", DONT_RESOLVE_DLL_REFERENCES);
|
|
||||||
PyModule_AddIntConstant(m, "LOAD_LIBRARY_AS_DATAFILE", LOAD_LIBRARY_AS_DATAFILE);
|
|
||||||
PyModule_AddIntConstant(m, "LOAD_LIBRARY_AS_IMAGE_RESOURCE", LOAD_LIBRARY_AS_IMAGE_RESOURCE);
|
|
||||||
PyModule_AddIntConstant(m, "INFINITE", INFINITE);
|
|
||||||
PyModule_AddIntConstant(m, "REG_QWORD", REG_QWORD);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_SUCCESS", ERROR_SUCCESS);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_MORE_DATA", ERROR_MORE_DATA);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_NO_MORE_ITEMS", ERROR_NO_MORE_ITEMS);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_FILE_NOT_FOUND", ERROR_FILE_NOT_FOUND);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_GEN_FAILURE ", ERROR_GEN_FAILURE);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_INSUFFICIENT_BUFFER", ERROR_INSUFFICIENT_BUFFER);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_BAD_COMMAND", ERROR_BAD_COMMAND);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_INVALID_DATA", ERROR_INVALID_DATA);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_NOT_READY", ERROR_NOT_READY);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_SHARING_VIOLATION", ERROR_SHARING_VIOLATION);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_LOCK_VIOLATION", ERROR_LOCK_VIOLATION);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_ALREADY_EXISTS", ERROR_ALREADY_EXISTS);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_BROKEN_PIPE", ERROR_BROKEN_PIPE);
|
|
||||||
PyModule_AddIntConstant(m, "ERROR_PIPE_BUSY", ERROR_PIPE_BUSY);
|
|
||||||
PyModule_AddIntConstant(m, "NormalHandle", NormalHandle);
|
|
||||||
PyModule_AddIntConstant(m, "ModuleHandle", ModuleHandle);
|
|
||||||
PyModule_AddIntConstant(m, "IconHandle", IconHandle);
|
|
||||||
|
|
||||||
|
#define A(name) { PyObject *g = create_guid(FOLDERID_##name); if (!g) { Py_CLEAR(m); return NULL; } if (PyModule_AddObject(m, "FOLDERID_" #name, g) < 0) { Py_DECREF(g); Py_CLEAR(m); return NULL; } }
|
||||||
|
A(AdminTools);
|
||||||
|
A(Startup);
|
||||||
|
A(RoamingAppData);
|
||||||
|
A(RecycleBinFolder);
|
||||||
|
A(CDBurning);
|
||||||
|
A(CommonAdminTools);
|
||||||
|
A(CommonStartup);
|
||||||
|
A(ProgramData);
|
||||||
|
A(PublicDesktop);
|
||||||
|
A(PublicDocuments);
|
||||||
|
A(Favorites);
|
||||||
|
A(PublicMusic);
|
||||||
|
A(CommonOEMLinks);
|
||||||
|
A(PublicPictures);
|
||||||
|
A(CommonPrograms);
|
||||||
|
A(CommonStartMenu);
|
||||||
|
A(CommonStartup);
|
||||||
|
A(CommonTemplates);
|
||||||
|
A(PublicVideos);
|
||||||
|
A(NetworkFolder);
|
||||||
|
A(ConnectionsFolder);
|
||||||
|
A(ControlPanelFolder);
|
||||||
|
A(Cookies);
|
||||||
|
A(Desktop);
|
||||||
|
A(ComputerFolder);
|
||||||
|
A(Favorites);
|
||||||
|
A(Fonts);
|
||||||
|
A(History);
|
||||||
|
A(InternetFolder);
|
||||||
|
A(InternetCache);
|
||||||
|
A(LocalAppData);
|
||||||
|
A(Documents);
|
||||||
|
A(Music);
|
||||||
|
A(Pictures);
|
||||||
|
A(Videos);
|
||||||
|
A(NetHood);
|
||||||
|
A(NetworkFolder);
|
||||||
|
A(Documents);
|
||||||
|
A(PrintersFolder);
|
||||||
|
A(PrintHood);
|
||||||
|
A(Profile);
|
||||||
|
A(ProgramFiles);
|
||||||
|
A(ProgramFilesX86);
|
||||||
|
A(ProgramFilesCommon);
|
||||||
|
A(ProgramFilesCommonX86);
|
||||||
|
A(Programs);
|
||||||
|
A(Recent);
|
||||||
|
A(ResourceDir);
|
||||||
|
A(LocalizedResourcesDir);
|
||||||
|
A(SendTo);
|
||||||
|
A(StartMenu);
|
||||||
|
A(Startup);
|
||||||
|
A(System);
|
||||||
|
A(SystemX86);
|
||||||
|
A(Templates);
|
||||||
|
A(Windows);
|
||||||
|
|
||||||
|
#undef A
|
||||||
|
|
||||||
|
#define A(name) if (PyModule_AddIntConstant(m, #name, name) != 0) { Py_CLEAR(m); return NULL; }
|
||||||
|
|
||||||
|
A(CSIDL_ADMINTOOLS);
|
||||||
|
A(CSIDL_APPDATA);
|
||||||
|
A(CSIDL_COMMON_ADMINTOOLS);
|
||||||
|
A(CSIDL_COMMON_APPDATA);
|
||||||
|
A(CSIDL_COMMON_DOCUMENTS);
|
||||||
|
A(CSIDL_COOKIES);
|
||||||
|
A(CSIDL_FLAG_CREATE);
|
||||||
|
A(CSIDL_FLAG_DONT_VERIFY);
|
||||||
|
A(CSIDL_FONTS);
|
||||||
|
A(CSIDL_HISTORY);
|
||||||
|
A(CSIDL_INTERNET_CACHE);
|
||||||
|
A(CSIDL_LOCAL_APPDATA);
|
||||||
|
A(CSIDL_MYPICTURES);
|
||||||
|
A(CSIDL_PERSONAL);
|
||||||
|
A(CSIDL_PROGRAM_FILES);
|
||||||
|
A(CSIDL_PROGRAM_FILES_COMMON);
|
||||||
|
A(CSIDL_SYSTEM);
|
||||||
|
A(CSIDL_WINDOWS);
|
||||||
|
A(CSIDL_PROFILE);
|
||||||
|
A(CSIDL_STARTUP);
|
||||||
|
A(CSIDL_COMMON_STARTUP);
|
||||||
|
A(CREATE_NEW);
|
||||||
|
A(CREATE_ALWAYS);
|
||||||
|
A(OPEN_EXISTING);
|
||||||
|
A(OPEN_ALWAYS);
|
||||||
|
A(TRUNCATE_EXISTING);
|
||||||
|
A(FILE_SHARE_READ);
|
||||||
|
A(FILE_SHARE_WRITE);
|
||||||
|
A(FILE_SHARE_DELETE);
|
||||||
|
PyModule_AddIntConstant(m, "FILE_SHARE_VALID_FLAGS", FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE);
|
||||||
|
A(FILE_ATTRIBUTE_READONLY);
|
||||||
|
A(FILE_ATTRIBUTE_NORMAL);
|
||||||
|
A(FILE_ATTRIBUTE_TEMPORARY);
|
||||||
|
A(FILE_FLAG_DELETE_ON_CLOSE);
|
||||||
|
A(FILE_FLAG_SEQUENTIAL_SCAN);
|
||||||
|
A(FILE_FLAG_RANDOM_ACCESS);
|
||||||
|
A(GENERIC_READ);
|
||||||
|
A(GENERIC_WRITE);
|
||||||
|
A(DELETE);
|
||||||
|
A(FILE_BEGIN);
|
||||||
|
A(FILE_CURRENT);
|
||||||
|
A(FILE_END);
|
||||||
|
A(MOVEFILE_COPY_ALLOWED);
|
||||||
|
A(MOVEFILE_CREATE_HARDLINK);
|
||||||
|
A(MOVEFILE_DELAY_UNTIL_REBOOT);
|
||||||
|
A(MOVEFILE_FAIL_IF_NOT_TRACKABLE);
|
||||||
|
A(MOVEFILE_REPLACE_EXISTING);
|
||||||
|
A(MOVEFILE_WRITE_THROUGH);
|
||||||
|
A(FILE_NOTIFY_CHANGE_FILE_NAME);
|
||||||
|
A(FILE_NOTIFY_CHANGE_DIR_NAME);
|
||||||
|
A(FILE_NOTIFY_CHANGE_ATTRIBUTES);
|
||||||
|
A(FILE_NOTIFY_CHANGE_SIZE);
|
||||||
|
A(FILE_NOTIFY_CHANGE_LAST_WRITE);
|
||||||
|
A(FILE_NOTIFY_CHANGE_LAST_ACCESS);
|
||||||
|
A(FILE_NOTIFY_CHANGE_CREATION);
|
||||||
|
A(FILE_NOTIFY_CHANGE_SECURITY);
|
||||||
|
A(FILE_ACTION_ADDED);
|
||||||
|
A(FILE_ACTION_REMOVED);
|
||||||
|
A(FILE_ACTION_MODIFIED);
|
||||||
|
A(FILE_ACTION_RENAMED_OLD_NAME);
|
||||||
|
A(FILE_ACTION_RENAMED_NEW_NAME);
|
||||||
|
A(FILE_LIST_DIRECTORY);
|
||||||
|
A(FILE_FLAG_BACKUP_SEMANTICS);
|
||||||
|
A(SHGFP_TYPE_CURRENT);
|
||||||
|
A(SHGFP_TYPE_DEFAULT);
|
||||||
|
A(PIPE_ACCESS_INBOUND);
|
||||||
|
A(FILE_FLAG_FIRST_PIPE_INSTANCE);
|
||||||
|
A(PIPE_TYPE_BYTE);
|
||||||
|
A(PIPE_READMODE_BYTE);
|
||||||
|
A(PIPE_WAIT);
|
||||||
|
A(PIPE_REJECT_REMOTE_CLIENTS);
|
||||||
|
A(HANDLE_FLAG_INHERIT);
|
||||||
|
A(HANDLE_FLAG_PROTECT_FROM_CLOSE);
|
||||||
|
A(VK_RMENU);
|
||||||
|
A(DONT_RESOLVE_DLL_REFERENCES);
|
||||||
|
A(LOAD_LIBRARY_AS_DATAFILE);
|
||||||
|
A(LOAD_LIBRARY_AS_IMAGE_RESOURCE);
|
||||||
|
A(INFINITE);
|
||||||
|
A(REG_QWORD);
|
||||||
|
A(ERROR_SUCCESS);
|
||||||
|
A(ERROR_MORE_DATA);
|
||||||
|
A(ERROR_NO_MORE_ITEMS);
|
||||||
|
A(ERROR_FILE_NOT_FOUND);
|
||||||
|
A(ERROR_GEN_FAILURE);
|
||||||
|
A(ERROR_INSUFFICIENT_BUFFER);
|
||||||
|
A(ERROR_BAD_COMMAND);
|
||||||
|
A(ERROR_INVALID_DATA);
|
||||||
|
A(ERROR_NOT_READY);
|
||||||
|
A(ERROR_SHARING_VIOLATION);
|
||||||
|
A(ERROR_LOCK_VIOLATION);
|
||||||
|
A(ERROR_ALREADY_EXISTS);
|
||||||
|
A(ERROR_BROKEN_PIPE);
|
||||||
|
A(ERROR_PIPE_BUSY);
|
||||||
|
A(NormalHandle);
|
||||||
|
A(ModuleHandle);
|
||||||
|
A(IconHandle);
|
||||||
|
|
||||||
|
A(KF_FLAG_DEFAULT);
|
||||||
|
A(KF_FLAG_FORCE_APP_DATA_REDIRECTION);
|
||||||
|
A(KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET);
|
||||||
|
A(KF_FLAG_FORCE_PACKAGE_REDIRECTION);
|
||||||
|
A(KF_FLAG_NO_PACKAGE_REDIRECTION);
|
||||||
|
A(KF_FLAG_FORCE_APPCONTAINER_REDIRECTION);
|
||||||
|
A(KF_FLAG_NO_APPCONTAINER_REDIRECTION);
|
||||||
|
A(KF_FLAG_CREATE);
|
||||||
|
A(KF_FLAG_DONT_VERIFY);
|
||||||
|
A(KF_FLAG_DONT_UNEXPAND);
|
||||||
|
A(KF_FLAG_NO_ALIAS);
|
||||||
|
A(KF_FLAG_INIT);
|
||||||
|
A(KF_FLAG_DEFAULT_PATH);
|
||||||
|
A(KF_FLAG_NOT_PARENT_RELATIVE);
|
||||||
|
A(KF_FLAG_SIMPLE_IDLIST);
|
||||||
|
A(KF_FLAG_ALIAS_ONLY);
|
||||||
|
#undef A
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
// end extern "C"
|
} // end extern "C" }}}
|
||||||
} // }}}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user