home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 November / Pcwk1197.iso / LOTUS / Eng-ins / 123 / ICONS / INETSRCH.LSS < prev    next >
Text File  |  1996-10-01  |  9KB  |  307 lines

  1. '********************************************************
  2. '*                            *
  3. '*    Internet Search for 123                *
  4. '*    Authored by Darcy Burner            *
  5. '*    updated by Linda Sharar                *
  6. '*                            *
  7. '********************************************************
  8.  
  9.  
  10.  
  11. Option Public
  12. 'Option Declare
  13.  
  14. Declare Public Function RegOpenKeyExA Lib "advapi32"  Alias "RegOpenKeyExA" (Byval HKEY As Long,Byval lpszSubKey As String,Byval dwreserved As Integer,Byval samDesired As Long, keyresult As Long) As Long
  15. Declare Public Function RegQueryValueExA Lib "advapi32" _
  16.     Alias "RegQueryValueExA" _
  17.     (Byval HKEY As Long,_
  18.     Byval lpszValueName As String,_
  19.     Byval dwreserved As Integer, _
  20.     lpdwtype As Long, _
  21.     Byval lpData As String, _
  22.     readbytes As Long) As Long
  23. Declare Public Function RegCloseKey Lib "advapi32" _
  24.     Alias "RegCloseKey" (Byval HKEY As Long) As Long
  25. Declare Public Function GetPrivateProfileStringA Lib "kernel32" _
  26.     Alias "GetPrivateProfileStringA"_
  27.     (Byval AppName As String,_
  28.     Byval KName As Any, _
  29.     Byval Def As String, _
  30.     Byval RStr As String, _
  31.     Byval nSize As Integer, _
  32.     Byval FName As String) As Integer
  33.  
  34.  
  35. Function GetKey (myKey As String) As String
  36.     
  37.     Dim HKEY_LOCAL_MACHINE As Long
  38.     Dim KEY_READ As Long
  39.     Dim HKEY_CURRENT_USER As Long
  40.     Dim HKEY_CLASSES_ROOT As Long
  41.     Dim KEY_QUERY_VALUE As Integer
  42.     Dim KEY_ENUMERATE_SUBKEYS As Integer
  43.     Dim KEY_NOTIFY As Integer
  44.     
  45.     
  46.     HKEY_CLASSES_ROOT= &H80000000
  47.     HKEY_CURRENT_USER= &H80000001
  48.     HKEY_LOCAL_MACHINE= &H80000002
  49.     
  50.     KEY_QUERY_VALUE=1
  51.     KEY_ENUMERATE_SUBKEYS=8
  52.     KEY_NOTIFY=16
  53.     KEY_READ=KEY_QUERY_VALUE Or KEY_ENUMERATE_SUBKEYS Or KEY_NOTIFY
  54.     
  55.     Dim lstat As Long    
  56.     Dim KeyVal As Long
  57.     Dim KeyReadBytes As Long
  58.     Dim ValueType As Long
  59.     Dim ValueName As String
  60.     Dim ReturnedKeyContents As String * 255
  61.     ReturnedKeyContents=String$(255,Chr$(32))
  62.     
  63.     'Open the registry and get the key address (myKey)
  64.     lstat=RegOpenKeyExA(HKEY_CLASSES_ROOT,myKey,0,KEY_READ,KeyVal)
  65.     KeyReadBytes = 255
  66.     'Get the value of the key at that address (ReturnedKeyContents)
  67.     lstat=RegQueryValueExA(KeyVal,ValueName,0,ValueType, _
  68.     ReturnedKeyContents,KeyReadBytes)
  69.     'Close the registry, thank you (you wouldn't want the keys to escape!)
  70.     regclosekey(KeyVal)
  71.     
  72.     'Get rid of the extra characters in the keystring
  73.     ReturnedKeyContents = Rtrim$(ReturnedKeyContents)
  74.     ReturnedKeyContents = Left$(ReturnedKeyContents,(Len(ReturnedKeyContents)-1))
  75.     
  76.     GetKey = ReturnedKeyContents
  77. End Function
  78.  
  79.  
  80.  
  81. Sub Main
  82.     %Include "Inistrs.lss"
  83.  
  84. '****************************************************************
  85. '*     The following section added by Linda Sharar        *
  86. '*            on 10/2/96                 *
  87. '**************************************************************** 
  88.  
  89.     On Error Goto RangeError
  90.  
  91. '****************************************************************
  92. '*     Continue Function as written by Darcy Burner        *
  93. '*                                 *
  94. '**************************************************************** 
  95.  
  96. 'Select current cell contents
  97.  
  98.     query$ = Selection.Cell(0,0,0).contents
  99.  
  100.     If query$ = "" Then
  101.         Beep
  102.         Messagebox NOTEXT, MB_OK, ERRSTR
  103.         Exit Sub
  104.     End If
  105.  
  106. '****************************************************************
  107. '*     The following section added by Linda Sharar        *
  108. '*            on 9/26/96                 *
  109. '**************************************************************** 
  110.  
  111.  
  112. 'Set Variables for String Indicators    
  113.     singlequote$= "'"
  114.     doublequote$= """"
  115.     carat$= "^"
  116.     
  117. 'Test to see if selected cell contains a text string    
  118.     If Instr(1,query$, singlequote$)=1 Then
  119.         IsText="Yes"
  120.     End If
  121.     If Instr(1,query$, doublequote$)=1 Then
  122.         IsText="Yes"
  123.     End If
  124.     If Instr(1,query$, carat$)=1 Then
  125.         IsText="Yes"
  126.     End If
  127.     
  128. 'If cell does not contain text, give error and exit subroutine    
  129.     If IsText <> "Yes" Then
  130.         Beep
  131.         Messagebox NOTEXT, MB_OK, ERRSTR
  132.         Exit Sub
  133.     End If
  134.     
  135. 'Assuming cell contains text, begin trimming and parsing string for query 
  136.     
  137.     query$= Trim$(query$)    
  138.     Dim symbolposition As Integer
  139.     Dim querylen As Integer    
  140.     
  141. 'First strip away any excess single quotation marks        
  142.     symbol$ = singlequote$
  143.     symbolposition = Instr(1, query$, symbol$)
  144.     While symbolposition <> 0 
  145.         querylen=Len(query$)
  146.         leftquery$=Left(query$, symbolposition-1)
  147.         rightquery$=Right(query$,querylen-symbolposition)
  148.         query$= leftquery$+rightquery$    
  149.         symbolposition = Instr(1, query$, symbol$)
  150.     Wend
  151.     
  152. 'Strip away any excess carat marks    
  153.     symbol$ = carat$
  154.     symbolposition = Instr(1, query$, symbol$)
  155.     While symbolposition <> 0 
  156.         querylen=Len(query$)
  157.         leftquery$=Left(query$, symbolposition-1)
  158.         rightquery$=Right(query$,querylen-symbolposition)
  159.         query$= leftquery$+rightquery$    
  160.         symbolposition = Instr(1, query$, symbol$)
  161.     Wend
  162.     
  163. 'Strip away any excess double quotation marks    
  164.     symbol$ = doublequote$
  165.     symbolposition = Instr(1, query$, symbol$)
  166.     While symbolposition <> 0 
  167.         querylen=Len(query$)
  168.         leftquery$=Left(query$, symbolposition-1)
  169.         rightquery$=Right(query$,querylen-symbolposition)
  170.         query$= leftquery$+rightquery$    
  171.         symbolposition = Instr(1, query$, symbol$)
  172.     Wend
  173.     
  174. 'Strip away spaces on left and right    
  175.     query$= Trim$(query$)    
  176.     
  177. 'Locate Internal Spaces and replace with addition symbols
  178.     contents$=query$    
  179.     firstspace$ = " "
  180.     spaceposition = Instr(contents$, firstspace$)    
  181.     While spaceposition<>"0"
  182.         Mid$(contents$, spaceposition, 1) = "+"
  183.         oldspaceposition=spaceposition
  184.         spaceposition = Instr(contents$, firstspace$)
  185.         While spaceposition=oldspaceposition+1
  186.             leftcontents$=Left(contents$, spaceposition-1)
  187.             contentlen=Len(contents$)                        
  188.             rightcontents$=Right(contents$,contentlen-spaceposition)
  189.             contents$ = Leftcontents$+Rightcontents$
  190.             spaceposition = Instr(contents$, firstspace$)            
  191.         Wend
  192.     Wend
  193.     query$=contents$
  194.  
  195.  
  196. '****************************************************************
  197. '*     Continue Function as written by Darcy Burner        *
  198. '*                                 *
  199. '**************************************************************** 
  200.  
  201.     Dim URL As String
  202.     URL$ = "http://search.yahoo.com/bin/search?p="& query$
  203.     
  204.     ' ** Define the search key list **
  205.     ' ********************************
  206.     Dim strKeylist(3) As String
  207.     strKeylist(0) = "http"    'http
  208.     strKeylist(1) = "htmlfile"    'htmlfile
  209.     strKeylist(2) = ".htm"    '.htm
  210.     strKeylist(3) = ".html"    '.html
  211.     
  212.     ' ** Declare the variables needed **
  213.     ' ****************************************
  214.     Dim ReturnedKey As String * 255
  215.     'Dim DDEAppKey As String
  216.     'Dim DDETopicKey As String
  217.     'Dim ReturnedDDEAppKey As String
  218.     'Dim ReturnedDDETopicKey As String
  219.     Dim strSKey As String
  220.     Dim SeekKey As String
  221.     Dim BrowserPath As String
  222.     Dim LaunchPath As String
  223.     Dim stat As Variant
  224.     
  225.     Dim QuotePos As Integer
  226.     Dim ExePos As Integer
  227.     
  228.     
  229.     ' ** Iterate through the list of keyvalues until a valid one is found **
  230.     ' **********************************************************************
  231.     Forall strPKey In strKeylist
  232.         ReturnedKey = GetKey(strPKey)        
  233.         If ReturnedKey<>"" Then
  234.             'We got something.  Were we looking for a file extension...?
  235.             If Left$(strPKey, 1) = "." Then
  236.                 'Set the DDE command to nothing
  237.                 SeekKey = Trim$(ReturnedKey)
  238.                 'Strip out excess nulls
  239.                 While InStr(SeekKey, Chr$(0)) > 0
  240.                     SeekKey=Left$(SeekKey, InStr(SeekKey, Chr$(0)) -1)
  241.                 Wend
  242.             Else
  243.                 'We weren't looking for a file extension, so get DDE keys (to
  244.                 'send message to app if running) and command key (to launch app
  245.                 'if not already running)
  246.                 'DDEAppKey = strPKey+"\shell\open\ddeexec\Application"
  247.                 'DDETopicKey = strPKey+"\shell\open\ddeexec\Topic"
  248.                 'ReturnedDDEAppKey = GetKey (DDEAppKey)
  249.                 'ReturnedDDETopicKey = GetKey (DDETopicKey)
  250.                 SeekKey = strPKey
  251.             End If    
  252.             'Get the app key pointed to
  253.             strSKey= SeekKey+"\shell\open\command"
  254.             'Get the browser path
  255.             BrowserPath = GetKey (strSKey)
  256.              'Delete all command line params:
  257.             ExePos=Instr(1,BrowserPath,".exe",1)
  258.             If ExePos<>0 Then
  259.                 BrowserPath=Left$(BrowserPath,ExePos+4)
  260.             End If
  261.             'Return path without leading quote, if there is one:
  262.             QuotePos=Instr(BrowserPath,Chr$(34))
  263.             If QuotePos<>0 Then
  264.                 BrowserPath=Mid$(BrowserPath,QuotePos+1)
  265.                 QuotePos=Instr(BrowserPath, CHR$(34))
  266.                 If QuotePos<>0 Then
  267.                     Mid$(BrowserPath,QuotePos)=" "
  268.                 End If
  269.             End If            'Create the command to send to the shell
  270.             LaunchPath=BrowserPath+" "+URL
  271.             Err=0
  272.             On Error Resume Next
  273.             
  274.             ' ** Send the appropriate commands to the shell **
  275.             ' *********************************************************
  276.             'Send the command to application to change to a new URL
  277.             '(Hah!  Wishful thinking, that I could send a DDE command from Script.  Oh well.)
  278.  
  279.             'Send the command to the shell to launch a new browser
  280.             stat=Shell(LaunchPath, 1)
  281.             'If you successfully launched, you're done
  282.             If stat = 33 Then
  283.                 Exit Sub
  284.             End If
  285.             On Error Goto 0
  286.         End If    
  287.     End Forall
  288.     'None of the registry keys pointed to valid browsers, so send an error
  289.     Msgbox NOBROWSER
  290.     Exit Sub
  291.  
  292. '****************************************************************
  293. '*     The following section added by Linda Sharar        *
  294. '*            on 10/2/96                 *
  295. '**************************************************************** 
  296.  
  297. 'New Error control by Linda Sharar    
  298.     RangeError:
  299.         Beep
  300.         Messagebox NOTEXT, MB_OK, ERRSTR
  301.     Exit Sub    
  302.  
  303. End Sub
  304.  
  305.  
  306.  
  307.