是否可以将焦点设置在另一个应用程序的文本框上(使用其 ClassName)。我的窗口句柄是IntPtr. 但只需要一些关于可用于此功能/API 的指导!
问题是,我使用SetForegroundWindowAPI 来获取窗口焦点,但它不允许我发送Ctrl+L键来聚焦于文本框!
任何帮助都会很棒!
我试图完成这个但是没有取得好成绩.我使用GetForegroundWindow(),AttachThreadInput(uint,uint,bool)和GetFocus()函数将字符串发送到另一个窗口.它适用于记事本,写字板和其他应用程序,但不适用于Microsoft Word.
int foregroundWindowHandle = GetForegroundWindow();
uint remoteThreadId = GetWindowThreadProcessId(foregroundWindowHandle, 0);
uint currentThreadId = GetCurrentThreadId();
bool b = AttachThreadInput(remoteThreadId, currentThreadId, true);
int focused = GetFocus();
int d = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
b = AttachThreadInput(remoteThreadId, currentThreadId, false);
SendMessage(focused , WM_GETTEXT, builder.Capacity, builder);
clip = builder.ToString();
//Text operations...
SendMessage(focused, WM_SETTEXT, 0, builder);
Run Code Online (Sandbox Code Playgroud)
这是我的代码,但它不适用于Word.我知道Word使用自定义控件,但我认为应该有另一种方法来处理它.
例如:Windows语音识别将文本发送到每个具有焦点的应用程序,即使它是Word.我不认为他们手动输入.
我想使用SendInputs函数,但我不知道如何做到这一点.
我使用PostMessage来模拟后台程序中的击键.除了需要在物理键盘上移位的字符外,它工作正常.我如何模拟班次?"
我使用的代码大致是:
VK vk = VkKeyScanEx (c, GetKeyboardLayout (0));
AttachThreadInput (_attachedThredId, _attachedProcessId, true);
PostMessage (_window, WM_KEYDOWN, vk.key, 0x1);
PostMessage (_window, WM_KEYUP, vk.key, 0xC0010001);
AttachThreadInput (_attachedThredId, _attachedProcessId, false);
Run Code Online (Sandbox Code Playgroud)
我该如何处理VK的扩展部分?
编辑
我正在尝试创建一个屏幕键盘.屏幕键盘上的每个按钮都模拟一系列击键.接收器是一个旧程序,根据执行的键盘顺序执行不同的任务.键盘序列如下
其中{ESC}模拟按下Esc键,NN是十六进制值,§/½让程序听.
通常我们有特殊的物理键盘来控制程序,但它们很昂贵.因此,在我们并不总是拥有物理键盘的测试环境中,我们必须手动输入这些代码