Вопрос
Я пытаюсь создать программу, которая покажет мне статус моего GTALK (онлайн/офлайн).
Я могу найти класс View 2 Status, но как я могу найти в нем текст.
Вот мой код.
Decleration API:
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
Код, который вызывает API:
IntPtr hwnd = IntPtr.Zero;
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Google Talk - Google Xmpp Client GUI Window", "Google Talk");
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Main View", "@main");
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Status View 2", "Status Box");
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "RichEdit20W", "String.Empty");
MessageBox.Show(hwnd.ToString());
Спасибо.
Решение
Я нашел решение моего себя. Благодаря абазабам.
Если вы посмотрите на фигуру, есть панель, название класса, «#32770», а подпись окна - «Вписать в диалог»
Когда пользователь находится в автономном режиме, то эта панель видима, а когда пользователь выходит онлайн. Панель не виден.
Таким образом, основная логика - обнаружить видимость панели.
Вы можете использовать Spy ++, чтобы найти имя класса.
Decleration API:
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool IsWindowVisible(IntPtr hWnd);
Код:
IntPtr hwnd = IntPtr.Zero;
bool check;
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Google Talk - Google Xmpp Client GUI Window", "Google Talk");
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Main View", "@main");
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "#32770", "Sign In Dialogue");
check = IsWindowVisible(hwnd);
if (check == true)
{
MessageBox.Show("User is offline.");
}
else
{
MessageBox.Show("User is online.");
}
В любом случае, спасибо, что прочитали мою проблему.
Не связан с StackOverflow