相关疑难解决方法(0)

P/Invoke SetFocus 到特定控件

是否可以将焦点设置在另一个应用程序的文本框上(使用其 ClassName)。我的窗口句柄是IntPtr. 但只需要一些关于可用于此功能/API 的指导!

问题是,我使用SetForegroundWindowAPI 来获取窗口焦点,但它不允许我发送Ctrl+L键来聚焦于文本框!

任何帮助都会很棒!

.net c# pinvoke winapi setfocus

5
推荐指数
1
解决办法
1万
查看次数

如何将字符串发送到其他应用程序,包括Microsoft Word

我试图完成这个但是没有取得好成绩.我使用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函数,但我不知道如何做到这一点.

c# windows winapi sendmessage sendinput

2
推荐指数
1
解决办法
8838
查看次数

创建一个屏幕键盘

我使用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} {NN ESC} NN
  • {} ESC NN
  • ½NN
  • §NN

其中{ESC}模拟按下Esc键,NN是十六进制值,§/½让程序听.

通常我们有特殊的物理键盘来控制程序,但它们很昂贵.因此,在我们并不总是拥有物理键盘的测试环境中,我们必须手动输入这些代码

c# c++ winapi

1
推荐指数
1
解决办法
4151
查看次数

标签 统计

c# ×3

winapi ×3

.net ×1

c++ ×1

pinvoke ×1

sendinput ×1

sendmessage ×1

setfocus ×1

windows ×1