開いているすべてのウィンドウ(Internet Explorerのタブなどのウィンドウを含む)のタイトルを取得するにはどうすればよいですか?このような開いているすべてのウィンドウのタイトルを取得
答えて
何か:
using System.Diagnostics;
Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
{
if (!String.IsNullOrEmpty(process.MainWindowTitle))
{
Console.WriteLine("Process: {0} ID: {1} Window title: {2}", process.ProcessName, process.Id, process.MainWindowTitle);
}
}
あなたはEnumWindow APIを使用する必要があります。
のC#からそれを使用する方法の例の多くがあり、私はここで何かを見つけた:
私はそれを理解しています。あなたは私にexsple、plesaeを与えることができますか? –
リンクのみの回答は答えではありません。 – zzzzBov
http://pinvoke.net/default.aspx/user32.EnumDesktopWindows
をUSER.DLL年代を使用した例がありますC#でEnumWindowを実行すると、開いているすべてのウィンドウが一覧表示されます。
リンクが壊れています! –
http://pinvoke.net/default.aspx/user32.EnumDesktopWindows – 62071072SP
は私にいくつかのエラーを与える前の回答に基づいて、finaly私はGetOpenedWindows
機能で、このコードを使用します。
public class InfoWindow
{
public IntPtr Handle = IntPtr.Zero;
public FileInfo File = new FileInfo(Application.ExecutablePath);
public string Title = Application.ProductName;
public override string ToString() {
return File.Name + "\t>\t" + Title;
}
}//CLASS
/// <summary>Contains functionality to get info on the open windows.</summary>
public static class RuningWindows
{
internal static event EventHandler WindowActivatedChanged;
internal static Timer TimerWatcher = new Timer();
internal static InfoWindow WindowActive = new InfoWindow();
internal static void DoStartWatcher() {
TimerWatcher.Interval = 500;
TimerWatcher.Tick += TimerWatcher_Tick;
TimerWatcher.Start();
}
/// <summary>Returns a dictionary that contains the handle and title of all the open windows.</summary>
/// <returns>A dictionary that contains the handle and title of all the open windows.</returns>
public static IDictionary<IntPtr , InfoWindow> GetOpenedWindows()
{
IntPtr shellWindow = GetShellWindow();
Dictionary<IntPtr , InfoWindow> windows = new Dictionary<IntPtr , InfoWindow>();
EnumWindows(new EnumWindowsProc(delegate(IntPtr hWnd , int lParam) {
if (hWnd == shellWindow) return true;
if (!IsWindowVisible(hWnd)) return true;
int length = GetWindowTextLength(hWnd);
if (length == 0) return true;
StringBuilder builder = new StringBuilder(length);
GetWindowText(hWnd , builder , length + 1);
var info = new InfoWindow();
info.Handle = hWnd;
info.File = new FileInfo(GetProcessPath(hWnd));
info.Title = builder.ToString();
windows[hWnd] = info;
return true;
}) , 0);
return windows;
}
private delegate bool EnumWindowsProc(IntPtr hWnd , int lParam);
public static string GetProcessPath(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd , out pid);
if (hwnd != IntPtr.Zero) {
if (pid != 0) {
var process = Process.GetProcessById((int) pid);
if (process != null) {
return process.MainModule.FileName.ToString();
}
}
}
return "";
}
[DllImport("USER32.DLL")]
private static extern bool EnumWindows(EnumWindowsProc enumFunc , int lParam);
[DllImport("USER32.DLL")]
private static extern int GetWindowText(IntPtr hWnd , StringBuilder lpString , int nMaxCount);
[DllImport("USER32.DLL")]
private static extern int GetWindowTextLength(IntPtr hWnd);
[DllImport("USER32.DLL")]
private static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("USER32.DLL")]
private static extern IntPtr GetShellWindow();
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
//WARN: Only for "Any CPU":
[DllImport("user32.dll" , CharSet = CharSet.Auto , SetLastError = true)]
private static extern int GetWindowThreadProcessId(IntPtr handle , out uint processId);
static void TimerWatcher_Tick(object sender , EventArgs e)
{
var windowActive = new InfoWindow();
windowActive.Handle = GetForegroundWindow();
string path = GetProcessPath(windowActive.Handle);
if (string.IsNullOrEmpty(path)) return;
windowActive.File = new FileInfo(path);
int length = GetWindowTextLength(windowActive.Handle);
if (length == 0) return;
StringBuilder builder = new StringBuilder(length);
GetWindowText(windowActive.Handle , builder , length + 1);
windowActive.Title = builder.ToString();
if (windowActive.ToString() != WindowActive.ToString()) {
//fire:
WindowActive = windowActive;
if (WindowActivatedChanged != null) WindowActivatedChanged(sender , e);
Console.WriteLine("Window: " + WindowActive.ToString());
}
}
}//CLASS
警告:あなたが唯一の「任意のCPU」の下compil /デバッグは、32ビットAppsにアクセスするためにすることができます。 ..
Heraは、Tabs.Here上で操作が実行された後に呼び出さなければならないUpdateWindowsList_WindowMenu()です。windowToolStripMenuItemは、ウィンドウメニューからメニューストリップに追加されるメニュー項目です。
public void UpdateWindowsList_WindowMenu()
{
//get all tab pages from tabControl1
TabControl.TabPageCollection tabcoll = tabControl1.TabPages;
//get windowToolStripMenuItem drop down menu items count
int n = windowToolStripMenuItem.DropDownItems.Count;
//remove all menu items from of windowToolStripMenuItem
for (int i = n - 1; i >=2; i--)
{
windowToolStripMenuItem.DropDownItems.RemoveAt(i);
}
//read each tabpage from tabcoll and add each tabpage text to windowToolStripMenuItem
foreach (TabPage tabpage in tabcoll)
{
//create Toolstripmenuitem
ToolStripMenuItem menuitem = new ToolStripMenuItem();
String s = tabpage.Text;
menuitem.Text = s;
if (tabControl1.SelectedTab == tabpage)
{
menuitem.Checked = true;
}
else
{
menuitem.Checked = false;
}
//add menuitem to windowToolStripMenuItem
windowToolStripMenuItem.DropDownItems.Add(menuitem);
//add click events to each added menuitem
menuitem.Click += new System.EventHandler(WindowListEvent_Click);
}
}
private void WindowListEvent_Click(object sender, EventArgs e)
{
//casting ToolStripMenuItem to ToolStripItem
ToolStripItem toolstripitem = (ToolStripItem)sender;
//create collection of tabs of tabContro1
//check every tab text is equal to clicked menuitem then select the tab
TabControl.TabPageCollection tabcoll = tabControl1.TabPages;
foreach (TabPage tb in tabcoll)
{
if (toolstripitem.Text == tb.Text)
{
tabControl1.SelectedTab = tb;
//call UpdateWindowsList_WindowMenu() to perform changes on menuitems
UpdateWindowsList_WindowMenu();
}
}
}
開いているすべてのウィンドウのリストを取得するためのコードです。実際には、各項目がKeyValuePairであり、キーがウィンドウのハンドル(hWnd)であり、値がそのタイトルである辞書を取得します。
using HWND = IntPtr;
/// <summary>Contains functionality to get all the open windows.</summary>
public static class OpenWindowGetter
{
/// <summary>Returns a dictionary that contains the handle and title of all the open windows.</summary>
/// <returns>A dictionary that contains the handle and title of all the open windows.</returns>
public static IDictionary<HWND, string> GetOpenWindows()
{
HWND shellWindow = GetShellWindow();
Dictionary<HWND, string> windows = new Dictionary<HWND, string>();
EnumWindows(delegate(HWND hWnd, int lParam)
{
if (hWnd == shellWindow) return true;
if (!IsWindowVisible(hWnd)) return true;
int length = GetWindowTextLength(hWnd);
if (length == 0) return true;
StringBuilder builder = new StringBuilder(length);
GetWindowText(hWnd, builder, length + 1);
windows[hWnd] = builder.ToString();
return true;
}, 0);
return windows;
}
private delegate bool EnumWindowsProc(HWND hWnd, int lParam);
[DllImport("USER32.DLL")]
private static extern bool EnumWindows(EnumWindowsProc enumFunc, int lParam);
[DllImport("USER32.DLL")]
private static extern int GetWindowText(HWND hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("USER32.DLL")]
private static extern int GetWindowTextLength(HWND hWnd);
[DllImport("USER32.DLL")]
private static extern bool IsWindowVisible(HWND hWnd);
[DllImport("USER32.DLL")]
private static extern IntPtr GetShellWindow();
}
そして、ここでそれを使用していくつかのコードです:
foreach(KeyValuePair<IntPtr, string> window in OpenWindowGetter.GetOpenWindows())
{
IntPtr handle = window.Key;
string title = window.Value;
Console.WriteLine("{0}: {1}", handle, title);
}
このコードを使用しようとしましたが、最初の行を 'HWND = System.IntPtr; –
- 1. すべての開いているMDIウィンドウのリストを取得
- 2. 親ウィンドウの再ロード後に開いているすべての子ウィンドウの参照を取得する方法
- 3. 開いているウィンドウとそのタイトルを追跡する
- 4. 開いているウィンドウのリストを取得するC#
- 5. 開いているファイルのすべての診断を取得
- 6. フォームアプリケーションの開いているWPFウィンドウのリストを取得
- 7. AutoItを使用して開いているすべてのウィンドウのリストを取得
- 8. Javascript開いているウィンドウから要素を取得する
- 9. すべての開いているウィンドウのスクリーンショット
- 10. 開いているウィンドウのIDを取得してその開いているウィンドウのサイズを変更する方法
- 11. vbaの開いているウィンドウをすべて確認してください
- 12. すべてのWikipedia記事のタイトルを取得するには?
- 13. すべての開いている接続の最後のsqlクエリを取得
- 14. UISpec4Jを使用してすべてのウィンドウを取得する
- 15. Console-Appがプロセス用の開いているファイルをすべて取得する
- 16. ドッカー画像内の開いている接続をすべて取得する
- 17. すべての開いているエクスプローラウィンドウのListBoxでパスを取得
- 18. 開いているエディタからすべてのEMFツリーのルートを取得
- 19. Selenium Chromeドライバを使用して開いているすべてのChromeウィンドウ
- 20. vb.netプロジェクトのすべてのフォームのタイトルを取得
- 21. Python:開いているすべてのGoogle ChromeタブからすべてのURLを取得
- 22. Tkinterウィンドウのすべての子ウィジェットを取得する
- 23. カーネルスペースコードで開いているファイルハンドルをすべて取得する方法は?
- 24. C開いているファイル記述子をすべて取得する
- 25. 子ウィンドウで親ウィンドウのタグのhtmlを取得するには?私は、次のコードによって、親ウィンドウから子ウィンドウを開いています
- 26. ライブラリの公開APIからタイトルと著者を取得していますか?
- 27. .Net Winformsはすべての開いているウィンドウに通知します
- 28. Autohotkey:特定のタイトルのウィンドウのリストを取得する
- 29. Capybara/Seleniumにフォーカスを当てずにウィンドウのタイトルを取得する
- 30. Teststake Whiteを使用して既存の開いているウィンドウのコントロールを取得する
は、彼が唯一の各プロセスのメインウィンドウになるだろう、このように、彼は内のすべての開いているウィンドウを求めましたシステム。 –
彼は言う:「すべてのオープンアプリの名前にもっと似ている」。 – CodeCaster
Davide pirasが正しいです。私は開いている窓がすべて必要です。 Intrarntの脆弱性のようなタブ。どんな方法?再度、感謝します! –