![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прямой запуск файла из TWebBrowser1 .. [D6, WinME, WinXP]
Solidol © (2005-04-06 08:46:00)я уже 2а года не могу найти ответ...ни накаких форумах мне не могут дать ответ....суть вопроса такова:
Имеется компонент TWebBrowser1 на Form1....в TWebBrowser1 загружается страница index.html...на этой странице расположены ссылки на exe файл...но когда нажимаешь на эти ссылки винда хочет его сохранить...а как запустить сам файл на исполнение я незнаю...мне это надо для autorun’a....прошу помощи в этом вопросе
Solidol (2005-04-08 14:35:00) [1]большое спасибо...буду заново всё вспоминать...
easy (2005-04-08 13:03:00) [2]http://dfc.com.ru/shell.zip
Solidol (2005-04-08 12:04:00) [3]помогите разобратся...я после армии подзабыл...
Solidol (2005-04-07 21:42:00) [4]так и не разобрался в чём дело...пишет ошибка и всё тут...
Solidol (2005-04-07 21:42:00) [5]так и не разобрался в чём дело...пишет ошибка и всё тут...
Solidol (2005-04-07 11:52:00) [6]не то...вот
[Error] Unit1.pas(56): Invalid typecast
ShellExecute(Handle, 'open', pchar(elem.href), (тут ошибка)nil, nil, SW_SHOW);
Solidol (2005-04-07 11:51:00) [7]уже разобрался...но пишет
[Error] Unit1.pas(56): Invalid typecast
ShellExecute(Handle, 'open', pchar(elem.href),ошибка ShellExecute(Handle, 'open', pchar(elem.href),
Rouse_ (2005-04-07 10:55:00) [8]
uses ShellAPI
ShellExecute(Handle, 'open', pchar(elem.href), nil, nil, SW_SHOW);
Solidol (2005-04-07 09:44:00) [9]и вообще со всей строчкой что-то не то (((
Solidol (2005-04-07 09:43:00) [10]вспомнил...но появилась ошибка с нулём (0, 'open',........
Solidol (2005-04-07 09:29:00) [11]выдаёт ошибку в
ShellExecute (0, 'open', pchar(elem.href), '', '', 0);
[Error] Unit1.pas(57): Undeclared identifier: 'ShellExecute'
----
смешно...но я забыл что где прописывать
easy (2005-04-06 09:31:00) [12]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure FormCreate(Sender: TObject);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FNewWndProc, FOldWndProc: Pointer;
h: HWND;
def:boolean;
procedure NewWndProc(var Message: TMessage);
procedure DefineWndProc;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DefineWndProc;
begin
h := GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD); // This was level 1
FNewWndProc := Classes.MakeObjectInstance(NewWndProc);
FOldWndProc := Pointer(GetWindowLong(h, GWL_WNDPROC));
SetWindowLong(h, GWL_WNDPROC, Longint(FNewWndProc));
def:=true;
end;
procedure TForm1.NewWndProc(var Message: TMessage);
var
Doc,elem: oleVariant;
begin
case Message.Msg of
WM_LBUTTONDOWN: begin
Doc := WebBrowser1.OleObject.document;
try
elem := Doc.elementFromPoint(Message.LParamLo, Message.LParamHi);
if elem.tagName='A' then begin
ShellExecute(0, 'open', pchar(elem.href), '', '', 0);
exit;
end;
except
end;
end;
end;
Message.Result := CallWindowProc(FOldWndProc, h, Message.Msg,
Message.WParam, Message.LParam);
end;
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if def then
SetWindowLong(h, GWL_WNDPROC, Longint(FOldWndProc));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('index.html');
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
DefineWndProc;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if def then
SetWindowLong(h, GWL_WNDPROC, Longint(FOldWndProc));
end;
end.