【发布时间】:2014-07-14 00:57:49
【问题描述】:
我有一个程序使用系统范围的热键 Ctrl+Shift+用户选择的键 将文本粘贴到剪贴板通过发送 Ctrl+V 组合使用 SendInput 使用 here。这在大多数程序中都可以正常工作。但是在新电子邮件的收件人字段中的 Outlook 中,我尝试的每个键最终都会弹出“将项目移动到文件夹”Outlook 对话框,该对话框应该是 Ctrl+Shift+V 组合键。在 Body 字段中没有任何反应。有什么想法吗?请参阅下面的重现代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
If not RegisterHotkey( Handle, 1, MOD_SHIFT or MOD_CONTROL, Ord('P') ) Then
ShowMessage('Error');
end;
Procedure TForm1.WMHotkey( Var msg: TWMHotkey );
var
KeyInputs: array of TInput;
procedure KeybdInput(VKey: Byte; Flags: DWORD);
begin
SetLength(KeyInputs, Length(KeyInputs)+1);
KeyInputs[high(KeyInputs)].Itype := INPUT_KEYBOARD;
with KeyInputs[high(KeyInputs)].ki do
begin
wVk := VKey;
wScan := MapVirtualKey(wVk, 0);
dwFlags := Flags;
end;
end;
Begin
If (msg.HotKey > 0) And (msg.HotKey < 2) Then
Begin
Clipboard.AsText:= 'Some text';
KeybdInput(VK_CONTROL, 0); // Ctrl
KeybdInput(Ord('V'), 0);
KeybdInput(Ord('V'), KEYEVENTF_KEYUP);
KeybdInput(VK_CONTROL, KEYEVENTF_KEYUP); // Ctrl
SendInput(Length(KeyInputs), KeyInputs[0], SizeOf(KeyInputs[0]));
end
End;
【问题讨论】:
-
使用自动化可能更容易
-
我的软件适用于任何允许粘贴文本的程序,因此自动化不实用。我刚刚注意到这种 SendInput 技术在 Outlook 中不起作用。
-
我认为如果您添加了一个好的 SSCCE,那么有人会提供帮助。如果我可以不费吹灰之力地进行复制,那么我会更倾向于提供帮助。就目前而言,我必须投入时间进行复制。事实上,每个潜在的帮助者都需要这样做。也许这一步已经足够了。
标签: delphi outlook delphi-xe hotkeys sendinput