Нахождение статуса GoogleTalk - PullRequest
1 голос
/ 23 июня 2010

Я пытаюсь создать программу, которая будет показывать мне статус моего Gtalk (онлайн / офлайн).

alt text

Я могу найти класс Status View 2, нокак я могу найти текст внутри него.

Вот мой код.

Расширение 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());

Спасибо.

1 Ответ

2 голосов
/ 28 июня 2010

Я нашел решение сам. Благодаря абазабам .

alt text

Если вы посмотрите на рисунок, есть панель с именем класса "# 32770" и заголовком окна "Диалог входа"

Когда пользователь не в сети, эта панель видна, а когда пользователь переходит в режим онлайн, панель не видна.

Таким образом, основная логика заключается в обнаружении видимости панели.

Вы можете использовать Spy ++, чтобы найти имя класса.

alt text

Декларация 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.");
}

В любом случае, спасибо, что прочитали мою проблему.

...