В GetCursor() API есть ограничение в том, что этого нет по умолчанию, возвращение дескриптора текущего курсор, когда курсор принадлежит другому потоку. В данной статье демонстрируется способ извлечения
текущее курсора независимо от того, какой поток принадлежит. Например, если вы хотите включить изображение курсора в захват экрана.
Code: |
function GetCursorHandle: HCURSOR; var hWindow: HWND; pt: TPoint; pIconInfo: TIconInfo; dwThreadID, dwCurrentThreadID: DWORD; begin // Find out which window owns the cursor // Das zum Mauszeiger zugehцrige Fenster finden GetCursorPos(pt); hWindow := WindowFromPoint(pt);
// Get the thread ID for the cursor owner. // Thread ID des Fensters ermitteln dwThreadID := GetWindowThreadProcessId(hWindow, nil);
// Get the thread ID for the current thread // Thread ID fьr den aktuellen Thread ermitteln 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
// Wenn der Mauszeiger zu einem anderen Thread gehцrt, mьssen wir // an den anderen Thread anhдngen.
if (dwCurrentThreadID <> dwThreadID) then begin if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then begin // Das Handle des Mauszeigers ermitteln // Get the handle to the cursor Result := GetCursor; AttachThreadInput(dwCurrentThreadID, dwThreadID, False); end; end else begin Result := GetCursor; end; end;
procedure TForm1.Button1Click(Sender: TObject); var CurPosX, CurPoxY: Integer; MyCursor: TIcon; pIconInfo: TIconInfo; begin MyCursor := TIcon.Create; try MyCursor.Handle := GetCursorHandle; // Retrieves information about the specified cursor. // Informationen ьber den Mauszeiger auslesen GetIconInfo(MyCursor.Handle, pIconInfo); CurPosX := pIconInfo.xHotspot; CurPoxY := pIconInfo.yHotspot; // Draw the Cursor on the form // Den Mauszeiger auf die Form zeichnen Canvas.Draw(CurPoxY, CurPoxY, MyCursor); finally MyCursor.ReleaseHandle; MyCursor.Free; end; end;
// Another Solution: // Andere Mцglichkeit:
procedure TForm1.Timer1Timer(Sender: TObject); var CI: TCursorInfo; begin CI.cbSize := SizeOf(CI); GetCursorInfo(CI); Image1.Picture.Icon.Handle := CI.hCursor; end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!