1

好的,这是一种奇怪的行为,我会尽力描述它:我编写了一个非常短的 C# 程序,它将我桌面上所有 *.png 文件的名称发送到记事本。首先,我启动 notepad.exe,在 TaskManager 中检查 PID,然后将 PID 输入到我的 C# 程序中(以便 AppActivate 知道在发送密钥之前它应该关注哪个 PID)。然后我通过 csc.exe编译myprogram.cs并执行它。

这是 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 个字符?

4

0 回答 0