2

我想要一个函数,它给我一个程序名称(如 msPaint 或记事本),当我使用记事本时,这个函数返回“Notepad”,当我使用 msPaint 时,这个函数返回“msPaint”。

请帮我...

4

4 回答 4

3

使用Process.GetProcesses();方法,您可以获得所有正在运行的应用程序,如果您想要当前活动窗口,请使用GetForegroundWindow()and GetWindowText()

例如点击这里

于 2013-04-17T03:56:30.863 回答
2

您可以使用 Process 类。它有一个 Modules 属性,列出了所有加载的模块。

将所有进程和所有模块列出到控制台:

Process[] processes = Process.GetProcesses();

    foreach(Process process in processes) {
    Console.WriteLine("PID:  " + process.Id);
    Console.WriteLine("Name: " + process.Name);
    Console.WriteLine("Modules:");
    foreach(ProcessModule module in process.Modules) {
        Console.WriteLine(module.FileName);
    }

或者这样做,

[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
private static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

public static void Main()
{
    int chars = 256;
    StringBuilder buff = new StringBuilder(chars);
    while (true)
    {
        // Obtain the handle of the active window.
        IntPtr handle = GetForegroundWindow();

        // Update the controls.
        if (GetWindowModuleFileName(handle, buff, chars) > 0)
        {
            Console.WriteLine(buff.ToString());
            Console.WriteLine(handle.ToString());
        }
        Thread.Sleep(1000);
    }
}
于 2013-04-17T04:02:57.710 回答
1

来自:如何从 C# 中获取进程窗口类名?

    int pidToSearch = 316;
    //Init a condition indicating that you want to search by process id.
    var condition = new PropertyCondition(AutomationElementIdentifiers.ProcessIdProperty, 
        pidToSearch);
    //Find the automation element matching the criteria
    AutomationElement element = AutomationElement.RootElement.FindFirst(
        TreeScope.Children, condition);

    //get the classname
    var className = element.Current.ClassName;
于 2013-04-17T03:59:46.487 回答
0

我不确定你是如何调用这些程序的。如果通过 Process 运行这些程序,则可以通过 ProcessName 获取。

例子:

        Process tp = Process.Start(@"notepad.exe", "temp");

        string s = tp.ProcessName;
于 2013-04-17T04:05:02.700 回答