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