1

Windowsマシンでアクティブなすべてのアプリケーションを一覧表示できるようにする必要があります。私はこのコードを使用していました...

  Process[] procs = Process.GetProcesses(".");
  foreach (Process proc in procs)
  {
      if (proc.MainWindowTitle.Length > 0)
      {
          toolStripComboBox_StartSharingProcessWindow.Items.Add(proc.MainWindowTitle);
      }
  }

複数のファイルがそれぞれ独自のウィンドウで開かれている場合、これにはWORDやACROREADのようなケースがリストされていないことに気付くまで。そのような状況では、上記の手法を使用して最上位のウィンドウのみが一覧表示されます。これは、2つ(またはそれ以上)のファイルが開かれていても、プロセスが1つしかないためだと思います。だから、私の質問は、基本的なプロセスではなく、すべてのウィンドウを一覧表示するにはどうすればよいかということだと思います。

4

2 に答える 2

7

user32.dllでEnumWindowsを使用してpinvokeします。このようなものはあなたが望むことをするでしょう。

public delegate bool WindowEnumCallback(int hwnd, int lparam);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumWindows(WindowEnumCallback lpEnumFunc, int lParam);

[DllImport("user32.dll")]
public static extern void GetWindowText(int h, StringBuilder s, int nMaxCount);

[DllImport("user32.dll")]
public static extern bool IsWindowVisible(int h);

private List<string> Windows = new List<string>();
private bool AddWnd(int hwnd, int lparam)
{
    if (IsWindowVisible(hwnd))
    {
      StringBuilder sb = new StringBuilder(255);
      GetWindowText(hwnd, sb, sb.Capacity);
      Windows.Add(sb.ToString());          
    }
    return true
}

private void Form1_Load(object sender, EventArgs e)
{
    EnumWindows(new WindowEnumCallback(this.AddWnd), 0);
}
于 2012-05-30T15:41:15.780 に答える
0

私は同様の方法を作成しましたが、ウィンドウスタイルのToolWindowでフィルターをかけ、隠しウィンドウは、クロークされることによって隠しフラグを循環させるアプリケーションを格納します。

public static class WindowFilter
{
    public static bool NormalWindow(IWindow window)
    {
        if (IsHiddenWindowStoreApp(window,  window.ClassName)) return false;

        return !window.Styles.IsToolWindow && window.IsVisible;
    }

    private static bool IsHiddenWindowStoreApp(IWindow window, string className) 
        => (className == "ApplicationFrameWindow" || className == "Windows.UI.Core.CoreWindow") && window.IsCloaked;
}

上記の例はgithubのプロジェクトの一部であり、残りのコードを見ることができます。 https://github.com/mortenbrudvik/WindowExplorer

于 2021-01-21T18:58:23.657 に答える