Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
4 / 4 / 0
Регистрация: 25.08.2010
Сообщений: 11
.NET 3.x

Управление программами

07.09.2010, 10:12. Показов 2246. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с интересной задачей. Нужно реализовать слежение за процесом и в случае его зависания или других заданных факторов его перезапускать. Данное реализовать просто. Но есть одно "Но" после перезапуска программе необходимо передовать данные (бонально вводить пароль или имя пользователя) указанные ранее. Вот тут то я и встал в ступор. Подскажите, каким способом это можно реализовать и куда нужно копать?

С уважением, Mordor.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.09.2010, 10:12
Ответы с готовыми решениями:

управление внешними программами через горячие клавиши
задача выглядит так. Есть две программы, например плееры foobar2000. Известны их пути на диске С:\pleer\1\foobar2000.exe ...

Передача данных между программами
Здравствуйте. Нужно написать приложение на C# выполняющее передачу данных между Microsoft Office и Opera (передача web страниц данных) за...

Оптимальный способ передачи данных между программами на c#
Здравствуйте. Ситуация следующая: есть 2 программы, между которыми необходимо обеспечить передачу данных(от одной к другой, в обратную...

17
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
07.09.2010, 15:35
Копать нужно в сторону SendMessage(WM_SETTEXT, WM_GETTEXT, WM_GETTEXTLENGTH), FindWindow(Ex) или EnumWindows (EnumChildWindows).

p.s. подразумеваю, что Вам придется (захочется) в дальнейшем ловить создание окна, на .NET такое не реализуемого, кроме как метод через ... ну Вы поняли.
0
4 / 4 / 0
Регистрация: 25.08.2010
Сообщений: 11
07.09.2010, 17:16  [ТС]
Я уже нашел спасибо. Мое решение WinAPI, в частности, user32.dll с поиском окон + Spy++ для поиска. Уже написал простейшую программу с изменением текста в окне калькулятора. Кому интересно вот код:
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
static class Program
    {
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string _ClassName, string _WindowName);
 
        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
        private static extern IntPtr FindWindowEx(IntPtr hwndPrnt, IntPtr hwndChildAfter, string _ClassName, string _WindowName);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
        const int WM_LBUTTONDOWN = 513;
        const int WM_LBUTTONUP = 514;
        const int WM_RBUTTONDOWN = 516;
        const int WM_RBUTTONUP = 517;
        const int WM_SETTEXT = 0x000C;
 
        [DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Auto)]
        private static extern IntPtr SendMessageText(IntPtr hWnd, int wMsg, int wParam, string lParam);
 
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run();
        }
        
        public static void FindEditWindows(string message)
        {
            IntPtr calcWindow = FindWindow("SciCalc", "Calculator");
            if (calcWindow == IntPtr.Zero)
            {
                MessageBox.Show("Not found Calculator window");
                return;
            }
            IntPtr editWindow = FindWindowEx(calcWindow, IntPtr.Zero, "Edit", null);
            if (editWindow == IntPtr.Zero)
            {
                MessageBox.Show("Not found Edit");
                return;
            }
            SendMessageText(editWindow, WM_SETTEXT, 0, message);
        }
Столкнулся с тем, что в интернете на удивление скудно освещен данный вопрос.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
07.09.2010, 17:21
Цитата Сообщение от Mordor Посмотреть сообщение
Столкнулся с тем, что в интернете на удивление скудно освещен данный вопрос.
Вы плохо искали
0
4 / 4 / 0
Регистрация: 25.08.2010
Сообщений: 11
07.09.2010, 17:39  [ТС]
Привидите мне, пожалуйста, ссылку где подробно освещен именно вопрос передачи сообщений с подробными иразжованными примерами по средствам SendMessage(WM_SETTEXT, WM_GETTEXT, WM_GETTEXTLENGTH) и желательно на русском. Если получиться спасибо буду говорить вечно .
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
07.09.2010, 17:41
pinvoke.net и MSDN. На русском - да, Вы почти ничего не найдете нормального.
1
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
08.09.2010, 00:45
Mordor, сам задавался этим вопросом - собрал пару хороших ссылок, покопаюсь в избранном - выложу
0
 Аватар для d0s'A
153 / 113 / 25
Регистрация: 23.06.2008
Сообщений: 320
08.09.2010, 07:22
Цитата Сообщение от Mordor Посмотреть сообщение
Привидите мне, пожалуйста, ссылку где подробно освещен именно вопрос передачи сообщений с подробными иразжованными примерами по средствам SendMessage(WM_SETTEXT, WM_GETTEXT, WM_GETTEXTLENGTH) и желательно на русском. Если получиться спасибо буду говорить вечно .
Сайт "Firststeps.ru" тебе в помощь. На нем много чего есть по Win API
2
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
08.09.2010, 23:39
Отобрал только то что на русском по теме p/invoke и взаимодействия СОМ (мож кому пригодится), есть много интересных материалов но на инглише.
(ссылок на форумы нет)
"Взаимодействие" - статьи RSDN
Хуки в Win32
Методы перехвата API-вызовов в Win32
Основные функции Win API и их вызов на .NET (English only)
1
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
09.09.2010, 00:19
Цитата Сообщение от Alligieri Посмотреть сообщение
Хуки в Win32
Методы перехвата API-вызовов в Win32
Это не относится к .NET. Большую часть того что там написано реализовать на .NET нельзя.
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
09.09.2010, 01:03
SSTREGG, можно, если постаратся но запостил больше ради понимания топикстартером механизмов работы Win32 API.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
09.09.2010, 01:12
Цитата Сообщение от Alligieri Посмотреть сообщение
можно, если постаратся
Ну тогда прошу ссылку или пример кода (рабочий), как установить хук WH_CBT (глобальный), WH_SHELL (глобальный) или WH_SYSMSGFILTER. Не говоря уже о перехвате API функций на .net конечно )
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
09.09.2010, 01:46
Цитата Сообщение от SSTREGG Посмотреть сообщение
на .net конечно )
ну на С++ там вроде итак есть
будет время
- вернусь к этой теме и реализую в рамках очередной подготовки к олимпиаде - пока времени морочится нет (знаю такие отмазки не катят но я ведь не зря это в инете искал )
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
09.09.2010, 01:51
Ну дык, на C++ я выше крыши видел )) На .net даже не пытайся, не раз сам этим занимался. Это невозможно сделать т.к. нужно реализовывать в native dll, которая грузилась бы в адресное пространство каждого процесса. При данной реализации в .net, получается что должна создаваться новая копия CLR и грузится в каждый процесс, а это нереально (т.к. существовать может только одна копия CLR)
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
09.09.2010, 02:10
SSTREGG,
ну а если
создать межплатформенную (между CLR и native) библиотеку и использовать ее как буфер?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
09.09.2010, 02:18
В том то и дело, что обработчики (callback функции) невозможно привинтить к приложению на .NET, уже пробовал Они должны быть обязательно в "native среде". Можно конечно ещё пару раз попробовать, через другие способы, но что-то мне подсказывает, что это те же яйца только сбоку ))

Результат один - легче взять C++ (ну или Delphi, или любой другой язык компилируемый в native) и написать на нём )
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
09.09.2010, 03:06
Цитата Сообщение от SSTREGG Посмотреть сообщение
В том то и дело, что обработчики (callback функции) невозможно привинтить к приложению на .NET
а как же тогда "привинчен" WndProc?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
09.09.2010, 09:09
WndProc ничего не перехватывает, он получает сообщения от системы, он свой для каждого окна. В данном случае я имел ввиду обработчики, например перехват API или тот же хук WH_CBT.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.09.2010, 09:09
Помогаю со студенческими работами здесь

Программа для обмена данными между другим программами
Не знаю в какую часть форума написать, изучаю c# поэтому тут. Надо сделать небольшую программу для экспорт данных из 1С, преобразование и...

Реализация ssl для обмена между программами на одном устройстве
Вопрос как создать защищенный сеанс используя протокол ssl между двумя программами. Программы обмениваются сообщениями и запущены на одном...

Взаимодействие между двумя разными программами
Задача у меня такая, есть программа сделанная на WPF. Нужно написать программу которая будет принимать запрос от моего проекта на WPF и...

помогите с программами
1.вводится простейшее математическое выражение(a+b=?,a*b...),которое задается одной строчкой.нужно найти значение введенного выражения. ...

Переключение между программами
Здравствуйте, может быть кто-нибудь сможет помочь ссылкой или примером. У меня есть одно приложение, код которого вызывает диалоговое окно...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru