C++ 是否可以在windows系统范围内动态更改插入符号(文本光标)?

C++ 是否可以在windows系统范围内动态更改插入符号(文本光标)?,c++,window,caret,C++,Window,Caret,我想在windows中动态更改插入符号(文本光标),并且独立于应用程序(系统范围) 我是说这个: 但我不知道是否有可能制造出这样的实用工具 我在谷歌发现的唯一一个方法是调整注册表以更改插入符号 但一旦它在注册表中被更改,我必须重新启动我的计算机 我不想重新启动计算机以更改插入符号 是否可以在不重新启动的情况下在windows中更改插入符号sybol?如果您使用的是delphi,则可以 function GetCaretPosition(var APoint: TPoint): Boolean;

我想在windows中动态更改插入符号(文本光标),并且独立于应用程序(系统范围)

我是说这个:

但我不知道是否有可能制造出这样的实用工具

我在谷歌发现的唯一一个方法是调整注册表以更改插入符号

但一旦它在注册表中被更改,我必须重新启动我的计算机

我不想重新启动计算机以更改插入符号


是否可以在不重新启动的情况下在windows中更改插入符号sybol?

如果您使用的是delphi,则可以

function GetCaretPosition(var APoint: TPoint): Boolean;
var w: HWND;
  aID, mID: DWORD;
begin
  Result:= False;
  w:= GetForegroundWindow;
  if w <> 0 then
  begin
    aID:= GetWindowThreadProcessId(w, nil);
    mID:= GetCurrentThreadid;
    if aID <> mID then
    begin
      if AttachThreadInput(mID, aID, True) then
      begin
        w:= GetFocus;
        if w <> 0 then
        begin
          Result:= GetCaretPos(APoint);
          ClientToScreen(w, APoint);
        end;
        AttachThreadInput(mID, aID, False);
      end;
    end;
  end;
end;


//Small demo: set cursor to active caret position
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Clear();
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Pt: TPoint;
begin
  if GetCaretPosition(Pt) then
  begin
    ListBox1.Items.Add(Format('Caret position %d %d', [Pt.x, Pt.y]));
//    SetCursorPos(Pt.X, Pt.Y);
  end;
end;

end.
函数GetCaretPosition(var APoint:TPoint):布尔值; 变量w:HWND; 援助,中:德沃德; 开始 结果:=假; w:=GetForegroundWindow; 如果w0那么 开始 aID:=GetWindowThreadProcessId(w,nil); mID:=GetCurrentThreadid; 如果援助在那时中期 开始 如果AttachThreadInput(mID、aID、True),则 开始 w:=GetFocus; 如果w0那么 开始 结果:=GetCaretPos(APoint); 客户端到屏幕(w,APoint); 结束; AttachThreadInput(mID、aID、False); 结束; 结束; 结束; 结束; //小演示:将光标设置为活动插入符号位置 程序TForm1.按钮1单击(发送方:TObject); 开始 ListBox1.Items.Clear(); 结束; 程序TForm1.Timer1Timer(发送方:TObject); 变量 Pt:TPoint; 开始 如果GetCaretPosition(Pt),则 开始 ListBox1.Items.Add(格式('Caret position%d%d',[Pt.x,Pt.y]); //SetCursorPos(第X部分,第Y部分); 结束; 结束; 结束。
在这个问题上加上“delphi”或“c”之类的语言。这将帮助你得到更具体的答案。