В некоторых случаях для получения идентификатора иконки курсора достаточно вызвать функцию WinApi GetCursor. Но в случае когда курсор находится не над окном нашей программы, сначала нужно подключиться к процессу-родителю окна, над которым сейчас курсор. Функция на Delphi GetCursorInfoWithIcon возвращает данные курсора вместе с идентификатором его иконки.
//получаем данные курсора вместе с идентификатором иконки курсора
function GetCursorInfoWithIcon: TCursorInfo;
var
hWindow: HWND;
pt: TPoint;
dwThreadID, dwCurrentThreadID: DWORD;
begin
//начальное значение идентификатор
Result.hCursor := 0;
ZeroMemory(@Result, SizeOf(Result));
// Определяем, над каким окном сейчас находится курсор
//получаем координаты курсора мыши
if GetCursorPos(pt) then
begin
Result.ptScreenPos := pt;
//определяем идентификатор окна под курсором
hWindow := WindowFromPoint(pt);
if IsWindow(hWindow) then
begin
// Получаем идентификатор потока процесса, который имеет это окно
dwThreadID := GetWindowThreadProcessId(hWindow, nil);
// сравниваем этот идентификатор с нашим
dwCurrentThreadID := GetCurrentThreadId;
// если курсор не над нашим окном, то подключаемся к потоку-владельцу курсора
if (dwCurrentThreadID <> dwThreadID) then
begin
if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then
begin
// получаем идентификатор иконки курсора
Result.hCursor := GetCursor;
AttachThreadInput(dwCurrentThreadID, dwThreadID, False);
end;
end
else
begin
//если окно наше, то сразу получаем идентификатор иконки
Result.hCursor := GetCursor;
end;
end;
end;
end;
Пример использования:
…
var
CursorInfo: TCursorInfo;
begin
CursorInfo := GetCursorInfoWithIcon;
Image1.Picture.Icon.Handle := CursorInfo.hCursor;
…
Раньше сателлитами называли сайты, помогающие продвижению основного. Теперь сателлит — это просто небольшой сайт, зачастую сделанный для продажи ссылок.