[web] Выдать картинку-принтскрин по урлу сайта.
Да в принципе, и этих средств не надо. Делаешь форк "explorer http://url.domain.arpa" и снимаешь скриншот любым стандартным методом работы с графикой.
я просто хочу, что бы скрипт не на локале был, а на серваке...
Соответственно наверно подойдут только средства ВЕБ разработки...
а зачем?
Тогда свой броузер писать
Интересно стало....
А браузер то писать зачем ?
ну "сервак" может и под windows жить, а там и IE тут как тут
А браузер то писать зачем ?в случае, если только ср-вами ВЕБ разработки
какая разница-то? Что тебе мешает писать на серваке с использованием форков и графических библиотек?
По сути тебе нужна программа, запускающая браузер, вызывающая URL и делающая принтскрин. Для этого WEB юзать не надо )
Если она работает с сервера, то тебе просто оболочку написать надо, которая будет эту программу дергать
под браузером понимаеццо рендерер html'я в растр.
у него, наверное, не свой, а какой-нить халявный сервак
Такой сервис уже есть
Warning: mysql_connect: Access denied for user: '209.68.1.162' (Using password: YES) in /usr/www/users/dvine/danvine.com/iecapture/inc/global.inc.php on line 45не пашет (
Warning: Cannot modify header information - headers already sent by (output started at /usr/www/users/dvine/danvine.com/iecapture/inc/global.inc.php:45) in /usr/www/users/dvine/danvine.com/iecapture/detail.html on line 37
ну не халявный, а обычный хостинг....
а icapture пробовал?
у нах с базой косяк походу..
Надо обязательно привлекать какую-нить шнягу...?
Делаешь форк "explorer http://url.domain.arpa" и снимаешь скриншот любым стандартным методом работы с графикой.а можно об этом поподробнее...
Как сделать это в XP ?
по пунктам, если можно, а то что такое форк я незнаком...
Юзай MSDN. Ключевые слова: _spawn, _exec, system.
Если кто знает, как это делаеться просто (а упоминания о простом способе здесь были)Ю может расскажет поподробнее?
А то с факом и мсдном на неделю застряну...
int mode,
const char *cmdname,
const char *arg0,
const char *arg1,
... const char *argn,
NULL
);
Create and execute a new process.
Parameters
mode
Execution mode for calling process
cmdname
Path of file to be executed
arg0, arg1, ... argn
List of pointers to arguments
Return Value
The return value from a synchronous _spawnl or _wspawnl (_P_WAIT specified for mode) is the exit status of the new process. The return value from an asynchronous _spawnl or _wspawnl (_P_NOWAIT or _P_NOWAITO specified for mode) is the process handle. The exit status is 0 if the process terminated normally. You can set the exit status to a nonzero value if the spawned process specifically calls the exit routine with a nonzero argument. If the new process did not explicitly set a positive exit status, a positive exit status indicates an abnormal exit with an abort or an interrupt. A return value of –1 indicates an error (the new process is not started). In this case, errno is set to one of the following values:
E2BIG
Argument list exceeds 1024 bytes
EINVAL
mode argument is invalid
ENOENT
File or path is not found
ENOEXEC
Specified file is not executable or has invalid executable-file format
ENOMEM
Not enough memory is available to execute new process
Requirements
Routine Required header Compatibility
_spawnl <process.h> Win 98, Win Me, Win NT, Win 2000, Win XP
вводи слова
если тебе нужен именно скриншот (а не распечатанный html то под windows-ом - это делается так:
void OnLoad
{
axWebBrowser1.DocumentComplete += new AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(OnDocComplete);
axWebBrowser1.Navigate (url,
ref flags,
ref frame_name,
ref post_data,
ref headers);
}
void OnDocComplete (object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
new ScreenShot(axWebBrowser1).Bitmap.Save("q.bmp");
}
не в командную же строку...
в любую .Net-овскую, например, в Asp.net-овскую можно
?
А то этот дотнет занимает 2 гига, а у меня места что бы его поставить нет (
ещё IIS нужен, но он тоже никак не 2 гига весит
А на php мона? и у меня апач стоит...
Лихо. А ScreenShot что?
public class ScreenShot
{
public ScreenShot(Control screenControl)
{
this.screenControl = screenControl;
ResetBitmap;
}
Control screenControl;
public Control ScreenControl
{
get
{
return screenControl;
}
}
Bitmap bitmap = null;
public Bitmap Bitmap
{
get
{
return bitmap;
}
}
public void ResetBitmap
{
bitmap = new Bitmap(ScreenControl.Width + 2, ScreenControl.Height + 2);
using (Graphics g = Graphics.FromImage(bitmap
{
IntPtr dc = g.GetHdc;
try
{
SendMessage(ScreenControl.Handle, WM_PRINT, dc,
DrawingOptions.PRF_CHILDREN |
DrawingOptions.PRF_CLIENT |
DrawingOptions.PRF_NONCLIENT |
DrawingOptions.PRF_OWNED);
}
finally
{
g.ReleaseHdc(dc);
}
}
}
[Flags]
private enum DrawingOptions
{
PRF_CHECKVISIBLE = 0x00000001,
PRF_NONCLIENT = 0x00000002,
PRF_CLIENT = 0x00000004,
PRF_ERASEBKGND = 0x00000008,
PRF_CHILDREN = 0x00000010,
PRF_OWNED = 0x00000020
}
private const int WM_PRINT = 0x0317;
private const int WM_PRINTCLIENT = 0x0318;
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, int msg, IntPtr dc,
DrawingOptions opts);
}
}
Прикольно. И работает? Проверял? А как explorer на WM_PRINT реагирует?
explorer - это обычный ActiveX-контрол.
Это я понял. Кстати, в Winforms 2.0 есть уже такой контрол. Мне вот интересно в чем отличие WM_PAINT и WM_PRINT.
дай ссылочку, или скинь скриптик....
Оставить комментарий
stm7884696
Подумал я тут, пока курить ходил, что неплохо было бы написать скриптик, которому даешь адрес урла, а он тебе в ответ картинку аля принт скрин сайта, на который ссылается урл...Вот теперь вопрос, можно ли это вообще как-нить сделать ?