Wscript.Shell.Sendkeys глотает буквы случайным образом при использовании вместе с AppActivate - PullRequest
1 голос
/ 14 октября 2019

Хорошо, это странное поведение, я постараюсь описать его хорошо: я написал очень короткую программу на C #, которая отправляет имена всех файлов * .png на рабочем столе в блокнот. Сначала я запускаю notepad.exe, проверяю PID в TaskManager и вводю PID в мою C # -программу (чтобы AppActivate знал, какой PID должен фокусироваться перед отправкой ключей). Затем я компилирую myprogram.cs через csc.exe и запускаю его.

Вот программа на C #:

using System;
using System.Reflection;
using System.IO;

namespace MyApp { 
    class MyClass { 
        static void Main(string[] args) { 
            Type type = Type.GetTypeFromProgID("WScript.Shell"); // Get a WScript.Shell object
            object inst = Activator.CreateInstance(type);
            object catchReturn;
            string[] myfiles = Directory.GetFiles(@"U:\Desktop", "*.png"); // Get all .png files on the Desktop
            foreach (string myfile in myfiles){
                catchReturn = (object)type.InvokeMember("AppActivate", BindingFlags.InvokeMethod, null, inst, new object[]{"7080"}); // 7080 is the PID that I looked up in Windows TaskManager
                // When I send the keys to the console instead of notepad, I comment out the line above
                catchReturn = (object)type.InvokeMember("SendKeys", BindingFlags.InvokeMethod, null, inst, new object[]{myfile + " ", true}); // I send the filename <myfile> and set SendKeys' second parameter to true
            }
        } 
    } 
}

Это то, что программа печатает в блокноте:

U:Destop\wof.png U:\Desktop\Bild1.png U:\Desktop\leipzig_koeln_freitag.png U:\Desktop\leipzig_koeln_sonntag.png U:\Desktop\npp.png U:\Desktop\eztwain.png 

Первый png - это на самом деле wolf.png, а не wof.png. И, очевидно, это U: \ Desktop, а не U: Destop. Письма случайно проглатываются. Если я снова выполню программу, другие буквы будут проглочены.

Однако , если я опущу AppActivate (то есть, я печатаю имена .png в консоль, которая вызывает myprogram.exe ), ни одна буква не проглатывается!

Мне особенно интересно, почему буквы проглатываются в случайных позициях вместо, например, только первых x символов?

...