如何从delphi中的字符串中获取虚拟键码

时间:2014-07-04 10:04:55

标签: delphi winapi

我使用以下代码执行击键事件:

keybd_event(VK_Tab, 0, KEYEVENTF_KEYDOWN, 0);
keybd_event(VK_Tab, 0, KEYEVENTF_KEYUP, 0);

我有一个字符串。让我们说“Hello World 123”。

我需要使用虚拟键击在标记的编辑中键入字符串。下面的代码工作正常。但只有数字。不是字母或特殊字符。

键入的字符串也必须具有案例敏感性。

Var
Key:Char;

for I := 1 to Length(Labelededit1.Text) do
 Begin
  Key:=Labelededit1.Text[I];
  keybd_event(Ord(Key), 0, KEYEVENTF_KEYDOWN, 0);
  keybd_event(Ord(Key), 0, KEYEVENTF_KEYUP, 0);
  Application.ProcessMessages;
  sleep(100);
 End;

任何帮助都会很棒。感谢

1 个答案:

答案 0 :(得分:1)

要回答您提出的问题,您可以使用VkKeyScanVkKeyScanEx将字符转换为虚拟键码。除了键码之外,这些函数还返回键入字符所需的shift状态。

如果您要执行此操作,则需要停止使用keybd_event并切换到SendInput,原因在于这些功能的文档中所述的原因。如果您使用keybd_event,那么您可能会发现您的虚假输入消息与实际消息交错。或者其他人的虚假输入消息。 SendInput的整个存在理由是避免这种情况。

您将面临的另一个问题是您的方法只适用于可以在活动键盘布局上键入的字符。例如,你的方法不会让你在我的键盘上键入 raison d'être,因为我有一个英国键盘。尝试使用您的方法键入键盘上找不到的字符将会非常困难。

所以,我认为对你来说最好的建议是回到绘图板并寻找问题的其他解决方案。 UI Automation似乎更适合您的问题。