Newsgroup: it.comp.lang.visual-basic
Titolo: Funzione Cerca di Windows

Salve a tutti...
... come č possibile ricreare su Visual Basic 6 la funzione "cerca file" di 
Windows e piů precisamente quella per contenuto del file (una parola o una 
frase all'interno del file)?
Grazie.
Stride 

 frase all'interno del file)?
Prova (non ho la possibilita' di testarlo su XP)
Set Shell = WScript.CreateObject ("Shell.Application")
Shell.FindFiles
 ' Shell.TrayProperties
'Copia incolla su notepad e salva con estensione .vbs
'tutti i file (*.*)  poi ci clicchi sopra. (per esempio Test.vbs)
'se ti da' errore disattiva l'antivirus
' test >>>  anche se il sendkeys non e' il massimo della affidabilita'
' su un windows98se funziona
Set Shell = WScript.CreateObject ("Shell.Application")
set oShell = CreateObject("WScript.Shell")
Shell.FindFiles
WScript.Sleep 500
oShell.SendKeys"{tab}test{enter}"
--
Fosco

"Stride"
' adattatelo
Private 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
Const SW_SHOW = 5
' form
Private Sub ShowFindDialog(Optional InitialDirectory As String)
ShellExecute 0, "find", _
  IIf(InitialDirectory = "", "", InitialDirectory), _
  vbNullString, vbNullString, SW_SHOW
End Sub
Private Sub Command1_Click()
Call ShowFindDialog("c:\programmi\")
End Sub
--
Fosco

> ' adattatelo
Funziona ma non è quello che intendevo, forse mi sono spiegato male.
:-)
Non voglio che mi si apra la finestra "cerca" di windows ma praticamente 
devo riempire una lista (su vb) con file che soddisfino dei criteri di 
ricerca tipo la finestra "cerca" di windows, in particolare in base al 
contenuto dei file.
In sostanza su vb metto un text dove scrivo il contenuto che voglio cercare 
e un pulsante. clicco e mi riempie la listview.
Grazie.
Stride

"Stride" <stride@libero.t> ha scritto

http://www.sundaysw.com/sw/cod_fsearch/index.html
forse ti puo' servire
ciao, a.

 forse ti puo' servire
Il problema č ricercare il contenuto del file, non il nome (come l'opzione 
"cerca una parola o una
frase all'interno del file" della ricerca di windows)...
Ciao,
Stride 

"Stride" <stride@libero.t> ha scritto

non e' complicato. apri i vari file, poi con instr(), e con calma, guardi se 
la stringa c'e'...
ciao, a. 

 se la stringa c'e'...
Mamma mia e non ci mette troppo a cercare una stringa in 1000 files?
Stride 

 Mamma mia e non ci mette troppo a cercare una stringa in 1000 files?
dicevo appunto "e con calma" :)
hai mai cronometrato in win?
che poi, li' probabilmente e' fatta in qualcosa di piu' efficiente di vb...
ciao, a.

 Mamma mia e non ci mette troppo a cercare una stringa in 1000 files?
E come vorresti fare altrimenti ?
se NON distribuisci l'applicazione e ne fai un uso personale
il FSO e' un metodo veloce :
sDirectory = "C:\WINDOWS\TEMP\Test"
sLogFile = "log.log"
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oLogFile = oFSO.OpenTextFile(sLogFile, 8, True, 0)
Set oFolder = oFSO.GetFolder(sDirectory)
For Each oFile In oFolder.Files
   'If InStr(UCase(oFile.Name), ".EML") Then
     Set oStream = oFSO.OpenTextFile(oFile.Path, 1)
     Do Until oStream.AtEndOfStream
       sLine = oStream.ReadLine
       If InStr(UCase(sLine),"CIPPO") Then
oLogFile.WriteLine "cippo in riga numero  " _
&oStream.line&"  "& oFile.Name
'Msgbox sLine
       End If
     Loop
   'End If
Next
oLogFile.Close
set oShell = CreateObject("WScript.Shell")
oShell.run"log.log"
'Copia incolla su notepad e salva con estensione .vbs
'tutti i file (*.*)  poi ci clicchi sopra. (per esempio Test.vbs)
'se ti da' errore disattiva l'antivirus
-- 
Fosco

 il FSO e' un metodo veloce :
Cosě potrebbe pure andare... ma va bene solo per i txt o sbaglio? Cioč giŕ 
per i documenti word nun funziona?
Grazie,
Stride 

Stride:

Boh non so perche' non ho word installato qui , ma penso di no
pero' per esempio in una dll se e' plain text lo trova
' output
CIPPO in riga numero  2  Nuovo TXT.txt
CIPPO in riga numero  6  Nuovo TXT.txt
CIPPO in riga numero  2  test.dll
CIPPO in riga numero  6  test.dll
' test.vbs
sDirectory = "C:\WINDOWS\TEMP\Test"
sLogFile = "log.log"
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oLogFile = oFSO.OpenTextFile(sLogFile, 2, True, 0)
Set oFolder = oFSO.GetFolder(sDirectory)
res=inputbox("","Uppercase please","CIPPO")
For Each oFile In oFolder.Files
      Set oStream = oFSO.OpenTextFile(oFile.Path, 1)
      Do Until oStream.AtEndOfStream
        sLine = oStream.ReadLine
        If InStr(UCase(sLine),res) Then
oLogFile.WriteLine res &  " in riga numero  " _
&oStream.line&"  "& oFile.Name
        End If
      Loop
Next
oLogFile.Close
set oShell = CreateObject("WScript.Shell")
oShell.run"log.log"
-- 
Fosco

 pero' per esempio in una dll se e' plain text lo trova
Dato che mi serve anche per i file Word (funziona bene anche per i txt) ho 
risolto usando la library di Word cosě:
Dim objMyWordApp As Word.Application
Dim objMyWordDocs As Word.Documents
Dim objMyWordDoc As Word.Document
Dim objMyChars As Word.Characters
Dim objMyRange As Word.Range
Dim strFileName As String
Dim bConfirmConversions As Boolean
Dim bReadOnly As Boolean
Dim bAddToRecentFiles As Boolean
Dim strPasswordDocument As String
Dim strPasswordTemplate As String
Dim bRevert As Boolean
Dim strWritePasswordDocument As String
Dim strWritePasswordTemplate As String
Dim nFormat As Long
Dim nInizio
Dim strDocText As String
Dim nNrChars As Integer
strFileName = "C:\prova.doc"
bConfirmConversions = False
bReadOnly = False
bAddToRecentFiles = False
strPasswordDocument = ""
strPasswordTemplate = ""
strWritePasswordDocument = ""
strWritePasswordTemplate = ""
bRevert = False
nFormat = 0
Set objMyWordApp = New Word.Application
Set objMyWordDocs = objMyWordApp.Documents
Set objMyWordDoc = objMyWordDocs.Open(strFileName, bConfirmConversions, 
bReadOnly, bAddToRecentFiles, strPasswordDocument, strPasswordTemplate, 
bRevert, strWritePasswordDocument, strWritePasswordTemplate, nFormat)
Set objMyChars = objMyWordDoc.Characters
nNrChars = objMyChars.Count
Set objMyRange = objMyWordDoc.Range(0, nNrChars)
strDocText = objMyRange.Text
MsgBox strDocText, vbInformation, objMyWordDoc.Name
Grazie,
Stride