Некорректная Работа Shellexecute

  • Автор темы FLYer
  • Дата начала
F

FLYer

У меня есть текстовая ссылка на определенный сайт. При нажатии на кнопку надо перейти на определенный сайт, который будет в компоненте.
В инете везде написан такой синтаксис функции ShellExecute:

Код:
ShellExecute(Application.Handle, PChar('open'), PChar(DBEdit2.Text), Nil, Nil, SW_SHOW);
Код:
ShellExecute(Form1.Handle, 'open', PChar(DBEdit2.Text), nil, nil, SW_SHOWNORMAL);
Код:
ShellExecute(Application.Handle, PChar('open'), PChar(DBEdit2.Text), nil, nil, SW_SHOW);
Код:
ShellExecute(Application.Handle, nil, PChar(DBEdit2.Text), nil, nil, SW_HIDE);

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

З.Ы. У меня в компоненте DBEdit высвечивается определенная ссылка
 
S

sinkopa

У меня есть текстовая ссылка на определенный сайт. При нажатии на кнопку надо перейти на определенный сайт, который будет в компоненте.
В инете везде написан такой синтаксис функции ShellExecute:

Код:
ShellExecute(Application.Handle, PChar('open'), PChar(DBEdit2.Text), Nil, Nil, SW_SHOW);
ShellExecute(Form1.Handle, 'open', PChar(DBEdit2.Text), nil, nil, SW_SHOWNORMAL);
ShellExecute(Application.Handle, PChar('open'), PChar(DBEdit2.Text), nil, nil, SW_SHOW);
ShellExecute(Application.Handle, nil, PChar(DBEdit2.Text), nil, nil, SW_HIDE);

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

З.Ы. У меня в компоненте DBEdit высвечивается определенная ссылка
Вызывая ShellExecute (по крайней мере с указанными Вами параметрами) Вы "поручаете" системе "догадаться" о действии которое Вы хотели бы выполнить...
К сожалению не всегда она (операционная система) это в состоянии сделать... :)

Вы попробуйте конкретнее "сформулировать" Ваше желание...
Например (в вашем случае) нужно чтобы:
1. Запустилось новое окно Интернет Эксплорера.
2. В открывшемся окне, произошел переход по ссылке (из DBEdit2.Text).
Лучше это делать непосредственно через CreateProcess. (ShellExecute сама использует CreateProcess)
Код:
uses Windows;
...
var
StartUpInfo: TStartUpInfo;
ProcessInfo: TProcessInformation;
begin

FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0);

StartUpInfo.cb := SizeOf(TStartUpInfo);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartUpInfo.wShowWindow := SW_SHOWNORMAL;

CreateProcess('C:\Program Files\Internet Explorer\IEXPLORE.EXE', PChar(DBEdit2.Text), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);

end;
Вот так приблизительно...
Учните только что ссылка должна быть полная. т.е. включать протокол соединения (в данном случае http).
например: https://codeby.net/
 
F

FLYer

Большое спасибо! Код помог :) теперь при каждом клике хотя бы открывается браузер, но почему-то упрямо не видит текстовую ссылку в DBEdit, хотя она у меня скопирована из адресной строки как положено
 
A

AndreyS

Можна использовать WebBrowser


form1.WebBrowser1.Navigate(form1.DBEdit2.Text);

так проще
 
S

sinkopa

Большое спасибо! Код помог :rolleyes: теперь при каждом клике хотя бы открывается браузер, но почему-то упрямо не видит текстовую ссылку в DBEdit, хотя она у меня скопирована из адресной строки как положено
Поясните пожалуйста, что Вы имеете в виду под выражением "не видит текстовую ссылку":
1. браузер открывается но в адресной строке пусто.
2. браузер открывается, адресной строке есть строчка URL, но перехода не происходит.
3. браузер открывается, адресной строке есть строчка URL, но браузер сообщает что сервер не найден...
4. чтото еще?
Можете дать пример "текстовой ссылки" из DBEdit (которую "не видит" браузер) и код, которым вызываете?
Тогда я смогу проверить у себя и указать причину этой Вашей "невидимости".
 
F

FLYer

Отвечаю: браузер открывает домашнюю страницу, хотя в DBEdit написано http://www.facebook.com/
DBEdit берет информацию из поля БД, которое имеет тип Текстовый

код такой же, как Вы показали, вот строка которую я изменила под свой проект:

Код:
CreateProcess('C:\Program Files\Mozilla Firefox\firefox.exe', PChar(DBEdit2.Text), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
 
S

sinkopa

Отвечаю: браузер открывает домашнюю страницу, хотя в DBEdit написано http://www.facebook.com/
DBEdit берет информацию из поля БД, которое имеет тип Текстовый

код такой же, как Вы показали, вот строка которую я изменила под свой проект:

Код:
CreateProcess('C:\Program Files\Mozilla Firefox\firefox.exe', PChar(DBEdit2.Text), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
Для Firefox, открытие страницы правильно вызывать так:
Код:
var
FirefoxURLOptions: string;
//...
begin
FirefoxURLOptions := '-requestPending -osint -url "'+DBEdit2.Text+'"';
CreateProcess('C:\Program Files\Mozilla Firefox\firefox.exe', PChar(FirefoxURLOptions), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
end;
 
Мы в соцсетях:

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