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

Работа с процессами

30.10.2010, 03:22. Показов 7036. Ответов 14

Студворк — интернет-сервис помощи студентам
Всем привет!
Вообщем, ситуация примерно такая:

У меня есть имя процесса, назовем его "taskmgr". Это диспечер задач в Windows (например).
Я могу запустить или закрыть этот процесс, кароче я легко могу этот процесс инициализировать используя объект Process
C#
1
2
Process[] procList = Process.GetProcesses();
Process proc = procList.FirstOrDefault(t => string.Equals(t.ProcessName, "taskmgr"));
Мне нужно как то програмно переключать там закладки ('Приложения', 'Процессы', 'Быстродействие' ...) и имитировать (!) нажатие разных там кнопок. Ну я так себе вижу - нужно каким-то образом вызывать события типа OnClick, Select ... для объектов в этом диспечере задач.
Только вот как это сделать программно ???
А может это вообще не реально ? Вообщем буду благодарен за любой информативный ответ !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2010, 03:22
Ответы с готовыми решениями:

Работа с процессами - Mutant
Нужно получить список процессов, из него выделить один. У этого процесса показать все Mutant'ы и убить один из мутантов. С первой частью...

Работа с процессами и автозапуском
Здравствуйте, дорогие форумчанины. Вобщем пишу программу, и нужно выполнить 3 цели. 1.) Убить процесс (к примеру opera.exe) 2.)...

Работа с процессами, как поставить хук..
такая проблема: Есть программа "1" она использует библиотеку " Sim.dll ". Есть ещё программа "2" которая постоянно вырубает...

14
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
30.10.2010, 03:24
Вам надо шагать в сторону API: FindWindow(Ex) и SendMessage, поищите на форуме, очень много раз поднимались подобные темы.

з.ы. и Process Вам здесь не очень нужен, только если использовать API EnumWindows и сравнивать все хэндлы с <переменная_типа_Process>.MainWindowHand le.
1
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 8
30.10.2010, 03:30  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
Вам надо шагать в сторону API: FindWindow(Ex) и SendMessage, поищите на форуме, очень много раз поднимались подобные темы.

з.ы. и Process Вам здесь не очень нужны, только если использовать API EnumWindows и сравнивать все хэндлы с <переменная_типа_Process>.MainWindowHand le.
Благадарка
0
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 8
31.10.2010, 23:24  [ТС]
Всем привет!

Ну вообщем, сделал я щаг в сторону API и появилось несколько вопросов:
1. Как можно продебажить любой из методов\функций WinAPI ?
Вот например в ниже приведенном коде, я не вижу результата функции SendMessage.
Что не так? Предполагаеться нажатие в калькуляторе на кнопку 6.

2. Обязательно делать dllimport для обьявления каждой функции WinAPI ?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    class Program
    {
        [DllImport("user32.dll")]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle,
            IntPtr childAfter, string className, string windowTitle);
        
        [DllImport("user32.dll")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
 
        [DllImport("user32.dll")]
        public static extern IntPtr SendMessage(IntPtr hWnd, string Msg, IntPtr wParam, IntPtr lParam);
 
        static void Main(string[] args)
        {
            IntPtr parentHandle = FindWindow("SciCalc", null);
            IntPtr button = FindWindowEx(parentHandle, IntPtr.Zero, "Button", "6");
            SendMessage(button, "BM_CLICK", IntPtr.Zero, IntPtr.Zero);
        }
    }
Добавлено через 38 минут
ха, первый вопрос уже не актуален )) слделал ))
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
31.10.2010, 23:45
Обязательно делать dllimport для обьявления каждой функции WinAPI ?
а как компиллер узнает от куда ему брать эту функцию?
1
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 8
31.10.2010, 23:58  [ТС]
Цитата Сообщение от Konctantin Посмотреть сообщение
а как компиллер узнает от куда ему брать эту функцию?
Вот и мне это интерестно, можно ли как то сделать так что бы компилятор четко понимал что эти функции нужно брать тут !
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
01.11.2010, 00:03
так вот атрибут четко и указывает...
1
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
01.11.2010, 00:39
pronto, лучше ещё указывать свойство SetLastError:
C#
1
2
 [DllImport("user32.dll"), SetLastError = true]
...
Это позволит узнать произошла ли во время выполнения функции ошибка. Узнать номер ошибки можно с помощью Marshal.GetLastWin32Error() или API GetLastError. Обычно если функция завершилась успешно GetLastError == 0.

з.ы. описание ошибки можно узнать в MSDN.
1
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 8
03.11.2010, 01:15  [ТС]
Всем привет!

А какой инструмент можно использовать для того, что бы определить имя класса окна?
Я попробывал несколько, а именно - InqSoft Window Scanner и майкрософтовский Spy++, но оба инструмента не распознают часть дочерних объектов. На примере того же стандартного калькулятора, не возможно определить меню, ну там где Файл-Вид-Справка, зато кнопки распознаются.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
03.11.2010, 01:37
Цитата Сообщение от pronto Посмотреть сообщение
А какой инструмент можно использовать для того, что бы определить имя класса окна?
GetClassName
Цитата Сообщение от pronto Посмотреть сообщение
не возможно определить меню
Для работы с меню есть отдельные API. Начинай поиск с GetMenu.
0
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 8
03.11.2010, 01:56  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
GetClassName

Для работы с меня есть отдельные API. Начинай поиск с GetMenu.

Я наверно не то имел ввиду!
Мне не интерестно получить ClassName программно, мне это ни к чему.
Предполагаеться что ClassName будет подаваться на вход как параметр.
Но для того, что бы протестировать функции, нужно их как то вызвать и передать заведомо известный параметр.
Уверен что есть инструменты (тулы) которые, как и Spy++, умеют распознавать объекты и показывать их ClassName, но только все объекты, включая и меню!. Поиск в гуле недал особого результата, да и хотелось рекомендаций от людей с опытом.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
03.11.2010, 02:03
У меню нет имени класса и оно не является стандартным окном как таковое, оно является общей частью окна, но в тоже время имеет свой идентификатор.

А Spy++ прекрасно показывает хендл меню нужного окна. Выбираешь в списке главное окно, правой кнопкой мыши клацаешь -> Properties и на вкладке General ищешь надпись Menu Handle.
0
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 8
03.11.2010, 02:15  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
У меню нет имени класса
Как это нету Сама менюшка это объект, а как у объекта не может быть класса ?
Цитата Сообщение от SSTREGG Посмотреть сообщение
roperties и на вкладке General ищешь надпись Menu Handle.
а какая у тебя версия, у меня 9.00.21022 х6
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
03.11.2010, 02:29
Цитата Сообщение от pronto Посмотреть сообщение
Как это нету Сама менюшка это объект, а как у объекта не может быть класса ?
Файл, процесс (и т.д.) тоже объекты, и у них нет класса. Для меню хватает HANDLE в роли ID, класс ей совершенно не нужен, на крайний случай можно сравнивать с текстом меню.
Цитата Сообщение от pronto Посмотреть сообщение
а какая у тебя версия
Такая же.

з.ы. А если более точно, то класс меню соответствует классу окна, поэтому его грубо говоря нет. Вот статья на MSDN всё очень хорошо описывает о создании\работе\существовании меню.
1
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 8
03.11.2010, 02:44  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
Файл, процесс (и т.д.) тоже объекты, и у них нет класса. Для меню хватает HANDLE в роли ID, класс ей совершенно не нужен, на крайний случай можно сравнивать с текстом меню.

Такая же.

з.ы. А если более точно, то класс меню соответствует классу окна, поэтому его грубо говоря нет. Вот статья на MSDN всё очень хорошо описывает о создании\работе\существовании меню.
Да, спасибо, разобрался!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2010, 02:44
Помогаю со студенческими работами здесь

Работа с процессами, перехват событий из контекстного меню windows, связь двух программ
Всем привет. У меня возникала идея создать небольшое ПО, для подсчета специфической информации, внутри папки, над файлами. ...

Работа с процессами и их отображением
День добрый. Такой вопрос, если ли в .Net или WinApi функции для работы с окном запущенного процесса, в частности нужно получение...

Работа с процессами
Задача такая: переключение между уже запущенными процессами. Если процесс уже активирован, то сделать это окно активным, если нет - то...

Работа с несколькими одноименными процессами
В силу своей неопытности, не первый день ломаю голову по реализации задачи. Имеется 10 одноименных процессов, раз в 2-3 часа на каждом из...

Работа с процессами
С пидом и экзешниками я разобрался вроде. Хотелось бы иметь данные о процессах в количестве хотя бы равном менеджеру (загрузка...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru