// Find out which window owns the cursor
GetCursorPos(&pt);
hWnd = WindowFromPoint(pt);
// Get the thread ID for the cursor owner.
dwThreadID = GetWindowThreadProcessId(hWnd, NULL);
// Get the thread ID for the current thread
dwCurrentThreadID = GetCurrentThreadId();
// If the cursor owner is not us then we must attach to
// the other thread in so that we can use GetCursor() to
// return the correct hCursor
if (dwCurrentThreadID != dwThreadID) {
// Attach to the thread that owns the cursor
if (AttachThreadInput(dwCurrentThreadID, dwThreadID, TRUE)) {
// Get the handle to the cursor
hCursor = GetCursor();
// Detach from the thread that owns the cursor
AttachThreadInput(dwCurrentThreadID, dwThreadID, FALSE);
}
} else
hCursor = GetCursor();