[Delphi?] Openen van URL in standaard browser

Pagina: 1
Acties:
  • 260 views sinds 30-01-2008
  • Reageer

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Weet iemand hoe ik een URL kan openen vanuit mijn Delphi programma in de standaard browser van de gebruiker. Ook de keuze of de URL in een nieuw venster of in een huidige venster (als die er is) moet worden geopend wil ik kunnen maken.

Ik heb wel een functie, maar die werkt alleen goed in IE5.01 (IE 6.0 opent hem steeds in z'n huidig venster).
code:
1
ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOWMAXIMIZED);

Is DDE misschien een optie?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Ik heb geen IE 6.0 maar werkt dit niet?
code:
1
2
  ShellExecute(0, 'open', 'IExplore.exe', 'www.google.com',
    '', SW_SHOWMAXIMIZED);

Verwijderd

Op donderdag 20 september 2001 12:03 schreef DiFool het volgende:
Ik heb geen IE 6.0 maar werkt dit niet?
code:
1
2
  ShellExecute(0, 'open', 'IExplore.exe', 'www.google.com',
    '', SW_SHOWMAXIMIZED);
het gaat om de standaard browser, niet om IE, als je netscape/opera/mozilla als standaard browser hebt ingesteld werkt dit uiteraard niet he :)

Verwijderd

Oeps, iets te snel gelezen denk ik

Staat dat niet in de registry op:

HKEY_CLASSES_ROOT\htmlfile\shell\open\command

Verwijderd

Je moet gewoon het adres uitvoeren en niet IExplorer.exe.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op donderdag 20 september 2001 12:40 schreef cartman3380 het volgende:
Je moet gewoon het adres uitvoeren en niet IExplorer.exe.
Dat doe ik ook met de bovenstaande functie, maar ik wil de keuze hebben dat hij wel of niet in een nieuw venster komt.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Hoi Jelmer,

Je moet het via DDE doen heb ff gezocht en op borland.com stond een perfecte sample heb em ff gebouwd en geprobeerd en hij werkt goed je kan hem hier downloaden ...

Sample Website in new window

Succes verder.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op donderdag 20 september 2001 14:05 schreef 0101-Run het volgende:
Hoi Jelmer,

Je moet het via DDE doen heb ff gezocht en op borland.com stond een perfecte sample heb em ff gebouwd en geprobeerd en hij werkt goed je kan hem hier downloaden ...

Sample Website in new window

Succes verder.
Thanks voor de hulp, ik zal er vanavond even beter naar kijken. Zit nu namelijk op school.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Op die borland site die jij waarschijnlijk bedoelt (http://community.borland.com/article/0,1410,16858,00.html) staat wel
Note: Not all versions of Internet Explorer will respond with a new window.

  • jopiek
  • Registratie: September 2000
  • Laatst online: 06-05 15:04

jopiek

Tja... 'ns ff denken.

beste is gewoon executefile (fmxutils.pas) uit te voeren met de url als param... werkt over het algemeen prima...

Cogito Ergo Credo


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op donderdag 20 september 2001 22:55 schreef jopiek het volgende:
beste is gewoon executefile (fmxutils.pas) uit te voeren met de url als param... werkt over het algemeen prima...
Wat bedoel je precies, voorbeeld???

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

ExecuteFile is een wrapper functie die ShellExecute aanroept. Maar werkte dat vb van de borland site niet?

  • jopiek
  • Registratie: September 2000
  • Laatst online: 06-05 15:04

jopiek

Tja... 'ns ff denken.

Op donderdag 20 september 2001 23:26 schreef jelmervos het volgende:

[..]

Wat bedoel je precies, voorbeeld???
ik dacht dat jij dat toch moest begrijpen als delphi diehard:

hier haal ik een url uit een db veld als je op een knop drukt en voer deze uit in de standaard browser...

var url : string;
url := Hoofdtabel.Fields[ofieldnumber].AsString;
if url <> '' then
ExecuteFile(url, '', '', sw_show);

Cogito Ergo Credo


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op vrijdag 21 september 2001 08:01 schreef jopiek het volgende:

[..]

ik dacht dat jij dat toch moest begrijpen als delphi diehard:

hier haal ik een url uit een db veld als je op een knop drukt en voer deze uit in de standaard browser...

var url : string;
url := Hoofdtabel.Fields[ofieldnumber].AsString;
if url <> '' then
ExecuteFile(url, '', '', sw_show);
Hiermee start je gewoon de URL op, en pakt Windows het programma wat aan http vast zit. Werkt wel goed, maar ik kan dan niet de keuze maken tussen wel of niet een nieuw venster van de browser. ExecuteFile komt op hetzelfde neer als ShellExecute toch?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

heb je die sample nog geprobeerd jelmer ??

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op vrijdag 21 september 2001 11:34 schreef 0101-Run het volgende:
heb je die sample nog geprobeerd jelmer ??
Ja, zeker. Ziet er goed uit. Ga het zeker gebruiken als voorbeeld voor mijn eigen code.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ik haal hem toch nog even omhoog, omdat ik het niet goed voor elkaar krijg. Heeft iemand hier niet een simpel voorbeeld hoe je dit moet doen?

Ik zit steeds de oplossing te zoeken bij DDE:
code:
1
2
3
4
if DDEConv.SetLink('iexplore', 'WWW_OpenURL') then
  if DDEConv.RequestData(URL + ',,0') <> nil then
    if DDEConv.SetLink('iexplore', 'WWW_Activate') then
    URLFired := DDEConv.RequestData('0,0') <> nil;

Maar het vreemde is dat als er geen IE is geopend, hij er gelijk 2 opent. Is er wel een IE geopend dat werkt het perfect.

Wat ik dus wil is dat hij een URL (http://) in een nieuw venster opent van de standaard browser. Is deze nog niet gestart, dan starten. Iemand?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Bedoel je dat hij naar www.microsoft.com/windows/ie_intl/nl/download/ gaat? Dat is een feature van microsoft volgens mij :)

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op maandag 01 oktober 2001 12:23 schreef DiFool het volgende:
Bedoel je dat hij naar www.microsoft.com/windows/ie_intl/nl/download/ gaat? Dat is een feature van microsoft volgens mij :)
Nee, dat bedoel ik dus totaal niet.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Kijk eens of URLFired False is, zoja haal dan
code:
1
2
  if UrlFired = false then
    WinExec(StrPCopy(@p, URL), SW_SHOWNORMAL);

weg

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Allereerst excuses voor het ophalen van dit oude topic, maar ik heb een oplossing gevonden. (ik zat namelijk met het zelfde probleem)
Delphi schreef op 01 oktober 2001 @ 12:10:
Wat ik dus wil is dat hij een URL (http://) in een nieuw venster opent van de standaard browser. Is deze nog niet gestart, dan starten. Iemand?
Zoals DiFool eerder al aangaf ligt de oplossing in het Windows register. Niet in de class htmlfile, maar http. Door de volgende key uit te lezen, kun je achter het opstart comando komen dat gebruikt wordt als je alleen een url laat uitvoeren.
code:
1
HKEY_CLASSES_ROOT\http\shell\open\command
Als je nu een nieuw proces aanmaakt, en dan die executable aanroept en de url als parameter meegeeft zou er een nieuwe browser moeten openen met deze url.

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Als je alleen de URL uitvoerd, ligt het aan je Browser instellingen of hij al dan niet in een nieuw scherm komt (HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main - AllowWindowReuse), oftwel IE -> Extra -> Opties -> Geavanceerd -> Vensters opnieuw gebruiken.

Misschien kan je bij het starten van de URL eerst deze waarde in het register aanpassen, en daarna terug zetten op de oude waarde. Maar ik weet niet of IE elke keer in het register kijkt, of dat alleen bij het opstarten van IE doet.
In het eerste geval gaat dit heerlijk werken, in het 2e geval niet.

Dan zou je met FindWindow kunnen zoeken naar een IE venster (caption = "* - Microsoft Internet Explorer" oid).
Als er nix gevonden is doe je ShelExec met de url.
Is er wel 1 gevonden, dan voer je IE.exe uit als het in een nieuw scherm moet komen, en als hij in een huidig scherm moet komen.....
tja. Dan moet je effe goed doorzoeken ;)

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Aha je hebt mazzel :D
Dit werkt als een tiet!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button1Click(Sender: TObject);

  Function StartFile(Const FileNaam, Param : String) : Boolean;
  Begin
    Result := ShellExecute(GetDesktopWindow(), nil, PChar(FileNaam), PChar(Param), nil, SW_NORMAL) > 32;
  End;

var Reg: TRegistry;
    OldValue: Integer;
begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  Reg.OpenKey('Software\Microsoft\Internet Explorer\Main', False);
  OldValue := Reg.ReadInteger('AllowWindowReuse');
  If rbHuidig.Checked Then Reg.WriteInteger('AllowWindowReuse', 1)
    else Reg.WriteInteger('AllowWindowReuse', 0);
  StartFile('http://www.google.com', '' );
  Sleep(1000);
  Reg.WriteInteger('AllowWindowReuse', OldValue);
end;


Iig met XP en IE 6

[ Voor 14% gewijzigd door Guillome op 04-02-2004 21:52 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Mensen mensen toch :)

Waarom zoveel code eromheen verzinnen als het gewoon een *instelling* van IE zelf is? Als de gebruiker het vervelend vindt, moet hij/zij die optie maar omzetten. Simpel genoeg toch? Het is ook niet aan jou als programmeur om te bepalen of een URL in een nieuw venster geopend wordt. Je opent gewoon een URL, meer niet.

[ Voor 25% gewijzigd door _Thanatos_ op 05-02-2004 01:40 ]

日本!🎌

Pagina: 1