Los cursores OEM son recursos compartidos, por lo que todos los procesos que soliciten un cursor específico recuperarán el mismo identificador. Una aplicación puede almacenar en caché los identificadores de cursor del sistema estándar al inicio, luego puede usar GetCursorInfo para obtener el control del cursor global y buscar este manejador en la memoria caché para recuperar tipo - si se trata de un cursor del sistema.
El siguiente código de muestra Delphi se muestra. Los identificadores de cursor se completan en una matriz utilizando LoadImage en la creación del formulario. Un temporizador urnas el cursor global utilizando GetCursorInfo a intervalos regulares, el código se ve arriba del mango de la matriz para recuperar el nombre del cursor de una matriz constante de nombres:
const
HighCursor = 13;
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
FCursorHandles: array [0..HighCursor] of HCURSOR;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
OEMCursors: array [0..HighCursor] of Integer = (OCR_NORMAL, OCR_IBEAM,
OCR_WAIT, OCR_CROSS, OCR_UP, OCR_SIZENWSE, OCR_SIZENESW, OCR_SIZEWE,
OCR_SIZENS, OCR_SIZEALL, OCR_NO, OCR_HAND, OCR_APPSTARTING,
32651 {OCR_HELP?});
CursorNames: array [0..HighCursor] of string = ('OCR_NORMAL', 'OCR_IBEAM',
'OCR_WAIT', 'OCR_CROSS', 'OCR_UP', 'OCR_SIZENWSE', 'OCR_SIZENESW',
'OCR_SIZEWE', 'OCR_SIZENS', 'OCR_SIZEALL', 'OCR_NO', 'OCR_HAND',
'OCR_APPSTARTING', 'OCR_HELP');
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
for i := 0 to HighCursor do
FCursorHandles[i] := LoadImage(0, MakeIntResource(OEMCursors[i]),
IMAGE_CURSOR, 0, 0, LR_DEFAULTCOLOR or LR_DEFAULTSIZE or LR_SHARED);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
function GetCursorName(Cursor: HCURSOR): string;
var
i: Integer;
begin
for i := 0 to HighCursor do
if Cursor = FCursorHandles[i] then begin
Result := CursorNames[i];
Exit;
end;
Result := 'Unknown Cursor'; // A custom cursor.
end;
var
CursorInfo: TCursorInfo;
begin
CursorInfo.cbSize := SizeOf(CursorInfo);
if GetCursorInfo(CursorInfo) then
Label1.Caption := GetCursorName(CursorInfo.hCursor)
else
Label1.Caption := 'Fail: ' + SysErrorMessage(GetLastError);
end;
Tenga en cuenta que cuando se utiliza Delphi no lo hace tiene que guardar en la memoria caché los controles del cursor, ya que Delphi lo hace a través de su lista Screen.Cursors. El código de muestra no lo usa para tener una mejor portabilidad.
También tenga en cuenta que no hay 'OCR_HELP' en 'winuser.h', pero la constante proporcionada correspondiente a 'IDC_HELP' parece funcionar bien (aunque no pude encontrar un diálogo en W7 que hace uso de la "Ayuda Seleccione "cursor".
parecer no es posible :( – Alex
TNX para responder a su pregunta 3 años más tarde - en realidad me ayudó :) – barakcaf