что-нть типа: Code: 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'ом ВОт тут то и пауза если сервак не пашет,думаю надо все делать через потоки т.к установить таймаут для коннекта мне не удалось.
Доброго времени суток. есть вопросик. наведите пожалуйста пример написания функции на делфи, которая запускает программу или файл с помощью другой программы. на С++ я себе представил это так Code: spawnl (P_WAIT,"c:\\windows\\notepad.exe","","input.txt",NULL) ; нужно сделать тож самое только на Делфи. Заранее спасибо.
Вот подробно: Функция ShellExecute Code: ShellExecute( hwnd: THandle, // указатель на родительское окно lpOperation: PChar, //выполняемая операция lpFile: PChar, // файл или папка lpParameters: PСhar, //строка параметров запускаемой программы lpDirectory: PChar, // директория по умолчанию nShowCmd: integer // состояние окна запущенной программы ); Пример использования: Code: ShellExecute(hInstance,"open","Программа", "Файл", NULL, SW_SHOWNORMAL);
Может просто добавить к notepad-у аргумент (место файла). Вот например так WinExec('c:\\windows\\notepad.exe c:\\input.txt',SW_SHOW); ЗЫ Если программа считывает аргументы при старте, то будет открывать как тебе нужно, иначе она просто откроется, как без аргумента.
Micro$oft не рекомендует пользоваться функцией winexec, она оставлена только для совместимости с 9x ShellExecute - что-то похожее Ни ту, ни другую функцию заставить работать нормально и правильно лично мне не удалось. Посему использую CreateProcess.
Ха, а ты молодец! Функция CreateProcess Code: 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; Использование: Code: var i:LongBool i:=CreateProcess('Программа', ' файл', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo); Code: [COLOR=Green]CreateProcess('C:WindowsSystem32 otepad.exe', ' c: eadme.txt', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);[/COLOR]
На вот эту строчку- if not WriteFile(hPort, S, StrLen(S), actual_bytes, nil) then begin а именно на это- actual_bytes
[Ошибка] 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'
Gsm, поменяй тип переменной actual_bytes на DWord и будет тебе счастие =) ЗЫ Это из за версии компайлера. Код был написан очень давно.
to De-visible - не компилируется (выдает ту же самую ошибку) to z01b - при замене на DWord ругается на DWord И если можно скиньте какой нибудь пример работы с базой данных.
Rакой у тебя компайлер(компилятор)? Я скомпил на Делфи 7 и все окей. Вот сылка на мой проект + ехе http://webfile.ru/1913462
вместо dword'а надо в делфе писать longword Вот, кстати... Может хоть ты мне объяснишь, как файл с расширением .url запустить?
Код ужасный, но работает. Убил часик на нем. Сначало показалось что легко но не так то было =) Code: program Project2; {$APPTYPE CONSOLE} uses SysUtils; var f,outf:TextFile; b,a,a1:string; x1,x2,y1,y2,i:integer; bl:boolean; begin Assign(outf,'C:\\out.txt'); Rewrite(outf); Assign(f,'C:\\file.xml'); Reset(f); while not EOF(F) do begin while not EOLN(f) do begin read(f,a); end; readln(f); x1:=pos('<display-name>',a); x2:=pos('</display-name>',a); y1:=pos('<entry uri="sip:',a); y2:=pos('@sipnet.ru">',a); a1:=copy(a,x1+length('<display-name>'),x2-x1-length('<display-name>')); b:=copy(a,y1+length('<entry uri="sip:'),length(a)-y2); if y2<>0 then begin bl:=true; write(outf,'Телефон: '); write(outf,b+' '); end; if bl=true then if x1<>0 then begin write(outf,'Жертва: '); writeln(outf,a1); write(outf); bl:=false end; end; close(outf); end. Вот такой результат выдает при парсинге твоего файла Code: Телефон: 74933193454 Жертва: Фомин Телефон: 74952595438 Жертва: Лена Телефон: 78616722508 Жертва: Глазастый ЗЫ Если что-то не то, значит у тебя в ряд больше 256 символов.