Объекты являются данными с присоединенными методами, закрытия являются функциями с присоединенными данными.
def make_counter():
i = 0
def counter(): # counter() is a closure
nonlocal i
i += 1
return i
return counter
c1 = make_counter()
c2 = make_counter()
print (c1(), c1(), c2(), c2())
# -> 1 2 1 2
Короткий ответ - нет, потому что когда вы получаете событие перетаскивания ( или DragEnter и т. д.) исходный объект перетаскивания может быть где угодно. Это могло быть в другом процессе. Это могло быть в машинном коде. Он может быть даже на другой машине, если протокол, подобный RDP, достаточно сложен для его обработки. Другими словами, нет никакой гарантии, что управляемый DoDragDrop даже был вызван, и если это так, нет никакой гарантии, что он был вызван из этого процесса.