Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112

Работа с Windows Service и графикой (на примитивном уровне)

24.10.2010, 14:08. Показов 2420. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем.

Написал сервис который каждые 10 секунд добавляет в log файл информацию о текущем времени а также инфу о том что он был запущен либо был завершен.
Захотел решить другую задачу - через определенное время делать принтскрин экрана, создавать файл с именем времени, и сохранять все это. все работает кроме одного - картинка получается пустая, т.е. в этот файл ничего не сохраняется.
В чем может быть проблема? буду благодарен за любую информацию по теме!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
private StreamWriter file;
        private FileStream fs;
        private Graphics grfx;
        private Bitmap bmp;
        private string temp;
        //Определяем таймер
        private System.Timers.Timer timer1;
        private const string MY_PATH = @"D:\";
        private const string EXTENSION = ".bmp";
 
        protected override void OnStart(string[] args)
        {
            file = new StreamWriter(new FileStream("D:\\temp.log",
    System.IO.FileMode.Append));
            this.file.WriteLine("MyFirstService стартовал");
            this.file.Flush();
            //Создаем таймер и выставляем его параметры
            this.timer1 = new System.Timers.Timer();
            this.timer1.Enabled = true;
            //Интервал 10000мс - 10с.
            this.timer1.Interval = 10000;
            this.timer1.Elapsed +=
             new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
            this.timer1.AutoReset = true;
            this.timer1.Start();
        }
 
        protected override void OnStop()
        {
            this.timer1.Stop();
            this.file.WriteLine("MyFirstService остановлен");
            this.file.Flush();
            this.file.Close();
        }
 
        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //Записываем время в файл или делаем все, что хотим
 
            this.temp = MyFirstService.MY_PATH + DateTime.Now.ToString("d.M.yyyy-HH.mm.ss") + MyFirstService.EXTENSION;
            this.fs = File.Create(temp);
            this.fs.Close();
            this.bmp = new Bitmap(1280, 800);
            this.grfx = Graphics.FromImage(bmp);
            this.grfx.CopyFromScreen(0, 0, 0, 0, new Size(1280, 800));
            this.bmp.Save(temp);
        }
в настройках сервиса, ставил галочку - разрешить взаимодействие с рабочим столом. не помогло.
если реализовать тот же функционал ,но только повесив на кнопку в обычном windows forms, то все замечательно работает!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.10.2010, 14:08
Ответы с готовыми решениями:

Работа с командной строкой Windows Service
Здравствуйте. Ума не приложу в чем проблема бьюсь весь день. Есть бат файл и файл скрипта. Если запускаю батник из консольного...

Java + БД (на примитивном уровне)
Всех приветствую! Пишу небольшую прожку на java, к которой подключаю базу данных MS Access. Суть проги: добавлять/удалять записи в БД....

A Windows service with the name MySQL already exists. Please uninstall this service correctly or choose a different name for the new service.
Не знаю что делать дальше

12
87 / 86 / 13
Регистрация: 21.10.2010
Сообщений: 349
24.10.2010, 14:23
А на событие Tick не?
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
24.10.2010, 15:16
У тебя в коде тимер запускается, но не останавливается, поэтому timer1_Elapsed не срабатывает.
Тебе надо поместить весь код timer1_Tick. И, кстати, сделай подписку на него.
0
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
24.10.2010, 16:16  [ТС]
Парни,вы вообще когда нибудь работали с таймером из пространства System.Timers ???)))
Все срабатывает елки палки, а события Tick у этого таймера нет)
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
24.10.2010, 19:47
точно, не заметил, что у тебя из System.Timers, перепутал с System.Windows.Forms.Timer
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
24.10.2010, 20:07
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            timer1.Start();
           
        }
 
        private Bitmap TakeScreenShot(Screen currentScreen)
        {
            Bitmap bmpScreenShot = new Bitmap(currentScreen.Bounds.Width,
                                              currentScreen.Bounds.Height,
                                              PixelFormat.Format32bppArgb);
 
            Graphics gScreenShot = Graphics.FromImage(bmpScreenShot);
 
            gScreenShot.CopyFromScreen(currentScreen.Bounds.X,
                                       currentScreen.Bounds.Y,
                                       0, 0,
                                       currentScreen.Bounds.Size,
                                       CopyPixelOperation.SourceCopy);
            return bmpScreenShot;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            Image pr = TakeScreenShot(Screen.PrimaryScreen);
            string fileName = DateTime.Now.ToShortTimeString() + ".bmp";
            fileName = fileName.Replace(":", "-");
            pr.Save(fileName);
        }
 
 
    }
Вложения
Тип файла: rar WindowsFormsApplication1.rar (33.1 Кб, 19 просмотров)
0
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
24.10.2010, 23:34  [ТС]
Спасибо за более универсальный код! Но проблема ведь не в этом была! Проблема НЕ РЕШЕНА(.

Если приложение работает как windows forms, то создаваемые файлы не содержат копию экрана.
У меня такое чувство что windows service не может использовать функцию копирования экрана из
пространства имен System.Windows.Forms . Даже не знаю почему так.

Еще раз: если написать все то же самое в приложении windows forms, все работает.
но я хочу сделать службу, работающую как полноценная служба windows, со всеми вытекающими последствиями(невидимость для пользователя, автостарт с системой и др). если написать как службу, экран не копируется.
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
25.10.2010, 14:14
точно, попробовал реализовать как службу, тогда не работает... даже не могу понять в чем может быть проблема...
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
26.10.2010, 04:16
MSDN говорит
GDI+ functions and classes are not supported for use within a Windows service. Attempting to use these functions and classes from a Windows service may produce unexpected problems, such as diminished service performance and run-time exceptions or errors.
люди же предлагают или кощунство типа "Allow system to interact with desktop" - это примерно как "CheckForIllegalCrossThreadCalls" или заморочки с использованием видео дров. см VNC и прочее

мой же совет - смириться с ситуацией... ведь так у всех)
0
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
26.10.2010, 10:01  [ТС]
Каюсь(нужно было внимательнее смотреть MSDN.
"Allow system to interact with desktop" - не помогает.
Но хоть что нибудь можно сделать?) Ну елки палки, как тогда можно сделать скрины в программе, которая не видна и тем самым не мешает мне ? чорт)
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
26.10.2010, 10:31
я думаю, что можно попробовать использовать WinForms:
C#
1
2
            ShowInTaskbar = false;
            WindowState = FormWindowState.Minimized;
и программу в автозапуск
1
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
26.10.2010, 18:15  [ТС]
Кенни спасибо!
Решение проблемы другим путем, тоже решение)
Хотя мсдн надо покурить, может чего нибудь и прикручу к сервису...
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
27.10.2010, 00:39
Цитата Сообщение от limelight Посмотреть сообщение
в программе, которая не видна
так может и сделать обычное приложение, а не сервис и спрятать его... или просто в трей...??

мда... опять опоздал...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2010, 00:39
Помогаю со студенческими работами здесь

Работа с графикой и библиотекой windows.h
Написать две программы для двух рисунков с помощью библиотеки "windows.h".

Возможно ли на OpenGL сделать игру с графикой на уровне Battlefield 1?
Собственно, вот и весь вопрос.

Windows Service Manager Tray , Windows Service Manager (SrvMan) информация
Есть ли у кого то информация по Windows Service Manager Tray , Windows Service Manager (SrvMan) . Статьи , описания , инструкции по...

Как переделать Windows Forms приложение в Windows Service с UI?
Здравствуйте, уважаемые посетители форума! Вопрос такой. У меня есть приложение C# Win Forms с интерфейсом. Как из него сделать...

Оболочка BASH в Windows (Windows Service for Linux)
Информация, которую можно получить по состоянию на текущий момент, заставляет отнестись серьёзно к возможности появления новой командной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru