Здравствуйте В коде указанны 2 функции, WinExec или ShellExecute которые идут по порядку т.е. ... WinExec("p.exe"); WinExec("d.exe"); ... как можно сделать, чтобы когда полностью загрузится 1-я программа (p.exe) начала грузится 2-я (d.exe)? Да, Еще очень большая просьба, можете привести пример использования ф-ии: ReadConsoleOutput Спасибо!!!
Добрый день, Quas! Если просто вызывать эти функции, то и получится то, что ты хочешь. Если же тебе надо вызывать последующую прогу после завершения предыдущей, то используй функции CreateProcess и WaitForSingleObject Ответ отправлен: 05.10.2003, 14:58 Отправитель: Dzik Отвечает Извращенок
Добрый день, Quas! Может быть, я ошибаюсь, но это сделать сложно. Правда, если ты точно можешь определить, когда программа полностью загрузилась (например, Doom3 будет загружаться дольше, чем блокнот). Просто софт не посылает сообщений об окончании загрузки. Ответ отправлен: 07.10.2003, 15:34 Отправитель: Извращенок Отвечает BOLT
Добрый день, Quas! 1)По идеи первая функция закончит выполнение после загрузки программы, но т.к. первая программа может еще что-то делать при загрузки (читать данные из реестра/файла), а на самом деле она уже загружена и поэтому выполняется вторая функция и загружает вторую программу. Получается эффект одновременной загрузки. Могу посоветовать поставить между функциями задержку времени. Например:
WinExec("p.exe"); Sleep(2000); //Задержка выполнения на 2 секунды WinExec("d.exe");
// Get a handle to the STDOUT screen buffer to copy from and // create a new screen buffer to copy to.
hStdout = GetStdHandle(STD_OUTPUT_HANDLE); hNewScreenBuffer = CreateConsoleScreenBuffer( GENERIC_READ | // read/write access GENERIC_WRITE, 0, //
not shared NULL, // no security attributes CONSOLE_TEXTMODE_BUFFER, // must be TEXTMODE NULL); // reserved; must be NULL if (hStdout == INVALID_HANDLE_VALUE || hNewScreenBuffer == INVALID_HANDLE_VALUE) { MyErrorExit("CreateConsoleScreenBuffer"); }
// Make the new screen buffer the active screen buffer.
if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer)
) MyErrorExit("SetConsoleActiveScreenBuffer");
// Set the source rectangle.
srctReadRect.Top = 0; // top left: row 0, col 0 srctReadRect.Left = 0; srctReadRect.Bottom = 1; // bot. right: row 1, col 79 srctReadRect.Right = 79;
// The temporary buffer size is 2 rows x 80 columns.
coordBufSize.Y = 2; coordBufSize.X = 80;
// The top left destination cell of the temporary buffer is // row 0, col 0.
coordBufCoord.X = 0; coordBufCoord.Y = 0;
// Copy the block from the screen buffer to the temp. buffer.
fSuccess = ReadConsoleOutput( hStdout, // screen buffer to read from chiBuffer, // buffer to copy into coordBufSize, // col-row size of chiBuffer coordBufCoord, // top left dest. cell in chiBuffer &srctReadRect); // screen buffer source rectangle if (! fSuccess) MyErrorExit("ReadConsoleOutput");
// Set the destination rectangle.
srctWriteRect.Top = 10; // top lt: row 10, col 0 srctWriteRect.Left = 0; srctWriteRect.Bottom = 11; // bot. rt: row 11, col 79 srctWriteRect.Right = 79;
// Copy from the temporary buffer to the new screen buffer.
fSuccess = WriteConsoleOutput( hNewScreenBuffer, // screen buffer to write to chiBuffer, // buffer to copy from coordBufSize, // col-row size of chiBuffer coordBufCoord, // top left src cell in chiBuffer &srctWriteRect); // dest. screen buffer rectangle if (! fSuccess) MyErrorExit("WriteConsoleOutput"); Sleep(10000);
// Restore the original active screen buffer.
if (! SetConsoleActiveScreenBuffer(hStdout)) MyErrorExit("SetConsoleActiveScreenBuffer");
}
Mother fucked dog, named Snoop! Snoop! Mother fucked dog, named Snoop! Snoop! This message was created by EMan 1.5
Ответ отправлен: 05.10.2003, 14:15 Отправитель: BOLT
Вопрос № 1113
Подскажите, пожалуйста, как в Windows (w9x,w2k,xp) работать с USB устройствами. В частности как определить производителя USB диска подключенного к компу.
Приветствую Вас, Eugene! См раздел MSDN "Platform SDK: Windows Management Instrumentation". Там есть класс Win32_USBController. См его.
Will Smith: I am going to Miami! Welcom to Miami! This message was created by EMan 1.5
Ответ отправлен: 05.10.2003, 15:04 Отправитель: BOLT
Вопрос № 1114
Люди! Подскажите пожалуйста как добиться того, чтобы другой процесс не начинался пока не проиграет анимация ТAnimate, Все че знал все попробовал, через while виснет в конце и все тут. Буду очень презнателен.
Добрый день, YAR! методы синхронизации: Event, Mutex, Semaphore к вашим услугам. Все из ВинАпи. Рабочая функция WaitForSingleObject Ответ отправлен: 06.10.2003, 08:14 Отправитель: vitya Отвечает Marouder
Приветствую Вас, YAR! Вряд ли получится запретить винде создавать процесс. Ответ отправлен: 06.10.2003, 14:00 Отправитель: Marouder Отвечает Eugene
Доброе время суток, YAR! Попробуй сделать так: //--------------------------------------------------- void __fastcall TForm1::Button1Click(TObject* Sender) { Animate1->Repetitions = 1; Animate1->OnStop = Button2Click; Animate1->Active = true; } //--------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { ShowMessage("Running"); } //--------------------------------------------------- Т.е. разбивать свою функцию на 2 части, в 1-й запускается Animate, а затем при остановке он сам вызовет твою главную 2-ю функцию. Ответ отправлен: 08.10.2003, 10:17 Отправитель: Eugene
Вопрос № 1116
Добрый вечер. Как можно считать/записать из определенного ключа реестра данные(строки)?
Доброе время суток, Cfm! C помощью функции RegQueryValueEx. Ответ отправлен: 06.10.2003, 14:01 Отправитель: Marouder Отвечает Извращенок
Доброе время суток, Cfm! Посмотри-ка лучше MSDN. Там не один способ описан Ответ отправлен: 07.10.2003, 16:33 Отправитель: Извращенок Отвечает Avl2k
Здравствуйте, Cfm! 1. Можно воспользоваться чистым WinAPI. Тогда надо использовать функции с префиксом Reg: RegOpenKey(Ex), RegQueryValueEx, RegCloseKey и т.д. 2. Можно воспользоваться классом-оберткой ATL CRegKey (лежит в atlbase.h): CRegKey::Open, CRegKey::QueryValue, CRegKey::Close. С уважением, Avl2k. Ответ отправлен: 08.10.2003, 14:00 Отправитель: Avl2k
Вопрос № 1117
Здравствуйте эксперты. Подскажите где у меня ошибка(код в приложении).
Доброе время суток, Ilu! размер cmd у тебя всего лишь 4 байта, когда ты начинаешь конкатенировать строчки записываешь по другим адресам и при выходе из функции происходит исключение, по всей видимости. лечится: 1. char cmd[255]; Или число, которое скорее всего будет больше чем сумма всех трех строчек. но не обеспечивает 100% защиты. 2. char *p = " ", *c, *s; s = Edit1->Text.c_str(); c = Edit2->Text.c_str(); int X = strlen("AAA ") + strlen(p) + strlen(s) + strlen(c); //вместо strlen(s/c) можно использовать метод AnsiString - а для получения длины просто я его не помню а билдера у меня сейчас нет. char * cmd = new char[X]; теперь все будет работать. Ответ отправлен: 06.10.2003, 08:12 Отправитель: vitya Отвечает Marouder
Приветствую Вас, Ilu! Черт поймешь. В компиляторе, наверное. В VC - вроде все нормально. Скорее всего, проблемы с размером массива. Ответ отправлен: 06.10.2003, 14:01 Отправитель: Marouder Отвечает Извращенок
Доброе время суток, Ilu! Во второй и третьей строчках. Так нельзя делать. Определи размер *s и *c явно. Ответ отправлен: 07.10.2003, 16:33 Отправитель: Извращенок
Вопрос № 1118
Я вот не могу додуматься, как под ВинНТ спрятаться из списка процессов. Есть пример на ассемблере с переходом в ring-0, но мне кажется, что можно проще. Никто не знает? Нужно, чтобы порграмму нельзя было увидеть в процессах.
Добрый день, beast! Можно и проще. Только не от всех прог. Но от большинства, включая TaskManager - можно. Пиши Marouder@list.ru. Вышлю исходник. Пришли, кстати, тот пример на ассемблере Ответ отправлен: 06.10.2003, 14:01 Отправитель: Marouder
Вопрос № 1119
Привет всем! Как написать программу (в смысле, какие к ней требования) под NT-консоль(в смысле, так, чтобы она запускалась до загрузки GUI, или в режиме консоли восстановления). Заодно подскажите ключик реестра, чтобы поставить ее в задание запуска при перезагрузке (примером такого является chkdsk, pqmagic). Ссылки приветствуются... P.S. У нас в рассылке по асму никто не ответил...:)
Приветствую Вас, _vt! Интересный вопросец. Вообще, я думаю, что это обычные консольные проги. Попробуй RegMon'ом отследить, что в реестр записывает Partition Magic или Chkdsk. Мож получится.
Ответ отправлен: 06.10.2003, 14:01 Отправитель: Marouder Отвечает Извращенок
Добрый день, _vt! 1. В НТ есть только эмулятор консоли ДОС, но не сам ДОС. ПМ написана полностью на ассемблере и в досе не нуждается. 2. Не знаю Ответ отправлен: 07.10.2003, 16:32 Отправитель: Извращенок
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.