C# Get Windows Title Name ของ Chrome เวลาเปิดหลายหน้าต่าง ต้องเขียน Code ยังไงครับ
เอาออกแล้วก็ยังไม่ Show ครับ T_T
Date :
2015-08-03 19:35:28
By :
sodanum
ผมลองไปศึกษามาแล้วครับ รู้สึกว่ามันจะเป็นการเอาจาก process ทำให้เวลาจะเอา tab title ของโปรแกรมอื่นมันต้องดึกโดยตรงจาก process นั้น
ใช้อย่างอื่นเข้าช่วยด้วยมีเว็ปที่แสดงการดึง tab title ของ chrome อยู่ลองเอาไปศึกษา ไม่เข้าใจลองถามถ้าช่วยได้ก็จะช่วยนะครับ
http://stackoverflow.com/questions/16958051/get-chrome-browser-title-using-c-sharp
Date :
2015-08-03 21:39:13
By :
Mi
ขอบคุณสำหรับคำแนะนำครับ ได้ละครับ
Code (C#)
[DllImport("user32.dll")]
private static extern bool EnumThreadWindows(uint dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
[DllImport("User32", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int GetWindowText(IntPtr windowHandle, StringBuilder stringBuilder, int nMaxCount);
[DllImport("user32.dll", EntryPoint = "GetWindowTextLength", SetLastError = true)]
internal static extern int GetWindowTextLength(IntPtr hwnd);
private static List<IntPtr> windowList;
private static string _className;
private static StringBuilder apiResult = new StringBuilder(256); //256 Is max class name length.
private delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);
private static List<IntPtr> WindowsFinder(string className, string process)
{
_className = className;
windowList = new List<IntPtr>();
Process[] chromeList = Process.GetProcessesByName(process);
if (chromeList.Length > 0)
{
foreach (Process chrome in chromeList)
{
if (chrome.MainWindowHandle != IntPtr.Zero)
{
foreach (ProcessThread thread in chrome.Threads)
{
EnumThreadWindows((uint)thread.Id, new EnumThreadDelegate(EnumThreadCallback), IntPtr.Zero);
}
}
}
}
return windowList;
}
static bool EnumThreadCallback(IntPtr hWnd, IntPtr lParam)
{
if (GetClassName(hWnd, apiResult, apiResult.Capacity) != 0)
{
if (string.CompareOrdinal(apiResult.ToString(), _className) == 0)
{
windowList.Add(hWnd);
}
}
return true;
}
Code (C#)
private void button2_Click(object sender, EventArgs e)
{
List<IntPtr> ChromeWindows = WindowsFinder("Chrome_WidgetWin_1", "chrome");
listBox1.Items.Clear();
foreach (IntPtr windowHandle in ChromeWindows)
{
int length = GetWindowTextLength(windowHandle);
StringBuilder sb = new StringBuilder(length + 1);
GetWindowText(windowHandle, sb, sb.Capacity);
string titleWin = sb.ToString();
if (titleWin != String.Empty)
{
listBox1.Items.Add(sb.ToString());
}
}
}
ประวัติการแก้ไข 2015-08-03 23:35:07 2015-08-03 23:36:10 2015-08-03 23:39:53 2015-08-03 23:48:53
Date :
2015-08-03 23:33:51
By :
sodanum
อันนี้เป็นส่วนที่ผมเพิ่มเข้าไปอีก กดเลือกจาก list Box เพื่อไปที่หน้าต่างที่ต้องการ
Code (C#)
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
Code (C#)
private void button3_Click(object sender, EventArgs e)
{
List<IntPtr> ChromeWindows = WindowsFinder("Chrome_WidgetWin_1", "chrome");
foreach (IntPtr windowHandle in ChromeWindows)
{
int length = GetWindowTextLength(windowHandle);
StringBuilder sb = new StringBuilder(length + 1);
GetWindowText(windowHandle, sb, sb.Capacity);
string titleWin = sb.ToString();
if(titleWin == listBox1.Text)
{
SetForegroundWindow(windowHandle);
}
}
}
ประวัติการแก้ไข 2015-08-03 23:43:50
Date :
2015-08-03 23:42:45
By :
sodanum
Date :
2015-08-04 09:23:44
By :
mr.win
Load balance : Server 03