Контроль активности другого процесса - C#
Формулировка задачи:
Доброго всем времени суток.
Подскажите пож-та, каким образом можно отследить через С#, что кто-нибудь использует другой процесс. А именно, вот из C# у меня запускается браузер (примитив IExplorer), необходимо допустим если в течении 10 мин никто не нажимает в браузере никакие кнопочки, скролики, картиночки, ссылочки и т.д. что б он закрывался..(глушить тоже через C# соответсвенно). Вопрос..как узнать, что в браузере что-нибудь клацнули..и счетчик времени обнулить..до тех пор пока никто 10 мин не будет трогать. Заранее большое спасибо.
Решение задачи: «Контроль активности другого процесса»
textual
Листинг программы
//Сайт
internal static class WinAPI
{
[DllImport("user32.dll", SetLastError = true)]
internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
internal static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("Kernel32")]
public static extern int GetTickCount();
[DllImport("user32.dll", SetLastError = true)]
internal static extern bool CloseWindow(IntPtr hwnd);
[DllImport("user32.dll", SetLastError = true)]
internal static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);
}
[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
internal struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
private const UInt32 WM_CLOSE = 0x0010;
Sait sait;
private void SAIT_Click(object sender, EventArgs e)
{
if (flag_sait == 0)
{
MessageBox.Show("Данный раздел программы находится в разработке.\n", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
n = 0;
//System.Diagnostics.Process.Start("www.ya.ru");
Process.Start("iexplore.exe", "mail.ru");//google.ru
psait = 0;
while (psait < 400)
{
psait = psait + 1;
}
Thread.Sleep(9000);
LASTINPUTINFO info = new LASTINPUTINFO();
info.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
IntPtr hWnd1 = WinAPI.FindWindow("IEFrame", ("Mail.Ru: почта, поиск в интернете, новости, игры, развлечения"));//Google - Windows Internet Explorer
WinAPI.ShowWindow(hWnd1, 3);//SW_ShowNormal
Thread.Sleep(300);
psait = 0;
while (psait < Convert.ToInt32(sait_finish))
{
// Thread.Sleep(10000);
psait = WinAPI.GetTickCount();
GetLastInputInfo(ref info);
lasttime = (int)info.dwTime;
psait = (psait - lasttime) / 1000;
}
WinAPI.CloseWindow(hWnd1);
WinAPI.PostMessage(hWnd1, WM_CLOSE, 0, 0);//WM_QUIT 0x0012;
}
}