gpt4 book ai didi

delphi - 移动远程访问窗口时按下 Ctrl 键

转载 作者:行者123 更新时间:2023-12-03 17:18:56 25 4
gpt4 key购买 nike

我有以下问题:我有一个应用程序,其中 Ctrl 键激活
应用程序事件,并且一些用户使用 RDP(远程访问)来使用该应用程序,
问题是每次触发 Ctrl 键
用户移动 RDP 窗口或应用程序开关并返回 RDP 的时间。
例如:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = VK_CONTROL) then
ShowMessage('Ctrl Pressed');
end;

我能够看到应用程序检测到 WM_KEYUP 消息并对其进行处理,
最终触发 OnKeyUp 事件
使用参数 17 (Ctrl),模拟按下 Ctrl 键。
我想知道是否有人知道这种行为是否是 Delphi/RDP 中的错误,如果
它有任何可能的解决方案。
我正在使用 Delphi 10 西雅图
enter image description here

最佳答案

看起来windows会发送按键来清除修饰键状态。一种解决方案是确保在采取行动之前先下跌。
仍然 CTRL 也用于切换桌面(除其他外),并且 CTRL-Win+Arrow 将在切换桌面时触发对话框,因此可能需要添加更多保护代码。

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
TForm1 = class(TForm)
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
CtrlDown : boolean;
public
{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = VK_CONTROL) then CtrlDown := true;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = VK_CONTROL) and CtrlDown then
begin
ShowMessage('Ctrl Pressed');
CtrlDown := false;
end;
end;

end.

关于delphi - 移动远程访问窗口时按下 Ctrl 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64213808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com