2

現在のプログラムとユーザーがフォーカスしているファイルを知る必要があるアプリケーションを C# でコーディングしています。

つまり、次のような関数を書きたい:

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

現在のプログラムの実行可能ファイル名 (例: "word.exe") または実際の公式プログラム名 (例: "Microsoft Word 2007")、および現在のプログラムでユーザーが表示している現在のファイル (例: "C: \Users\Mat\Documents\essay.doc")、それぞれ。

RescueTime や SysInternals などの製品は、これらのことを実行できるため、可能です。現在の番組のタイトルにフォーカスを当てることはできますが、一部の番組ではタイトルに番組名が含まれていないため、これでは十分ではありません。

それで、そのような関数をコーディングする方法を知っている人はいますか? 私が見るべきヒントや場所はありますか?

注: 私は SysInternal を調べました。まだ無料ですが、Microsoft が買収したため、ソース コードは入手できなくなりました。

〜マット

4

4 に答える 4

1

GetForgoundWindowを使用して、現在のウィンドウにフォーカスを当てることができます。開いているファイルを取得する方法がわかりません。

于 2010-03-11T00:50:37.883 に答える
1

開いているすべてのハンドルを列挙することができます。これにより、ファイルの名前が得られます (または、プロセスに複数のファイルがある可能性があるため、開いているすべてのファイル)。

于 2010-03-11T00:51:18.790 に答える
1
    [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 "";
    }
于 2016-07-12T06:57:44.277 に答える
0

GetForegroundWindowが必要な場合は、そこからアプリケーションのメイン モジュールを取得できます (通常は、それを起動したアプリケーションになります)。

開いているドキュメントを見つけるためにどのリソースを使用しているかを判断できるかもしれませんが、それは非常に手作業のプロセスになります。

于 2010-03-11T00:51:56.963 に答える