如何在非表单应用程序中生成击键
本文关键字:应用程序 表单 | 更新日期: 2023-09-27 18:30:16
所以我有一个庞大的程序,并决定我应该让其中一个方法在单独的线程中运行。所以我把方法放在一个单独的类中,在我的窗体上激活它。它似乎按照我想要的方式工作,直到它到达它给我这个错误的地方:
发送密钥无法在此应用程序内运行,因为应用程序 不处理 Windows 消息。 将应用程序更改为 处理消息,或使用 SendKeys.SendWait 方法。
我试着在网上寻找答案。我想我看到了一些关于SendKeys如何在表单或其他东西中工作的东西。
谁能告诉我一种不使用 SendKeys 来模拟击键的方法,或者一种让 SendKeys 在不同的非表单线程中工作的方法?
控制台应用程序需要一个消息循环。这是通过应用程序类完成的。您将需要调用 Application.Run(ApplicationContext)。
class MyApplicationContext : ApplicationContext
{
[STAThread]
static void Main(string[] args)
{
// Create the MyApplicationContext, that derives from ApplicationContext,
// that manages when the application should exit.
MyApplicationContext context = new MyApplicationContext();
// Run the application with the specific context. It will exit when
// the task completes and calls Exit().
Application.Run(context);
}
Task backgroundTask;
// This is the constructor of the ApplicationContext, we do not want to
// block here.
private MyApplicationContext()
{
backgroundTask = Task.Factory.StartNew(BackgroundTask);
backgroundTask.ContinueWith(TaskComplete);
}
// This will allow the Application.Run(context) in the main function to
// unblock.
private void TaskComplete(Task src)
{
this.ExitThread();
}
//Perform your actual work here.
private void BackgroundTask()
{
//Stuff
SendKeys.Send("{RIGHT}");
//More stuff here
}
}
我知道
这不是答案,而是我过去使用 ActiveX 和脚本的方式
Set ws = CreateObject("WScript.Shell")
str = "Hi there... ~ Dont click your mouse while i am typing." & _
" ~~This is a send key example, using which you can send your keystrokes"
ws.Run("notepad.exe")
WScript.Sleep(1000)
For c=1 To Len(str)
WScript.Sleep(100) 'Increase the value for longer delay
ws.SendKeys Mid(str,c,1)
Next
将此代码另存为file.vbs
,然后双击以在Windows计算机中执行。