- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以将焦点设置在另一个应用程序的文本框上(使用其类名)。我将窗口句柄作为 IntPtr
。但只需要一些关于哪些功能/API 可用于此的指导!
问题是,我使用 SetForegroundWindow
API 获取窗口焦点,但它不允许我发送 Ctrl+L
键来聚焦文本框!
任何帮助都会很棒!
最佳答案
...据我所知,这是我必须使用的代码才能完成这项工作——它在我的应用程序和较新的 Windows 等上运行良好。
void SetFocus(IntPtr hwndTarget, string childClassName)
{
// hwndTarget is the other app's main window
// ...
IntPtr targetThreadID = WindowsAPI.GetWindowThreadProcessId(hwndTarget, IntPtr.Zero); //target thread id
IntPtr myThreadID = WindowsAPI.GetCurrentThread(); // calling thread id, our thread id
try
{
bool lRet = WindowsAPI.AttachThreadInput(myThreadID, targetThreadID, -1); // attach current thread id to target window
// if it's not already in the foreground...
lRet = WindowsAPI.BringWindowToTop(hwndTarget);
WindowsAPI.SetForegroundWindow(hwndTarget);
// if you know the child win class name do something like this (enumerate windows using Win API again)...
var hwndChild = EnumAllWindows(hwndTarget, childClassName).FirstOrDefault();
if (hwndChild == IntPtr.Zero)
{
// or use keyboard etc. to focus, i.e. send keys/input...
// SendInput (...);
return;
}
// you can use also the edit control's hwnd or some child window (of target) here
WindowsAPI.SetFocus(hwndChild); // hwndTarget);
}
finally
{
bool lRet = WindowsAPI.AttachThreadInput(myThreadID, targetThreadID, 0); //detach from foreground window
}
}
...所以按照这些思路进行操作(它按正确的顺序执行您需要的操作,不要忘记分离等 - 但您需要根据您的特定条件调整它,控制/编辑 hwnd 等. – 你仍然可能有与目标窗口/应用程序相关的其他问题,这适用于大多数情况,但并非在所有情况下,这是一个很长的故事,正如我所说,取决于你的具体情况),
(WindowsAPI
我相信是典型的 P/Invoke 包装器)基本上你需要附加到另一个线程来进行“输入”操作,我相信这是官方解释“这也允许线程共享它们的输入状态,因此它们可以调用 SetFocus 函数将键盘焦点设置到不同线程的窗口。”谷歌“AttachThreadInput”获取更多信息(了解原因),它也经常与 SetFocus
和其他输入/键盘操作相关联。此外,自动化 API 可以按照建议提供帮助——这是“最干净”的方法——但取决于目标应用程序是否正确公开和处理它——对于大多数应用程序来说仍然“不存在”,不一致等——如果您想处理与那时不同的“自己的应用程序”,您需要问自己什么是最佳方案等。希望这有帮助
注意:必须有十几个类似解决方案的链接(以及 SO),因为这是众所周知的事情,但我找不到正确的链接
该代码是此规范的示例。案例并基于工作代码——但可能需要测试和制定一些细节(这似乎超出了这个问题的范围),例如……WindowsAPI
持有 Windows API 和 native 调用的 P/Invoke 签名(类似于 MS.Win32.UnsafeNativeMethods
)并且它是一个静态类(参见该类或 https://pinvoke.net/ – 也 Accessing Microsoft.Win32.UnsafeNativeMethods? ),应命名为 (Safe/Unsafe)NativeMethods ( https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2015/code-quality/ca1060-move-p-invokes-to-nativemethods-class ) – 另见 IntPtr, SafeHandle and HandleRef - Explained (IntPtr
有点“老”风格)EnumAllWindows
使用 EnumChildWindows
和 GetClassName
Win API(我猜这是另一个问题)并且需要一个包装方法它很有用(EnumAllWindows
是——它只是通过窗口递归地枚举检查类名)。
关于c# - P/Pnvoke SetFocus 到一个特定的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9503027/
我有一个小型计时器应用程序和名为 etH、etM 和 etS 的 EditText 小部件,它们允许输入并显示时间。单击开始按钮并启动计时器时,我通过执行以下操作来禁止交互: btnS.setOnCl
eT = (EditText) findViewById(R.id.searchAutoCompleteTextView_feed); eT.setFocusable(false);
我正在开发 Eclipse RCP 应用程序。在扩展 MultiPageEditorPart 的类中,我试图将焦点设置到文本字段。但是 setFocus 方法总是返回 false。 我做错了什么? M
我有一个包含多个自定义控件的程序。这些自定义控件之一是文本输入控件。由于单击窗口时窗口不会自动接收键盘焦点,因此我在我的程序中创建了一个鼠标 Hook ,当用户单击该窗口时,它会在该窗口上调用 Set
我正在尝试将焦点设置在文本框上。 SetFocus(txtUserName); 我在网页上没有看到任何变化。 .Focus()有什么区别和 SetFocus()每个的功能是什么? 最佳答案 您可以使用
我们发现此代码可以在具有 IE、Safari 和 FireFox 的 PC 上运行。然而,在装有 Safari 的 iPad 或 iPhone 上,它不会自动聚焦于文本框。我们不能触摸屏幕并单击文本框
我正在处理一个巨大的遗留源代码,其中在许多地方调用了多个SetFocus,但有时,缺少对控件是否可见或启用的检查。 由于时间有限,而且源代码数量巨大,我决定忽略这些错误,因为重点(在我们的例子中)不是
我正在制作一个程序,允许用户在 JTextField 中输入文件路径,并在单击“查看”JButton 或按下 Enter 键时在 JTextArea 中显示文件的内容。 问题:单击“查看”按钮即可(显
嗨,我的表格上有表格。当页面加载被触发时,我将焦点设置为第一个输入[type='text']。我用ajax发布表单,如果一切顺利,我会在表格顶部添加新行。现在我无法将焦点设置到新插入的行。这是我的 j
我正在使用 Ajax ModalPopupExtender 来显示弹出面板。该面板有一个 TextBox。我想在弹出面板时 setfocus 到那个 TextBox。是否有任何方法或机制可以将焦点设置
我有一个下拉列表,它在 OnLoad() 事件上从数据库加载记录,我想在页面加载时将焦点设置在下拉框上。我尝试了很多方法来设置焦点,但它不起作用。请看下面的代码。 HTML代码如下,
我对 setFocus() 有疑问。为什么它不适用于 textBox? 这是我的代码: package com.test.test1; import com.google.gwt.user.clien
环境:Visual Studio 2008、Visual Studio Feature Pack、MFC Dialog App、Windows XP、新的公共(public)控件。 我在使用恰好位于选
我正在尝试使用 VSTGUI 4.0 实现 VST。我的 DAW 使用 WM_KEYDOWN 和 WM_KEYUP 消息根据键盘按下发送 MIDI 音符,这样您就可以用键盘播放 VST。问题是,VST
我正在实现一个自定义上下文菜单,它基本上是一个名为 gripmenu 的小部件,其中包含其他几个小部件。如果用户左键单击,则应显示此菜单。如果用户在其外部单击,要隐藏或删除它,我需要以某种方式检查用户
本文整理了Java中am.widget.zxingscanview.ZxingScanView.setFocusable()方法的一些代码示例,展示了ZxingScanView.setFocusabl
我在下面有这段代码,一切都适用于 Android 9 RespM= FindViewById(Resource.Id.RespMedius); RespM.SetFocusable(ViewFocus
据我所知,zip 中的缩小文件只是基本代码,不包含库。因此我运行了 build.sh文件,它生成了另一个缩小的文件,我已将其包含在我的脚本中。 期望: 我尝试在单击时放大标记。我有一个在事件 onMa
现在,这可能看起来是重复的,但它不是。Internet 上的每个解决方案都向您展示了如何将焦点放在触发事件的文本框上。 但是如果用户按下 Tab 键呢?应该具有焦点的文本框是下一个。因此,我们采取了一
谁能告诉我为什么我会在下面的跟踪中收到错误? “SetFocus 只能在 PreRender 之前和期间调用。” 错误消息表明必须在 PreRender 之前或期间调用“SetFocus”,并且根据跟
我是一名优秀的程序员,十分优秀!