Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 372
от 09.10.2003, 13:10

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1131
Отправлено ответов: 2581
Активность: 228.2 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Dzik
Статус: Профессиональный
Общий рейтинг: 111.23
URL: Разработка игрушек
[Подробней >>]
Извращенок
Статус: Профессиональный
Общий рейтинг: 145.81
URL: Новосибирск
Телефон: (3832) 329836
[Подробней >>]
BOLT
Статус: Профессиональный
Общий рейтинг: 167.69
URL: Начинающему программитсу: софт, примеры, документация, Assembler, C & C++.
Телефон: Три раза АУ!
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 108.07
[Подробней >>]
Marouder
Статус: Профессиональный
Общий рейтинг: 122.97
URL: Первый Хабаровский Форум
Телефон: (4212) 21-93-65
[Подробней >>]
Eugene
Статус: Профессиональный
Общий рейтинг: 106.26
URL: мощный файловый архив
[Подробней >>]
 
Avl2k
Статус: Профессиональный
Общий рейтинг: 125.15
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1112. Здравствуйте В коде указанны 2 функции, WinExec или ShellExecute которые идут по порядку т.е. ... Wi... (ответов: 3)
Вопрос № 1113. Подскажите, пожалуйста, как в Windows (w9x,w2k,xp) работать с USB устройствами. В частности как опре... (ответов: 1)
Вопрос № 1114. Люди! Подскажите пожалуйста как добиться того, чтобы другой процесс не начинался пока не проиграет а... (ответов: 3)
Вопрос № 1116. Добрый вечер. Как можно считать/записать из определенного ключа реестра данные(строки)?... (ответов: 3)
Вопрос № 1117. Здравствуйте эксперты. Подскажите где у меня ошибка(код в приложении).... (ответов: 3)
Вопрос № 1118. Я вот не могу додуматься, как под ВинНТ спрятаться из списка процессов. Есть пример на ассемблере с ... (ответов: 1)
Вопрос № 1119. Привет всем! Как написать программу (в смысле, какие к ней требования) под NT-консоль(в смысле, так,... (ответов: 2)

Вопросов: 7, ответов: 16


 Вопрос № 1112

Здравствуйте
В коде указанны 2 функции, WinExec или ShellExecute которые идут по порядку т.е.
...
WinExec("p.exe");
WinExec("d.exe");
...
как можно сделать, чтобы когда полностью загрузится 1-я программа (p.exe)
начала грузится 2-я (d.exe)?
Да, Еще очень большая просьба,
можете привести пример использования ф-ии: ReadConsoleOutput
Спасибо!!!



Вопрос отправлен: 05.10.2003, 13:02
Отправитель: Quas

[Следующий вопрос >>] [Список вопросов]

Отвечает Dzik

Добрый день, 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");

2)Вот пример, выдранный из MSDN:


#include

VOID main(
void)
{
HANDLE hStdout, hNewScreenBuffer;
SMALL_RECT srctReadRect;
SMALL_RECT srctWriteRect;
CHAR_INFO chiBuffer[160];
// [2][80];
COORD coordBufSize;
COORD coordBufCoord;
BOOL fSuccess;

// 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 диска подключенного к компу.



Вопрос отправлен: 05.10.2003, 14:13
Отправитель: Eugene (v_eugene@list.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает BOLT

Приветствую Вас, 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 виснет в конце и все тут.
Буду очень презнателен.


Приложение:


Вопрос отправлен: 05.10.2003, 18:21
Отправитель: YAR

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Добрый день, 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

Добрый вечер.
Как можно считать/записать из определенного ключа реестра данные(строки)?



Вопрос отправлен: 05.10.2003, 20:00
Отправитель: Cfm

[Следующий вопрос >>] [Список вопросов]

Отвечает Marouder

Доброе время суток, 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

Здравствуйте эксперты.
Подскажите где у меня ошибка(код в приложении).


Приложение:


Вопрос отправлен: 05.10.2003, 20:43
Отправитель: Ilu (ilua_m@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Доброе время суток, 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, но мне кажется, что можно проще. Никто не знает? Нужно, чтобы порграмму нельзя было увидеть в процессах.



Вопрос отправлен: 05.10.2003, 21:17
Отправитель: beast

[Следующий вопрос >>] [Список вопросов]

Отвечает Marouder

Добрый день, beast!
Можно и проще. Только не от всех прог. Но от большинства, включая TaskManager - можно.
Пиши Marouder@list.ru.
Вышлю исходник.
Пришли, кстати, тот пример на ассемблере

Ответ отправлен: 06.10.2003, 14:01
Отправитель: Marouder


 Вопрос № 1119

Привет всем!
Как написать программу (в смысле, какие к ней требования) под NT-консоль(в смысле, так, чтобы она запускалась до загрузки GUI, или в режиме консоли восстановления). Заодно подскажите ключик реестра, чтобы поставить ее в задание запуска при перезагрузке (примером такого является chkdsk, pqmagic). Ссылки приветствуются...
P.S. У нас в рассылке по асму никто не ответил...:)



Вопрос отправлен: 06.10.2003, 01:54
Отправитель: _vt (vt@tamb.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Marouder

Приветствую Вас, _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.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (29)
C / C++ (27)
Perl (7)
Builder / Delphi (21)
Pascal (25)
Basic / VBA (9)
Java / JavaScript (9)
PHP (12)
Криптография (9)
WinAPI (16)
Пользователю
Windows 95/98/Me (59)
Windows NT/2000/XP (64)
"Железо" (43)
Поиск информации (29)
Администратору
Windows NT/2000/XP (37)
Linux / Unix (15)
Юристу
Гражданское право (11)
Семейное право (8)
Трудовое право (9)
КоАП (8)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное