Текущее имя программы / файла в фокусе (Windows) - PullRequest
2 голосов
/ 11 марта 2010

Я кодирую приложение на C #, которое должно знать текущую программу и файлы, которые находятся в фокусе пользователя.

т.е. Я хочу написать такие функции, как:

string GetProgramNameCurrentlyInFocus() { ... }
string GetFilenameCurrentlyInFocus() { ... }

которые возвращают текущее имя исполняемого файла программы (например, «word.exe») или фактическое официальное имя программы (например, «Microsoft Word 2007»), а также текущий файл, который просматривает пользователь с текущей программой (например, "C: \ Users \ Mat \ Documents \ essay.doc") соответственно.

Такие продукты, как RescueTime и SysInternals, могут выполнять эти функции, чтобы это было возможно. Я могу выделить название текущей программы, но этого недостаточно, поскольку некоторые программы не произносят название программы в заголовке.

Итак, кто-нибудь знает, как кодировать подобные функции? Любые советы или места, которые я должен искать?

Примечание: я проверил SysInternal, и, несмотря на то, что все еще свободен, исходный код больше не доступен, так как Microsoft выкупила их.

~ Mat

Ответы [ 4 ]

1 голос
/ 12 июля 2016
    [DllImport("user32.dll")]
    private static extern IntPtr GetForegroundWindow();/
    public static string GetForegroundWindowsName()
    {
        Process[] allproc = Process.GetProcesses();
        IntPtr ii = GetForegroundWindow();
        foreach (Process proc in allproc)
        {
            if (ii == proc.MainWindowHandle)
            {
                return proc.ProcessName;
            }
        }
        return "";
    }
1 голос
/ 11 марта 2010

Можно перечислить все открытых дескрипторов . Это даст имя файла (или, скорее, все открытые файлы, так как процесс может иметь более одного).

1 голос
/ 11 марта 2010

Вы можете использовать GetForgoundWindow , чтобы получить текущее окно в фокусе. Я не знаю, как узнать, какой файл открыт.

0 голосов
/ 11 марта 2010

Вы хотите GetForegroundWindow , тогда оттуда вы можете получить основной модуль для приложения (которое будет , как правило, приложением, которое его запустило).

Возможно, вы сможете определить, какие ресурсы используются для поиска открытых документов, но это будет процесс очень сложный.

...