Link to home
Start Free TrialLog in
Avatar of computurwizard
computurwizard

asked on

Opening Url Using Shellexecute Doesn't Work On All Xp Pc's

HELP!

I have an app that uses the following code to launch URLs:

Dim a As Long
a = ShellExecute(0, "open", "http://www.arbortech.com.au/projectplans/coffeetable/coffee.html", 0, 0, 1)

The code works fine EXCEPT ON CERTAIN XP MACHINES.  No errors, just nothing when the label is clicked.  I do not have direct access to the XP PC's as they are customer PC's.

PLEASE tell me someone has experienced this before and knows what to do!
Avatar of AzraSound
AzraSound
Flag of United States of America image

For some reason *.html files are not associated with their default browser??  That's the only thing I can think of.  Maybe send them a simple *.html page and see if they double-click it, if it opens up their default browser.
Avatar of learning_t0_pr0gram
learning_t0_pr0gram

why don't you try opening the url like this:

'Add the Microsoft Internet Transfer Controls 6.0 Component to your form

Dim IE

Private Sub Form_Load()
Set IE = CreateObject("InternetExplorer.Application")
End Sub

Private Sub Command1_Click()
IE.Navigate("http://www.arbortech.com.au/projectplans/coffeetable/coffee.html"), 1
End Sub
The nice thing about ShellExecute is that it uses the user's default browser, so if someone really prefers Netscape, it would use Netscape, or Opera, etc.  Using IE Automation forces the user to use IE, though, it is fairly gauranteed to work as I am not aware of Windows machines that do not have IE loaded.


>>'Add the Microsoft Internet Transfer Controls 6.0 Component to your form

Actually, the way your code is written, no reference is required since you use late-binding
try changing the parameters as below

ShellExecute hwnd, "OPEN", "www.google.com", vbNullString, vbNullString, 1


k'Regards

JBS
yes, you're right Azra, i wasn't thinking.. :(
Avatar of computurwizard

ASKER

Oddly enough, this isn't working either.  I put the shellexecute declaration in a public module like this:

Public Declare Function ShellExecute _
Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation _
As String, ByVal lpFile As String, ByVal _
lpParameters As String, ByVal lpDirectory _
As String, ByVal nShowCmd As Long) As Long

Do I need to put it on every form with a shellexecute hyperlink instead?
Could it be a problem where the user is missing shell32.dll?
Seems to be on only a few random PC's running XP.
>>Do I need to put it on every form with a shellexecute hyperlink instead?
No, just place declaration in BAS module and declare it as public.

>>Could it be a problem where the user is missing shell32.dll?
No, shell32.dll exists on all Windows OS (except 3.x ;-])



If you can, look at the LastDllError, it can help.
Look at this:


Return Values (ShellExecute API)

If the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.
If the function fails, the return value is an error value that is less than or equal to 32. The following table lists these error values:

Value      Meaning
0      The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND      The specified file was not found.
ERROR_PATH_NOT_FOUND      The specified path was not found.
ERROR_BAD_FORMAT                      The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).
SE_ERR_ACCESSDENIED      The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE      The filename association is incomplete or invalid.
SE_ERR_DDEBUSY      The DDE transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL      The DDE transaction failed.
SE_ERR_DDETIMEOUT      The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND      The specified dynamic-link library was not found.
SE_ERR_FNF      The specified file was not found.
SE_ERR_NOASSOC      There is no application associated with the given filename extension.
SE_ERR_OOM      There was not enough memory to complete the operation.
SE_ERR_PNF      The specified path was not found.
SE_ERR_SHARE      A sharing violation occurred.
 

Remarks

The file specified by the lpFile parameter can be a document file or an executable file. If the file is a document file, the ShellExecute function opens or prints it, depending on the value of the lpOperation parameter. If the file is an executable file, the ShellExecute function opens it, even if lpOperation specifies printing.



Turns out it could be a problem if the user has AOL 9.0 Optimized installed.  Haven't confirmed it, but at least on one machine that is the case.  Workaround?
ASKER CERTIFIED SOLUTION
Avatar of modulo
modulo

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial