如何生成在非窗体应用程序按键(How do I generate keystrokes in a n

2019-09-16 09:33发布

所以我有一个庞大的计划,并决定我应该做的在一个单独的线程中运行的方法之一。 所以,我把方法在一个单独的类,激活它的窗体上。 似乎我怎么想它,直到它得到分开它给了我这个错误只是工作:

因为应用程序不处理Windows消息的SendKeys不能在此应用程序内运行。 或者更改应用程序来处理消息,或者使用SendKeys.SendWait方法。

我试图寻找答案在线。 我觉得我看到的东西如何的SendKeys只在一个表格什么的工作。

谁能告诉我一个方法来模拟,而无需使用的SendKeys击键,或一种方式来获得的SendKeys以不同的,非形式线程工作的?

Answer 1:

控制台应用程序需要一个消息循环。 这是通过实现应用级。 您将需要调用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
    }
}


Answer 2:

我知道这不是一个答案,但我该如何使用使用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机器来执行。



文章来源: How do I generate keystrokes in a non-form application