Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Idle 0, GetForegroundWindow() 
:(
    Опции темы
Springtime
Дата 3.12.2008, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: 0
Всего: 2



Всем привет!
в общем пишу прогу на основе GetForegroundWindow()

всё подключил, но работает странно

на некоторых окнах возращает - Idle 0

как с этим бороться и что это такое подскажите пожалуйста.
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
gambit
Дата 3.12.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 5
Всего: 40



В 17 строке ошибка.
PM MAIL ICQ Skype   Вверх
Springtime
Дата 3.12.2008, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: 0
Всего: 2



Цитата(gambit @ 3.12.2008,  09:57)
В 17 строке ошибка.

 smile 
глубоко извиняюсь что не раскрыл всё

в общем суть таково что нужно создать сервис, который опрашиваеть какие окна и какие программы сейчас находятся в фокусе у пользователя

в общем сделал такой код - 
Код

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.ServiceProcess;
using System.Timers;
using System.Runtime.InteropServices;
using System.Threading;


namespace TestSQL
{
    public partial class Service1 : ServiceBase
    {

        /// Подключение внешних библиотек с  API функциями взятия окна
        [DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        private static extern int GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

        IntPtr handle;
        uint lpwdProcessId;
        Process process;
        string user;
        int currentSessionId;

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            this.timer1.Enabled = true;
            this.LogMessage("Service Started");
        }

        protected override void OnStop()
        {
            this.timer1.Enabled = false;
            this.LogMessage("Service Stopped");
        }

        private void timer1_Elapsed(object sender, EventArgs e)
        {
            this.LogMessage(GetWindow());
        }

        private void LogMessage(string Message)
        {
            {
                SqlConnection connection = null;
                SqlCommand command = null;
                try
                {
                    connection = new SqlConnection("Server=SIT-PPO-01;Database=ProgramLog;Integrated Security=false;User Id=User;Password=;");
                    command = new SqlCommand("INSERT INTO MyServiceLog (vc_Status, dt_Created) VALUES ('" + Message + "',getdate())", connection);
                    connection.Open();
                    int numrows = command.ExecuteNonQuery();
                    }
                    catch( Exception ex )
                    {
                        System.Diagnostics.Debug.WriteLine(ex.Message);
                    }
                    finally
                {
                    command.Dispose();
                    connection.Dispose();
                }
            }
        }
        private string GetWindow()
        {
            handle = GetForegroundWindow();
            GetWindowThreadProcessId(handle, out lpwdProcessId);
            process = Process.GetProcessById((int)lpwdProcessId);
            return  process.ProcessName.ToString() + " " + lpwdProcessId.ToString();
        }
}
}


Всё хорошо сервис запускается, пишет в базу.
Но вот только запускается он от System (хотя это значения не имеет, пробывал и из под себя)
и соответственно возвращает Idle 0
То есть то что есть у System.
Так вот как мне сделать что бы функция GetWindow(), возвращала окна и проги которые сейчас запущены у пользователя?
потоком или как это вообще?
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0409 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.