I do not have Windows, but from what I remember, you'll need to have a window's handle (either for the shell Window or for some graphical one e.g. WinForms or others). Then try to check the WM_DROPFILES message or better, ole2.h's RegisterDragDrop and via pDropTarget try to retrieve the sent path.
For WM_DROPFILES you can take an inspiration from SDL2's codebase in SDL_windowsevents.c
case WM_DROPFILES:
{
UINT i;
HDROP drop = (HDROP) wParam;
UINT count = DragQueryFile(drop, 0xFFFFFFFF, NULL, 0);
for (i = 0; i < count; ++i) {
SDL_bool isstack;
UINT size = DragQueryFile(drop, i, NULL, 0) + 1;
LPTSTR buffer = SDL_small_alloc(TCHAR, size, &isstack);
if (buffer) {
if (DragQueryFile(drop, i, buffer, size)) {
char *file = WIN_StringToUTF8(buffer);
SDL_SendDropFile(data->window, file);
SDL_free(file);
}
SDL_small_free(buffer, isstack);
}
}
SDL_SendDropComplete(data->window);
DragFinish(drop);
return 0;
}
break;
which uses WIN_WindowProc() in this manner:
Initialize WNDCLASSEX struct:
WNDCLASSEX wcex;
// fill its members and this one for event handling:
wcex.lpfnWndProc = WIN_WindowProc;
then register it with RegisterClassEx(&wcex).
Of course, that's just C/C++ code. You'll either need to find translated or otherwise linked members of the libraries in pywin32 or use something that can access the libraries in a way you need, such as ctypes or Cython.
Other resources: