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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процессы и их взаимодействие, Процессы и их взаимодействие 
:(
    Опции темы
Sqwirl
Дата 25.12.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 1.4.2007

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



Не расскажите как 
- запустить процессы с параметрами, 
- считать параметы в запущенном процессе, 
- использовать семафоры для синхронизации,
- передавать данные через разделяемую память.
Всё это использую C#.
PM MAIL   Вверх
farad
Дата 25.12.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: -1
Всего: 6



Цитата(Sqwirl @  25.12.2007,  17:34 Найти цитируемый пост)
- запустить процессы с параметрами,

Код

            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "notepad.exe";
            proc.StartInfo.Arguments = "textfile.txt";
            proc.Start();
            proc.WaitForExit(300);
Цитата(Sqwirl @  25.12.2007,  17:34 Найти цитируемый пост)
- считать параметы в запущенном процессе, 
Код

System.Environment.GetCommandLineArgs();
Цитата(Sqwirl @  25.12.2007,  17:34 Найти цитируемый пост)
- передавать данные через разделяемую память.
это наврядли в рамках безопасного кода
Цитата(Sqwirl @  25.12.2007,  17:34 Найти цитируемый пост)
- использовать семафоры для синхронизации,
а нет общих данных - так и семафоры не нужны

PM MAIL   Вверх
Sqwirl
Дата 25.12.2007, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 1.4.2007

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



Цитата(farad @ 25.12.2007,  19:28)
Цитата(Sqwirl @  25.12.2007,  17:34 Найти цитируемый пост)
- передавать данные через разделяемую память.
это наврядли в рамках безопасного кода
Цитата(Sqwirl @  25.12.2007,  17:34 Найти цитируемый пост)
- использовать семафоры для синхронизации,
а нет общих данных - так и семафоры не нужны

Просто нужно использовать разделяемую память!
PM MAIL   Вверх
tol05
Дата 25.12.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Sqwirl, давай поподробнее. Что за процессы, управляемые или нет, что за данные и зачем.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Sqwirl
Дата 26.12.2007, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 1.4.2007

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



Нужно запускать процессы как будто выполняют работу. Передача данных между ними при помощи разделяемой области памяти (FileMapping - что-то вроде), синхронизация семафоры. Ещё нужно останавливать процесс (работу) по желанию и возобновлять. Всё должно происходить в реальном времени - постоянно должен отражаться ход работ.
PM MAIL   Вверх
tol05
Дата 26.12.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



по поводу разделяемой памяти посмотри
Using Shared Memory in a Dynamic-Link Library
Creating Named Shared Memory, где
Код

[DllImport("kernel32.dll", SetLastError=true)] 
static extern int CreateFileMappingA ( int hFile, ref SECURITY_ATTRIBUTES lpFileMappigAttributes, int flProtect, int dwMaximumSizeHigh, int dwMaximumSizeLow, string lpName) 

struct SECURITY_ATTRIBUTES
{
     int nLength;
     int lpSecurityDescriptor;
     int bInheritHandle;
}




--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Alived
Дата 26.12.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.12.2007

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



Возникла такая ситуация. У меня имеется прилжение a.exe, которое при запуске выдаёт форму с запросом пароля. Задача: написать программу, которая запустит это приложение, введёт имеющийся пароль (и как бы нажмёт "ок") и при правильном пароле (удачном прохождении идентифиуации) завершит свою работу. Реально? Технологию
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "notepad.exe";
            proc.Start();
пытался освоить. Запусить-то запустил, а что дальше делать?
PM MAIL   Вверх
tol05
Дата 26.12.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



а дальше - через P/Invoke
FindWindowEx()
SendMessage()

Что-то наподобие этого
Код

class Program
    {
        [DllImport("user32.dll", SetLastError = true)]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hwnd, [MarshalAs(UnmanagedType.U4)] int Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);


        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport("user32.dll", SetLastError = true)]
        static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

        const int WM_LBUTTONDOWN = 0x0201;
        //...

        static void Main(string[] args)
        {
            //Find Main windows
            IntPtr mainHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "WindowsForms10.Window.8.app.0.2e0c681", "bla-bla");
            if(mainHandle == IntPtr.Zero) return;

            IntPtr registryButtonHandle = FindWindowEx(mainHandle, IntPtr.Zero, "WindowsForms10.BUTTON.app.0.2e0c681", "bla-bla-bla");
            if(registryButtonHandle == IntPtr.Zero) return;

            SendMessage(registryButtonHandle, WM_LBUTTONDOWN, 0, null);

            // ну и т.д. ...            
        }
    }



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Alived
Дата 27.12.2007, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.12.2007

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



Спс за скорый ответ. Я токо начал изучать С#. Да и вообще в программирование до этого не особо вдавался. Можно несколько вопросов по коду?
1. const int WM_LBUTTONDOWN = 0x0201; // 0х0201 - что означает?
2. static void Main(string[] args) // string[] args необходимо? если да, то где это используется в коде, т.е. изначально main() идёт без аргументов?..
3. IntPtr mainHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "WindowsForms10.Window.8.app.0.2e0c681", "bla-bla"); // "WindowsForms10.Window.8.app.0.2e0c681", "bla-bla" - просто в качестве примера, или "WindowsForms10.Window.8.app.0.2e0c681" - какой-то фиксированный параметр?
Ещё раз извиняюсь за глупые вопросы (готов получить такие же ответы smile ). Заранее спасибо!
PM MAIL   Вверх
tol05
Дата 27.12.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата(Alived @  27.12.2007,  00:47 Найти цитируемый пост)
извиняюсь за глупые вопросы (готов получить такие же ответы smile )

я надеюсь, что глупые ответы я перестал давать уже достаточно давно и не стану их давать впредь smile


Цитата(Alived @  27.12.2007,  00:47 Найти цитируемый пост)
1. const int WM_LBUTTONDOWN = 0x0201; // 0х0201 - что означает?

0х означает, что число написано в шестнадцатеричном формате. Т.е. в десятичной системе 0х0201 будет означать 513


Цитата(Alived @  27.12.2007,  00:47 Найти цитируемый пост)
2. static void Main(string[] args) // string[] args необходимо? если да, то где это используется в коде, т.е. изначально main() идёт без аргументов?..

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


Цитата(Alived @  27.12.2007,  00:47 Найти цитируемый пост)
3. IntPtr mainHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "WindowsForms10.Window.8.app.0.2e0c681", "bla-bla"); // "WindowsForms10.Window.8.app.0.2e0c681", "bla-bla" - просто в качестве примера, или "WindowsForms10.Window.8.app.0.2e0c681" - какой-то фиксированный параметр?

в качестве примера. Посмотри сигнатуру методов в Win API, там написано назначение и тип каждого из параметров. Или на www.pinvoke.net

"WindowsForms10.Window.8.app.0.2e0c681" - имя класса, если не ошибаюсь, а вместо "bla-bla" нужно подставлять имя окна (кнопка - это тоже окно)


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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