ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

29.04.2008, 22:50
|
|
Banned
Регистрация: 13.09.2006
Сообщений: 523
Провел на форуме: 2869410
Репутация:
925
|
|
Сообщение от desTiny
что-нть типа:
Код:
function DownloadFile(const Url: string): string;
var
NetHandle: HINTERNET;
UrlHandle: HINTERNET;
Buffer: array[0..1024] of char;
BytesRead: cardinal;
begin
Result := '';
NetHandle := InternetOpen('Delphi 7.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(NetHandle) then
begin
UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then
{ UrlHandle правильный? Начинаем загрузку }
begin
FillChar(Buffer, SizeOf(Buffer), 0);
repeat
Result := Result + Buffer;
FillChar(Buffer, SizeOf(Buffer), 0);
InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
until BytesRead = 0;
InternetCloseHandle(UrlHandle);
end
else
begin
{ UrlHandle неправильный. Генерируем исключительную ситуацию. }
raise Exception.CreateFmt('Cannot open URL %s', [Url]);
end;
InternetCloseHandle(NetHandle);
end
else
{ NetHandle недопустимый. Генерируем исключительную ситуацию }
raise Exception.Create('Unable to initialize Wininet');
end;
В процессе размер в BytesRead..
Конечно, не совсем то, но всё же...
PS И не такое уж и гавно wininet  А с сокетами работать надо ОсТоРоЖнО 
У меня тоже самое уже есть раза 3 на wininet и 2 на winsock'e,кстати флаг надо ставить чтобы не писал в кеш! Просто надоело подгонять winsock под ответы серверов и коды типо 302 moved here and e.t.c думаю,надо просто сесть и написать это норм а не страдать хней с wininet'ом
UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil,
ВОт тут то и пауза если сервак не пашет,думаю надо все делать через потоки т.к установить таймаут для коннекта мне не удалось.
|
|
|

29.04.2008, 22:56
|
|
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме: 4275992
Репутация:
1188
|
|
Доброго времени суток. есть вопросик.
наведите пожалуйста пример написания функции на делфи, которая запускает программу или файл с помощью другой программы.
на С++ я себе представил это так
Код:
spawnl (P_WAIT,"c:\\windows\\notepad.exe","","input.txt",NULL) ;
нужно сделать тож самое только на Делфи.
Заранее спасибо.
|
|
|

29.04.2008, 23:01
|
|
Banned
Регистрация: 06.01.2008
Сообщений: 904
Провел на форуме: 4037638
Репутация:
1821
|
|
Вот подробно:
Функция ShellExecute
Код:
ShellExecute( hwnd: THandle, // указатель на родительское окно
lpOperation: PChar, //выполняемая операция
lpFile: PChar, // файл или папка
lpParameters: PСhar, //строка параметров запускаемой программы
lpDirectory: PChar, // директория по умолчанию
nShowCmd: integer // состояние окна запущенной программы
);
hwnd
Определяет родительское окно, которое будет получать сообщения от запускаемого приложения (например, об ошибке при запуске).
lpOperation
Определяет выполняемую оперерацию.
"open" - открывает файл lpFile. Файл может быть документом, приложением или папкой.
"print" - печатает файл lpFile. Файл должен быть документом. Если передано приложение, то выполняются действия, аналогичные "open".
"explore" - открывает папку lpFile в проводнике Windows.
nil - аналогично "open".
lpFile
Файл или папка. Функция может открыть или напечатать файл, открыть папку, запустить приложение.
lpParameters
Если lpFile - приложение, то lpParametrs может содержать строку параметров приложения.
Если lpFile - документ или папка, lpParameters должен быть nil.
nShowCmd
Определяет как должно выглядеть окно запущенного приложения
Пример использования:
Код:
ShellExecute(hInstance,"open","Программа",
"Файл", NULL, SW_SHOWNORMAL);
Последний раз редактировалось De-visible; 29.04.2008 в 23:31..
|
|
|

29.04.2008, 23:02
|
|
Постоянный
Регистрация: 05.01.2007
Сообщений: 508
Провел на форуме: 2360904
Репутация:
1393
|
|
Сообщение от NetSter
Доброго времени суток. есть вопросик.
наведите пожалуйста пример написания функции на делфи, которая запускает программу или файл с помощью другой программы.
на С++ я себе представил это так
Код:
spawnl (P_WAIT,"c:\\windows\\notepad.exe","","input.txt",NULL) ;
нужно сделать тож самое только на Делфи.
Заранее спасибо.
Может просто добавить к notepad-у аргумент (место файла). Вот например так WinExec('c:\\windows\\notepad.exe c:\\input.txt',SW_SHOW);
ЗЫ Если программа считывает аргументы при старте, то будет открывать как тебе нужно, иначе она просто откроется, как без аргумента.
Последний раз редактировалось z01b; 29.04.2008 в 23:04..
|
|
|

29.04.2008, 23:12
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
Сообщение от z01b
Может просто добавить к notepad-у аргумент (место файла). Вот например так WinExec('c:\\windows\\notepad.exe c:\\input.txt',SW_SHOW);
ЗЫ Если программа считывает аргументы при старте, то будет открывать как тебе нужно, иначе она просто откроется, как без аргумента.
Micro$oft не рекомендует пользоваться функцией winexec, она оставлена только для совместимости с 9x
ShellExecute - что-то похожее
Ни ту, ни другую функцию заставить работать нормально и правильно лично мне не удалось.
Посему использую CreateProcess.
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|

29.04.2008, 23:15
|
|
Постоянный
Регистрация: 05.01.2007
Сообщений: 508
Провел на форуме: 2360904
Репутация:
1393
|
|
Сообщение от desTiny
Micro$oft не рекомендует пользоваться функцией winexec, она оставлена только для совместимости с 9x
ShellExecute - что-то похожее
Ни ту, ни другую функцию заставить работать нормально и правильно лично мне не удалось.
Посему использую CreateProcess.
У меня с WinExec, проблем не возникало ...
|
|
|

29.04.2008, 23:16
|
|
Banned
Регистрация: 06.01.2008
Сообщений: 904
Провел на форуме: 4037638
Репутация:
1821
|
|
Сообщение от desTiny
Micro$oft не рекомендует пользоваться функцией winexec, она оставлена только для совместимости с 9x
ShellExecute - что-то похожее
Ни ту, ни другую функцию заставить работать нормально и правильно лично мне не удалось.
Посему использую CreateProcess.
Ха, а ты молодец!
* ShellExecute - запускает оболочку, ассоциированную с расширением файла, передаваемого ей в качестве параметра. Например, если передать файл с расширением doc, то запустится редактор MS Word (если он установлен в системе). В качестве параметра функции можно передать и файл с раширением exe.;
* CreateProcess - создает новый процесс и его первичный поток. Данная функция используется в Win32 для запуска других приложений.;
* WinExec , LoadModule - достались в наследство от Windows 3.x, Microsoft не рекомендует использовать ее в приложениях Win32 (они работают через вызов CreateProcess).
Функция CreateProcess
По сравнению с ShellExecute, функция дает дополнительные возможности по управлению процессом: можно установить начальный приоритет первого потока процесса, выставить положение и размер окна приложения, дождаться завершения процесса, завершить процесс.
Код:
CreateProcess
(lpApplicationName: PChar, // имя исполняемого модуля
lpCommandLine: PChar, // строка параметров запускаемой программы
lpProcessAttributes: TSecurityAttributes, // структура SECURITY_ATTRIBUTES процесса
lpThreadAttributes: TSecurityAttributes, // структура SECURITY_ATTRIBUTES потока
bInheritHandles: LongBool, // флаг наследования текущего процесса
dwCreationFlags: Longword, // флаги способов создания процесса
lpEnvironment: Pointer, // указатель на блок среды
lpCurrentDirectory: PChar, // текущий диск и каталог
lpStartupInfo:TStartupInfo, // структура STARTUPINFO
lpProcessInformation: TProcessInformation // структура PROCESS_INFORMATION
): LongBool;
Использование:
Код:
var
i:LongBool
i:=CreateProcess('Программа', ' файл', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
Код:
CreateProcess('C:WindowsSystem32 otepad.exe', ' c: eadme.txt', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
Последний раз редактировалось De-visible; 29.04.2008 в 23:35..
|
|
|

29.04.2008, 23:47
|
|
Участник форума
Регистрация: 02.11.2007
Сообщений: 230
Провел на форуме: 1819358
Репутация:
75
|
|
Сообщение от KindEcstasy
KIR@PRO
GSM™
Не компилируеться? Как ругается?
На вот эту строчку-
if not WriteFile(hPort, S, StrLen(S), actual_bytes, nil) then begin
а именно на это-
actual_bytes
|
|
|

29.04.2008, 23:57
|
|
Постоянный
Регистрация: 05.01.2007
Сообщений: 508
Провел на форуме: 2360904
Репутация:
1393
|
|
Сообщение от GSM™
На вот эту строчку-
if not WriteFile(hPort, S, StrLen(S), actual_bytes, nil) then begin
а именно на это-
actual_bytes
что имено пишет, дай плз весь листинг ошибки.
|
|
|

30.04.2008, 00:14
|
|
Участник форума
Регистрация: 02.11.2007
Сообщений: 230
Провел на форуме: 1819358
Репутация:
75
|
|
Сообщение от z01b
что имено пишет, дай плз весь листинг ошибки.
[Ошибка] TestRosh.pas(93): Types of actual and formal var parameters must be identical
[Ошибка] TestRosh.pas(97): Undeclared identifier: 'Edit3'
[Ошибка] TestRosh.pas(107): Undeclared identifier: 'PortCombo'
[Ошибка] TestRosh.pas(107): 'END' expected but ')' found
[Ошибка] TestRosh.pas(121): Undeclared identifier: 'PortCombo'
[Ошибка] TestRosh.pas(121): 'END' expected but ')' found
[Ошибка] TestRosh.pas(128): ';' expected but 'IF' found
[Ошибка] TestRosh.pas(132): '.' expected but ';' found
[Ошибка] TestRosh.pas(136): Undeclared identifier: 'Button2'
[Ошибка] TestRosh.pas(142): Undeclared identifier: 'PortCombo'
[Ошибка] TestRosh.pas(27): Unsatisfied forward or external declaration: 'TForm1.FormDestroy'
[Фатальная Ошибка] Project1.dpr(5): Could not compile used unit 'TestRosh.pas'
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|