Delphi Windows 10上TabTip.exe(虚拟键盘)的大小和位置?
需要确定windows 10上TabTip.exe(虚拟键盘)的大小(宽度、高度)和位置(左、上) 任务是移动所有组件所在的面板,以便将输入焦点转移到的输入字段位于虚拟键盘上方 使用Windows 10不在管理员权限下,但编译的项目以管理员身份运行 以下解决方案在Windows 7、Windows 8和Windows 10中均有效,但在Windows 10中它们不起作用:Delphi Windows 10上TabTip.exe(虚拟键盘)的大小和位置?,delphi,winapi,virtual-keyboard,Delphi,Winapi,Virtual Keyboard,需要确定windows 10上TabTip.exe(虚拟键盘)的大小(宽度、高度)和位置(左、上) 任务是移动所有组件所在的面板,以便将输入焦点转移到的输入字段位于虚拟键盘上方 使用Windows 10不在管理员权限下,但编译的项目以管理员身份运行 以下解决方案在Windows 7、Windows 8和Windows 10中均有效,但在Windows 10中它们不起作用: uses ..., Winapi.Windows, Winapi.Dwmapi ... procedure TForm1.S
uses ..., Winapi.Windows, Winapi.Dwmapi
...
procedure TForm1.SizeKeyboard;
var KeyBoardRect: TRect;
KeyboardWindow : HWND;
begin
KeyboardWindow := FindWindow('IPTip_Main_Window', nil);
if (KeyboardWindow <> 0) then
KeyBoardRect := GetRect1(KeyboardWindow);
...
end;
...
function TForm1.GetRect1(AKeyboardWindow : HWND): Trect;
var KeyBoardRect: Trect;
begin
GetWindowRect(AKeyboardWindow, KeyBoardRect);
Result := KeyBoardRect;
end;
function TForm1.GetRect2(AKeyboardWindow : HWND): Trect;
var KeyBoardRect: Trect;
begin
DwmGetWindowAttribute(AKeyboardWindow, DWMWA_EXTENDED_FRAME_BOUNDS, @KeyBoardRect, sizeof(KeyBoardRect));
Result := KeyBoardRect;
end;
键盘通话
function ExpandEnvironmentVar(var Value: string): Boolean;
var
R: Integer;
Expanded: string;
procedure StrResetLength(var S: string);
var
I: Integer;
begin
for I := 0 to Length(S) - 1 do
if S[I + 1] = #0 then
begin
SetLength(S, I);
Exit;
end;
end;
begin
SetLength(Expanded, 1);
R := ExpandEnvironmentStrings(PChar(Value), PChar(Expanded), 0);
SetLength(Expanded, R);
Result := ExpandEnvironmentStrings(PChar(Value), PChar(Expanded), R) <> 0;
if Result then
begin
StrResetLength(Expanded);
Value := Expanded;
end;
end;
procedure TForm1.btnCloseClick(Sender: TObject);
var
MyHandle1: THandle;
begin
MyHandle1 := FindWindow('IPTip_Main_Window', nil);
if MyHandle1 <> 0 then
PostMessage(MyHandle1, WM_SYSCOMMAND, SC_CLOSE, 0);
end;
procedure TForm1.btnOpenClick(Sender: TObject);
var
S: string;
begin
btnClose.Click;
S := '%CommonProgramW6432%\microsoft shared\ink\tabtip.exe';
ExpandEnvironmentVar(S);
ShellExecute(0, PChar('open'), PChar(S), nil, nil, SW_SHOWNORMAL);
end;
函数ExpandEnvironmentVar(var值:string):布尔值;
变量
R:整数;
扩展:字符串;
过程StrResetLength(var S:string);
变量
I:整数;
开始
对于I:=0到长度(S)-1 do
如果S[I+1]=#0,那么
开始
设定长度(S,I);
出口
结束;
结束;
开始
设置长度(扩展,1);
R:=ExpandEnvironmentString(PChar(值),PChar(扩展),0);
设定长度(展开,R);
结果:=ExpandEnvironmentStrings(PChar(值),PChar(扩展),R)0;
如果结果是这样的话
开始
StrResetLength(扩展);
值:=扩展;
结束;
结束;
程序TForm1.btnCloseClick(发送方:TObject);
变量
我的手1:THandle;
开始
MyHandle1:=FindWindow('IPTip_主窗口',无);
如果MyHandle10那么
PostMessage(MyHandle1,WM_SYSCOMMAND,SC_CLOSE,0);
结束;
程序TForm1.btnOpenClick(发送方:TObject);
变量
S:字符串;
开始
关闭。单击;
S:='%CommonProgramW6432%\microsoft shared\ink\tabtip.exe';
ExpandEnvironmentVar(S);
ShellExecute(0,PChar(“打开”),PChar(S),nil,nil,SW_SHOWNORMAL);
结束;
没有成功(左=0顶部=0宽度=0高度=0)!有人做过类似的事情吗,或者他知道该怎么做吗?您应该实施:
允许在显示或隐藏输入窗格(屏幕键盘或手写面板)时通知应用程序。这允许应用程序窗口调整其显示,以便输入窗格不会遮挡任何输入区域(如文本框)
有关详细信息和示例代码,请参阅。什么是“nothing Successed”(未成功)?函数的结果GetCurrentPropertyValue Get_CurrentBoundingRectangle left=0 top=0 width=0 height=0请在问题中提供详细信息,而不是注释%CommonProgramW6432%不应使用。键盘窗口的类名是内部实现详细信息。不使用%CommonProgramW6432%为什么不使用?TbTip.exe-没有窗口文本(GetWindowText)。我认为这与UWP应用有关
function ExpandEnvironmentVar(var Value: string): Boolean;
var
R: Integer;
Expanded: string;
procedure StrResetLength(var S: string);
var
I: Integer;
begin
for I := 0 to Length(S) - 1 do
if S[I + 1] = #0 then
begin
SetLength(S, I);
Exit;
end;
end;
begin
SetLength(Expanded, 1);
R := ExpandEnvironmentStrings(PChar(Value), PChar(Expanded), 0);
SetLength(Expanded, R);
Result := ExpandEnvironmentStrings(PChar(Value), PChar(Expanded), R) <> 0;
if Result then
begin
StrResetLength(Expanded);
Value := Expanded;
end;
end;
procedure TForm1.btnCloseClick(Sender: TObject);
var
MyHandle1: THandle;
begin
MyHandle1 := FindWindow('IPTip_Main_Window', nil);
if MyHandle1 <> 0 then
PostMessage(MyHandle1, WM_SYSCOMMAND, SC_CLOSE, 0);
end;
procedure TForm1.btnOpenClick(Sender: TObject);
var
S: string;
begin
btnClose.Click;
S := '%CommonProgramW6432%\microsoft shared\ink\tabtip.exe';
ExpandEnvironmentVar(S);
ShellExecute(0, PChar('open'), PChar(S), nil, nil, SW_SHOWNORMAL);
end;