Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

OnDownloadComplete или не OnDownloadComplete - вот в чем вопрос   Найти похожие ветки 

 
ИМХО ©   (2004-08-17 16:26) [0]

Использую в своей проге невидимый TWebBrowser.
Как гарантированно узнать, что загрузка страницы завершена?

Дело в том, что OnDownloadComplete вызывается неоднократно при открытии одной страницы - значит это событие не подходит?

OnNavigateComplete2? Или OnDocumentComplete?


 
Rouse_ ©   (2004-08-17 16:30) [1]

Unlike the OnNavigateComplete2 event, OnDownloadComplete occurs even if the Web browser does not successfully navigate to an URL

Не забывай что на странице могут быть несколько фреймов, а также баннеры которые режутся...


 
Ihor Osov'yak ©   (2004-08-18 02:46) [2]

> Не забывай что на странице могут быть несколько фреймов
Для корневого фрейма OnDocumentComplete будет возбуждаться последним, уже после OnDocumentComplete вложенных фреймов.  Как определить, что соотв. OnDocumentComplete относиться к корневому фрейму? Один из вариантов -  сравнивать pDisp с defaultInterface броузера, естественно приводя оба к IUnknown, примерно так:

 if ((pDisp as IUnknown) = (WB.DefaultInterface as IUnknown)) then
 begin

Зы. IE имеет маленький глючек, проявляющийся в том, что не всегда OnDocumentComplete возникает по завершению загрузки (глючек появился где-то на уровне IE5.5, в шестерке не исчез) - глючек заметно чаще появляется на нестабильном канале. Как красиво обойти этот глючек - не знаю, особо не искал, не было актуальным - так  как в вещах, которые делал, меня удовлетворяла тупая проверка по таймеру контекста страницы..

Зы2. OnDocumentComplete говорит не о том, что документ загрузился полностью, а лишь о том, что загрузка окончилась, то есть больше не продолжается . Задача определить действительно ли полностью документ загрузимся, или только окончена загрузка с потерей части документа - на уровне TWebBrowser решить нельзя, во всяком случае я решения не нашел, также не встречал публикаций на эту тему. Когда этот вопрос мне был актуальным - решал его на протокольном уровне.


 
ИМХО ©   (2004-08-18 07:22) [3]

Игорь, так какой ответ на вопрос? Каким событием TWebBrowser"а пользоваться для проверки полной загрузки?

Или нет решения?


 
Rouse_ ©   (2004-08-18 09:24) [4]

Ну так:
> Один из вариантов -  сравнивать pDisp с defaultInterface
> броузера, естественно приводя оба к IUnknown, примерно так:


 
Ihor Osov'yak ©   (2004-08-18 11:40) [5]

2 [3] ИМХО ©   (18.08.04 07:22)

Так все же для начала нужно определить, что имеется в виду под "полной загрузкой".


 
ИМХО ©   (2004-08-18 12:40) [6]

Когда прекращаются обращения TWebBrowser"а к запрашиваемому узлу.

MS IE показывает в статус-панели: Done


 
Ihor Osov'yak ©   (2004-08-19 00:35) [7]

> MS IE показывает в статус-панели: Done

А, тогда OnDocumentComplete. Причем (pDisp as IWebBrowser2) должен относиться к тому броузеру, который инициализировал навигацию (для многофреймового документа, для однофреймового на pDisp  можно внимания не обращать). Здесь под броузером понимается не TWebBrowser, а некая сущность, внутри соотв. активХ, и которая предоставляет соотв. IWebBrowser2.

Как определить броузер - инициатор? В первом OnBeforeNavigate (pDisp as IWebBrowser) как раз будет и он..

Зы. Нужно учитывать вероятность того, что OnDocumentComplete вследствие ранее упормянутого глючка может не возникнуть. Если по логике приложения это критично - можно попытаться по таймеру анализировать IWebBrowser.ReadyState инициатора навигации. Есть и другие методы, но они более сложные в реализации и не дают очевидного преимущества. Например, подписка на нотификацию от IHtmlDocument2, либо анализ на протокольном уровне.

Зы2. Спич от "Зы" есть мое личное мнение.


 
Piter ©   (2004-08-19 00:48) [8]

Я бы сделал так:

procedure TForm1.Button1Click(Sender:   TObject);
begin
 WebBrowser1.Navigate("http://www.delphimaster.ru");

 Repeat
   Application.ProcessMessages;
 Until (WebBrowser1.readyState = 4);

 showmessage("Готово");
end;


 
Ihor Osov'yak ©   (2004-08-19 01:11) [9]

2 [8] Piter ©   (19.08.04 00:48)

и в мало мальски серьезном проекте получишь кучу проблем. Начиная от  очень сильной загрузки процессора во время загрузки страницы. Извиняюсь за тавтологию, русский мне не родной.


 
Piter ©   (2004-08-19 01:39) [10]

Ihor Osov"yak ©   (19.08.04 1:11) [9]
и в мало мальски серьезном проекте получишь кучу проблем


например?

Начиная от  очень сильной загрузки процессора

ничего подобного, можете провести эксперименты. Более того, никто не мешает вам вставлять sleep(100) или типа того. Хотя опять же проверка действует очень быстро. Хотите - напишем тестовую программу и посмотрим насколько сильна загрузка процессора. А вместо того, чтобы мудрить - лучше сделать так. Думаю, это то, что и требуется ИМХО.


 
Ihor Osov'yak ©   (2004-08-19 01:58) [11]

> никто не мешает вам вставлять sleep(100)

и получить еще больше проблем. Подсказка - для начала проведите измерения времени загрузки сайта со слипом и без слипа. Желательно несколько более насыщеного картимками, чем делфимастер. И сравнить количество успешно заргуженных картинок со слипом и без слипа.

> ничего подобного, можете провести эксперименты.
> Хотите - напишем тестовую программу и посмотрим насколько сильна загрузка процессора.

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

> - напишем тестовую программу и посмотрим насколько сильна загрузка процессора.

Напишите, посмотрите. Я вам даже подскажу  - веббровзер там ни причем.
Напишите просто

procedure TForm1.Button1Click(Sender:   TObject);
begin
Repeat
  Application.ProcessMessages;
Until false;
end;

кликните на бутон и понаблюдайте на загрузку процессора.
Кстати, "проверка" здесь действует еще быстрее, и как бы должна меньше нагружать процессор.  

> А вместо того, чтобы мудрить - лучше сделать так

В данной ситуации это относится к Вам. Проведите маленький эксперимент и подумайте над тем, что увидели, и почему так происходит..

Зы. В даный момент времени я нарушаю одно из своих правил - шлю ответ, практически его не проверив. По двум причинам - первая - у меня сейчас делается пересжатие одного видиоролика и процессор и так на 100 процентов загружен - то есть у меня просто нет возможногсти сейчас сделать эксперимент...
Во вторых - такой эксперимент я делал несколько лет назад. С последующим размышлением на тему почему этот внешне безобидный код приводит почти к 100 процентной загрузке процессора. И как с этим бороться.


 
Ihor Osov'yak ©   (2004-08-19 02:11) [12]

Относительно

> например

код вида

procedure TMyForm.DoSomeThing;
begin
Repeat
  Application.ProcessMessages;
Until условие_которое_долго_не_истино;
Что-то_делаем_2;
end;

потенциально опасен тем, что во время выполнения цикла repeat-until пользовательский интерфейс есть доступный и пользователь может запустить иные действия еще до окончания цыкла. То есть может возникнуть такая последовательность событий, которую автор ну никак не предвидел. При такой технике (если все же на нее решиться) нужно намного более тщательно прорабатывать взаимодействие обьектов программы. Что в большинстве случаев дает намного больше проблем, чем некое сомнительное преимущество от якобы простоты решения..

Зы - в тестовом приложении с обработчиком

procedure TForm1.Button1Click(Sender:   TObject);
begin
Repeat
 Application.ProcessMessages;
Until false;
end;

после клика на бутончик попытайтесь закрыть форму крестиком в правом верхнем углу...


 
Piter ©   (2004-08-19 03:16) [13]

Да, будет 100% загрузка процессора. Но! Не стоит забывать, что такое полная загрузка процессора в многозадачной ОС. Естественно, что если нет других задач - ОС будет тратить практически 100% времени на выполнение этого цикла, как и на выполнение любого цикла. И это правильно. Но это не означает, что данная программа так сильно грузит процессор. Ведь как только появятся другие активные приложения - ОС переключиться на них. Если писать тест - то нужно писать стороннее приложение, которое что-то вычисляет. А потом посмотреть насколько замедляться вычисления, если загрузить нашу программу, верно?

Ihor Osov"yak ©   (19.08.04 2:11) [12]
procedure TForm1.Button1Click(Sender:   TObject);
begin
Repeat
Application.ProcessMessages;
Until false;
end;

после клика на бутончик попытайтесь закрыть форму крестиком в правом верхнем углу...


я же не говорил, что код оптимальный. Можно поправить:

Repeat
Application.ProcessMessages;
Until application.Terminated ;


Я и еще одну проблему могу подкинуть - экземпляр WebBrowser вполне может быть уничтожен пока програма ждет readystate=4. Что приведет, вероятно, к AV.

Но это все не о том, я ведь просто подкинул идею. По моему, правильную. Потому что надо дождаться окончания загрузки, окончания работы WebBrowser, а это определяется тем, что он переходит в состояние готовности, что определяется readystate...


 
Piter ©   (2004-08-19 03:16) [14]

Игорь! И не надо фамильярности вроде молодой человек. Ко мне вполне можно обращаться на ты и по нику или по имени


 
Ihor Osov'yak ©   (2004-08-19 09:08) [15]

>Да, будет 100% загрузка процессора.
>я же не говорил, что код оптимальный.

Вам же намекали, что при подходе, продемонстрированом в [8] в большинстве случаев будут создаваться потенциантные грабли, причем довольно часто об этих граблях кодер и не подозревает. И я совсем не спрашивал, как обеспечить "работоспособность  крестика".

>Потому что надо дождаться окончания загрузки
да
>а это определяется тем, что он переходит в состояние готовности, что определяется readystate...
да. Но Вы предложили реализацию,  которая на ровном месте создает потенциальные проблемы.

> И не надо фамильярности вроде молодой человек.
см. [10]
> Хотите - напишем тестовую программу и посмотрим насколько сильна загрузка процессора. А вместо того, чтобы мудрить

Ну-ну.. Вы почему-то предположили что я несу ахинею, почему-то даже не удосужились проверить верно ли Ваше предположение.. И так далее...


 
Piter ©   (2004-08-19 13:41) [16]

Ihor Osov"yak ©   (19.08.04 9:08) [15]
Вам же намекали, что при подходе, продемонстрированом в[8] в большинстве случаев будут создаваться потенциантные грабли, причем довольно часто об этих граблях кодер и не подозревает


хм. О чем это кодер не подозревает? Что не будет закрываться приложение? Это естественно, если кодер этого не знает - его проблема, ему еще рано с WebBrowser работать.
Я же привел код, относящийся к проверке состояния Web Browser, а уж всякие корректировки человек сам будет делать. Я же не знаю нужной ему функциональности.

>Потому что надо дождаться окончания загрузки
да
>а это определяется тем, что он переходит в состояние готовности, что определяется readystate...


странно, что ты говоришь о проблемах. То есть, я так понимаю, твой код не создает никаких потенциальных проблем?
И самое главное, ты не знаешь как переделать свой код, чтобы избавиться от этих потенциальных проблем, а я знаю.
Например, можно сделать таймер, который раз в секунду будет проверять состояние WebBrowser и если оно readystate=4, то генерировать соответствующее событие и выключаться. Что теперь скажешь о требованиях к ресурсам в таком случае?

Правда, побочный эффект есть и в этом случае - с момента "свободы" браузера есть вероятность среагировать только через секунду, но это, думаю, ерунда. Для критичности можно поставить и 500мс, и 200мс.

К тому же надо предусмотреть, что браузеру просто могут сделать FreeAndNil пока программа ждет его освобождения.

Как я уже говорил - я просто подсказал ИДЕЮ. Верную, на мой взгляд идею. Именно по этому пути надо идти. Только усовершенствовать под свои нужды.
Не закрывается окно? Я показывал код.
Много ресурсов ест? Я привел пример с таймером

А вот попробуй переделать свой код, чтобы он корректно отрабатывал?

см.[10]

а чего туда смотреть? В посте [9] ты обратился ко мне на ты. А потом вдруг перешел на вы и молодой человек. А это говорит только о появившейся неприязни. Факт.

Но я ведь не ставил задачи поцапаться с тобой. Я сюда не за этим пришел. Если отвечаю - значит, чем-то хочу помочь человеку, а не разводить бесполезные споры.

Вы почему-то предположили что я несу ахинею

я такого не говорил

Не надо все так воспринимать близко к сердцу... Может, это просто комплекс мастера?


 
nikkie ©   (2004-08-19 14:15) [17]

>Piter
а все из-за того, что ты невнимательно читал.

[7] Ihor Osov"yak
<...> Если по логике приложения это критично - можно попытаться по таймеру анализировать IWebBrowser.ReadyState инициатора навигации. <...>


 
Piter ©   (2004-08-19 15:21) [18]

nikkie ©   (19.08.04 14:15) [17]

Ну я не про интерфейс говорил, а про WebBrowser.ReadyState


 
Ihor Osov'yak ©   (2004-08-19 15:31) [19]

хм..
> ты не знаешь как переделать свой код, чтобы избавиться от этих потенциальных проблем, а я знаю.

Вы мой код видели? Вы от меня слышали, что там есть проблемы? Вы обнаружили там проблемы?

Позволю все же напомнить, что три строчки кода, приведенные Вами, имеют некоторые проблемы. Осознать которые Вам трудновато, даже после прямого указания на них. Я имею ввиду эпизод с загрузкой процессора.

> Может, это просто комплекс мастера?

Знаете, я уже имею соотв. квалификацию как программист, чтобы в большинстве случаев увидеть явный или неявный ляп в трех делфийских строчках, если он там присутствует.  И сделать соотв. выводы об уровне кодера.  Вам повезло/неповезло, что Вы написали именно три таких говорящих за себя строчки. В принцыпе, ничего смертельного, я сам несколько лет назад делал аналогичные ляпсусы. Но в отличие от Вас внимательно читал/слушал  оппонента  и никогда не делал поспешных выводов. Тем более, необоснованных. И еще тем более, не соответсвующих действительности.

Удачи.


 
Ihor Osov'yak ©   (2004-08-19 15:34) [20]

сори за орфографию. Это мое больное место.

Кстати,
> Ну я не про интерфейс говорил, а про WebBrowser.ReadyState
тоже очень информативная реплика :-).


 
Piter ©   (2004-08-19 17:41) [21]

Ihor Osov"yak ©   (19.08.04 15:31) [19]
Вы мой код видели?


он был достаточно хорошо расписано

Вы от меня слышали, что там есть проблемы?

да, слышал

> Нужно учитывать вероятность того, что
> OnDocumentComplete вследствие ранее упормянутого
> глючка может не возникнуть


Ihor Osov"yak ©   (19.08.04 15:31) [19]
которые Вам трудновато


я все прекрасно осознаю. И ответил на все высказывания. Обратного комментария так и не получил... как будтто я ничего и не говорил.

аналогичные ляпсусы

еще раз повторю, что я отвечал про загрузку процессора. Комментария не последовало. Или все, что я говорил априори посчиталось ложью?

Удачи.

спасибо, конечно. Только я сторонник того, что если негативно относишься к человеку - то надо и говорить соответствующе, а не фальшиво желать удачи

P.S. Фигово, еще одни отношения с хорошим человеком испорчены :(


 
ИМХО ©   (2004-08-19 19:19) [22]

Питер, забей, в споре рождается истина!


 
Rouse_ ©   (2004-08-19 20:37) [23]

Не буду рассуждать и не буду становиться ни на чью сторону, просто выскажусь от себя: Application.ProcessMessages; это не ляп - это стиль :)

Каждый овощ, как любит говорить Игорь Шевченко... (дальше сами знаете) :))


 
Piter ©   (2004-08-19 21:37) [24]

ИМХО ©   (19.08.04 19:19) [22]
Питер, забей, в споре рождается истина!


я тоже так думаю... думал... нет, думаю

Rouse_ ©   (19.08.04 20:37) [23]
это стиль :)


плохой стиль?


 
Rouse_ ©   (2004-08-19 21:44) [25]

> плохой стиль?
Я это не говорил, читай замечание про Овощ...


 
Ihor Osov'yak ©   (2004-08-19 22:05) [26]

2 [23] Rouse_ ©   (19.08.04 20:37), и не только.

овощ бывает к месту, и не к месту. В [8] - не к месту.
Попытаюсь обьяснить. Во первых, здесь фактически запускается "вторичный" цыкл обработки сообщеений. Который работает довольно продолжительное время. Активный "вторичный" цыкл делает возможным запускать другие обработчики всяких событий до того, как окончится текущий обработчик. В большинстве случаев такая возможность вносит излишнюю путаницу в проект, требует более тщательной проработки пользовательского интерфейса на предмет блокировки/разблокоровки контролов. Это в лучшем случае. В худшем, разработчик просто не учитывает такой возможности. В примере от [8] делаем по бутончику два щелчка с малым интервалом, таким, чтобы клик не был воспринят как двойной с одной стороны, и с другой - чтобы навигация от первого щелчка еще не была окончена. И что наблюдаем. Вероятнее всего будет повторный вход в обработчик еще до окончания цыкла ожидания (перед началом повторной навигации броузер просто не будет устанавливать готовность, либо мы не успеем поймать ее своим условием на конец цыкла - и что наиболее печально, это поведение может изменяться от версии ИЕ к версии). Далее. Второе вхождение в обработчик будет завершено раньше, чем первое.  То есть выход с обратки второго клика будет наблюдаться раньше, чем выход с обработки от первого клика. Почему так происходит - предлагаю подумать уж очень горячим молодым людям самостоятельно.. Это иллюстрация моих слов в [9] о куче возможных проблем в мало-мальски сложном проекте.

Продолжение сейчас далее будет.


 
Ihor Osov'yak ©   (2004-08-19 22:33) [27]

2 Питер
Но если чесно, меня больше всего убило нежелание разобраться с конкретным указанием на очевидную проблему с загрузкой процессора. И святая уверенность в том, что проблема якобы вымышленная мною - см. пост [10].  
И намеки не то, что окружающие не совсем понимают, что такое многозадачная система..

> Комментария не последовало.

Ибо Вы читаете через строчку. И не желаете вникать в написаное. У меня нет ни желания, ни возможности по нескольку раз указывать на заблуждения, особенно если человек не желает слушать, но зато имеет желание приписать мне то, что не соответсвует действительности.

Или все, что я говорил априори посчиталось ложью?
Нет.  Но большинство в этой ветке либо примеры некачественных решений, либо заблуждения, может и неочевидные, но заблуждения. Приведу еще один пример:

[13]
>Естественно, что если нет других задач - ОС будет тратить практически 100% времени на выполнение этого цикла

У автора этого постинга почему то не возникает вопроса, почему же делфийский цыкл выборки сообщений, который работает в общем то всегда, когда ему не мешают, не создает 100 проц. загрузки процессора. А вот код в стиле [3] - создает. Подумаеш, мелочь какая.. И невдомек запустить 2-3 таких приложения и попытаться продолжить работу на такой системе с тяжеловестными приложениями. Кстати, разобрааться с этим вопросом не так то сложно - достаточно просмотреть исходники VCL вокруг

TApplication.Run,
TApplication.ProcessMessages, TApplication.ProcessMessage,
TApplication.HandleMessage,
TApplication.Idle

и обратить внимание на  такой неприметный вызов WaitMessage  в TApplication.Idle.  Вот присутствие этого вызова и обеспечивет тот факт, что основной поток в случае штатной работы будет просто остановлен в случае отсутствия сообщений, и отсутствие оного в коде стиля [3] обеспечивает факт 100 зогрузки процессора, так как там действительно гоняется пустой цыкл, несмотря на то, нужно его гонять или нет - то есть, есть ли сообщения в очереди на обработку или нет..


 
Ihor Osov'yak ©   (2004-08-19 22:33) [28]

Удалено модератором
Примечание: Дубль...


 
Ihor Osov'yak ©   (2004-08-19 22:47) [29]

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

2 [22] ИМХО ©   (19.08.04 19:19)
> забей, в споре рождается истина!

Это не спор. Это попытка разговора с магнитофоном. Я осознаю свою неправоту.

Зы. (с маленькой надеждойц, что я общался все же не с магнитофоном)
>>Вы мой код видели?

>он был достаточно хорошо расписано

>>Вы от меня слышали, что там есть проблемы?

>да, слышал

Большая просьба указать постинг, номер строчки, где утверждалось, что это описание моего кода и это описание проблем, которые возникают в коде, который разработан мною?


 
Ihor Osov'yak ©   (2004-08-19 23:00) [30]

2
>>Удачи.

>спасибо, конечно. Только я сторонник того, что если негативно относишься к человеку - то надо и говорить соответствующе, а не фальшиво желать удачи

Большая просьба  - не нужно судить по другим согласно собственных предпочтений. Пожелание было искренним.

>> P.S. Фигово, еще одни отношения с хорошим человеком испорчены :(

Во первых, не такой я уж хороший, во вторых нельзя испортить то, чего не было. Конечно, Ваш ник мне теперь запомнился, и с ним связано довольно сильное желание игнора в будущем. Как минимум - клиента в Вашем исполнении я теперь точно смотреть не буду. Времени жалко.


 
Piter ©   (2004-08-20 00:53) [31]

Ihor Osov"yak ©   (19.08.04 23:00) [30]
во вторых нельзя испортить то, чего не было


я не говорил, что испорчены хорошие отношения. Я говорил, что испорчены отношения с хорощим человеком. И дальнейшие ваши слова это только подтверждают

Пожелание было искренним.

да? Сильно сомневаюсь. И это очевидно, что не так. Не можешь ты плохо относится к человеку и при этом искренне желать ему удачи. На словах можешь, но искренне... нет.

Большая просьба  - не нужно судить по другим согласно собственных предпочтений

каких предпочтений? Говорить правду? Это плохо? То есть, лучше говорить ложь?
Игра словами - это понятно. Человеку, который замыслил писать собственную ОС очень часто желают удачи. Да только это не настоящее пожелание удачи, а издевка. И не стоит уверять в обратном.

клиента в Вашем исполнении я теперь точно смотреть не буду

очень жаль

Ваш ник мне теперь запомнился, и с ним связано довольно сильное желание игнора в будущем

еще больше жаль.

Вообще, налицо явное раздражение и даже приступы гнева. Из-за того, что я (допустим!) ошибся где-то, следует, что моя программа плохая. И более того, мои слова игнорируются, видимо, как не несущие смысла. То есть, я как бы не в состоянии сказать интересную вещь.

Могу выразить только недоумение по поводу ваших эмоций. Мне хоть и 20 лет и опыта такого нету, но, по моему, я гораздо эффективнее отношусь к данной проблеме. Я спорю, чтобы выяснить истину, а не чтобы с кем-то посоперничать. Как только спор выходит на эмоции я стараюсь его прекращать. Более того, поэтому и не провляю эмоции. Даже если человек в чем-то кардинально ошибся (с моей точки зрения) - это не значит, что я не могу с ним поговорить и по другим темам.

В общем, не мне, конечно, советовать, но все таки хочу сказать, что не надо столько эмоций выплескивать в форум.
Грязи на меня в этой теме было вылито не меньше, чем мной. Только если я больще прямолинеен, то собеседник, как умудренные жизнью люди, более окольными путями, когда все понятно, но не к чему придраться.

Ладно, закончим. Это мое последнее слово :)



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.035 c
3-1096033930
borissv
2004-09-24 17:52
2004.10.24
Перехват ошибки ???????????


6-1092379795
Дмитрий Ботвин
2004-08-13 10:49
2004.10.24
Список служб на удаленном компьютере


4-1095617644
Тимашов Костя
2004-09-19 22:14
2004.10.24
Windows


1-1097330321
CoolMan
2004-10-09 17:58
2004.10.24
Скрытый поиск по маске с копированием


3-1096295809
Rostislav Rotaru
2004-09-27 18:36
2004.10.24
Полный бэкап базы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский