システムwiki

エクスプローラwindows からコレクションへのパスとファイル名を取得しますか?

keldsor 受付中 最終更新日:2020-09-01 07:17

SOLIDWORKSフォーラムでこのコードの断片を見つけ、必要なことを正確に実行するように求めていますが、一部の参照やものが欠落しており、そのフォーラムのメンバーではないので...ここで少し迷ってしまいました!

何が問題で、どのように機能する必要があるかを説明する手助けはできますか-マークされた行にコンパイルエラー「ユーザー定義型が定義されていません」が表示されます:

Function GetSelectedFilesInWinExplorers()As Collection
On Error Resume Next
Set ExpWin=New SHDocVw.ShellWindows<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<1<<<<<<<<<<<コンパイルエラー
ExpWinの各CurrWinの場合
CurrWin.Documentが存在しない場合
CurrWin.Document.FocusedItemが存在しない場合
CurrSelFile=CurrWin.Document.FocusedItem.パス
If CurrSelFile<>"" Then
Result.add CurrSelFile
fileName=Right(CurrSelFile、Len(CurrSelFile)-InStrRev(CurrSelFile、 "\"))
FilePath=VBA.left( CurrSelFile、InStrRev(CurrSelFile、 "\"))
Exit For
End If
CurrSelFile=""
End If
End If
Next CurrWin
Set GetSelectedFilesInWinExplorers=Result
終了関数

Accessフォームで使用して、エクスプローラwindows の検索結果をそのコレクションに入れ、次にAccessフォームのリストボックスに入れたい-詳細については、スレッドを参照してください. incoorporate-Windows-10-searching-content-of-Word ...

コードが機能するためにいくつかの細部が欠けていると思いますが、それを整理することはできません-誰かが助けることはできますか?

編集:ソースへのリンクは次のとおりです:https://forum.solidworks.com/thread/160341

返信リスト(回答:34)

1 #
DavidMc
ひ けldそr
2 #
DavidMc
これが事実である場合、これは機能する可能性があります
Private Sub cmdGetFiles_Click()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Set objFSO=CreateObject( "Scripting.FileSystemObject ")
Set objFolder=objFSO.GetFolder(txtFolder.Value)
Debug.Print objFolder.Name
'lstFiles.Clear
For objFile In objFolder.files
lstFiles.AddItem objFile.Name
Next objFile
End Sub
TextBox、Listbox、Buttonを持つフォームがあります.Textboxはその中にフォルダパスを持っている必要があります.値リストを行ソースタイプとして使用するには、ListBoxを変更する必要があります.
応答2# ->にスキップ
3 #
keldsor

詳細なリンクを参照してください-もう一度ここにあります-すべてをすべて消去します.

アクセスフォームでそれを使用して、検索結果をエクスプローラwindows にそのコレクションに入れると、アクセスフォームのリストボックスに検索結果を取得します.詳細はスレッドを参照してください. Windows 10アクセスフォーム内のWord-Documentsのコンテンツを検索しますか?

それは私の表示されているものは正確に何をするべきです!

もう1つのqを解決しようとしています.

4 #
DanielP

への言及を言いましたか

Microsoftインターネットコントロール(ShDocVW.dll)

応答4# ->にスキップ
5 #
keldsor

あなたが「言う」の代わりに「設定」を意味すると思います-右...私は知らなかった方法がわからない-私に教えてください.

この参考文献を設定するとき-私はいくつかの欠けている寸法を見ていて、このコードを持っています:

関数getSelectedFilesInwineXplorers()collectionとして
shdocvw.ishellwindowsとして、shdocvw.ishelluihelperとしてのCurrwin
stringとしてのrema result
Dim FilePathとして
文字列として、filename
'
EXPWIN= NEW SHDOCVW.SHELLWINDOWS<<<<<<<<<<<<<<<<<<<<<<<<<<<<<(<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<登録時期エラー13をタイプしていない場合はNOTHON SURRWIN.DOCUMENTがNOTHNOTHCRIN.DOCUMENT.FOCUSEITEMは何もない場合は
CruralSelfile= currwin.document.focuseedItem.path
surralselfile<>"" "" "" "" "filename= right(currelSelfile、Len(CurrelSelfile)-Increv(CurrelSelfile、"))
filePath= vba.left(CurrelSelfile、Instrrev(CurralLev)








次のCurrwin
getSelectedFilesInwineXplorers= result
終了関数

しかし、この寸法を完了したことで、「ランタイムエラー13-タイプのミスマッチとマークされた行」、そして私の「間違った」寸法によって引き起こされます、私は思います.

ShDocvw.ShellWindowsに「Currwin」を試してみました-しかし同じエラーも!

コードは「Internet Explorer Windows」用のもので、「エクスプローラwindows 」の場合は問題は問題ですか?

コードで以前のコマンドの結果として:

retval= shell( "explorer.exe"&chr(34)&"search-ms:query="&"whattosearchfor&"&crumb= location: "&wheretosearch&chr(34)、vbnormalfocus)

私は右の検索結果を示すエクスプローラwindows を持っています、そして私はAboWe Subをエクスプローラwindows の内部を収集に入れることができました...しかし、まだ何かがまだ間違っている!

誰もが助けになることができますか?

応答5# ->にスキップ
6 #
AlBorge

Danielが指摘したのは、ShDocvwがInternet Explorer/Network(Windowsエクスプローラ)インタフェースであることです...

https://www.bing.com/search?q= shdocvw&form=edgear&qs=pf&cvid=22F33803D4FB425387C3A26FDB09BB4B&CC=US&Setlang=jp-us&plvar=0&pc=hcts.

shdocvw.shellwindowsとして薄暗いexpwin

コードはこのようなもので始まったはずです:

dim ie、すなわちshdocvw.internetexplorer

(スタックオーバーフローURL)

応答6# ->にスキップ
7 #
keldsor

oh_beeep_、そのコードはまったく使われていません...残念ながら私はそのコードの作者に尋ねることができるので、私はそれを持っているように見せてくれたリンクで私はそれを与えました働くには?

...しかし、彼はそれについて何も言わずにInternet Explorer Windowsを使って働いています.-

私は実際に彼が何を書いたのは、「Dim expwin shdocvw.shellwindows」を書いたのは手がかりがなければならないと思います.私は思う...;-((

Arrrrgh!

応答7# ->にスキップ
8 #
keldsor

いくつかのフーブリングの変化をもちろいですそれはうまくいっているようです、そして私はここで誰かがここでより深い問題について知っていることを願っています!

これにコードを変更しました:

関数getSelectedFilesInwineXplorers()collectionとして
shdocvw.ShellWindowsとして、currwin「shdocvw.shellwindows」として、Dim MurrSelfile
stringとして__>'on on on on on on set result= new collection
expwin= new shdocvw.ShellWindows




EXPWIN= NEW SHDOCVW.ShellWindows

EXPWINの各Currwinの場合は
currwin.documentはそれから

currwinでない場合は
.Document.FocuseItItemは何も
surralselfile= currwin.document.focusedItem.path
surralSelfile<>"" "" "" "filename= right(currelSelfile、Len(CurrSelfile)-Increv) (CurrelSelcile、 "\"))
filepath= vba.left(CurrelSelfile、Instrrev(CurralSelrev、 "\"))


次のCurrwin
getSelectedFilesinWineXplorers= result
終了関数

1)Currwinがどのようなオブジェクトがどのようなものであるかわからないので、この遅いバインディングを使用するだけです-ここで正しいオブジェクトを持っているのはいいでしょう!

2)1つのエクスプローラwindows を開いている場合は、1つのエクスプローラwindows を開いている場合は、右側のwindows がどのwindows であるかを確認することができます.

3)エクスプローラwindows の最初のファイルのみが 'マークされています-コード' winds 'を介して最初のファイルを選択します-しかしそれは

a)右のwindows を選ぶ-多くのものがあった場合

b)そのwindows 内のファイルを実行します-しかし、私はすべてのファイルカウンタをすべて見つけることができません

私の分析のこのスクレーナウンドを見て、コンテンツの最初のファイルを選ぶ3つのファイルを選択し、そこで「Mammografi」という単語が含まれています

編集:コマンドからRETVALを持っています:

retval= shell( "explorer.exe"&chr(34)&"search-ms:query="&"whattosearchfor&"&crumb= location: "&wheretosearch&chr(34)、vbnormalfocus)

この値を示すものは何ですか-時々それは時々それが13492......何ですか...それは正しいエクスプローラwindows を選ぶために使用することができますか?

だから私は思う-正しい?

応答8# ->にスキップ
9 #
AlBorge
これは、検索を保存したときにc\users\[username]\searchフォルダーに保存される、検索に割り当てられた番号です.
応答9# ->にスキップ
10 #
keldsor

?

検索を保存しようとすると、デフォルトの名前は次のとおりです.

Mammografi.Search-MS

実際に最初の部分=マンモグラフィである場所は私が探していた言葉でした...

今回Retval= 13180...だからここでの説明は何ですか?

応答5# ->にスキップ
11 #
DanielP

以下は私にとっては機能します(概念実証)が、運用ソリューションの場合は簡単に改善できます(スリープ状態を解消し、TaskIdに基づいて一度エクスプローラwindows を閉じます).

Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

Public Sub LetFindSomeFiles()
Dim RetVal As Long 'TaskId
Dim ReturnedFiles As Collection

RetVal=Shell( "explorer.exe" "search-ms://query=database*" ""、vbNormalFocus)

Call Sleep(3000) '処理/検索を許可するには遅延が必要です.

Set ReturnedFiles=GetSelectedFilesInWinExplorers()

'ReturnedFilesの各ReturnedFileについて
' Debug.Print ReturnedFile
'次のReturnedFile
End Sub

Function GetSelectedFilesInWinExplorers()As Collection
Dim ExpWin As SHDocVw.ShellWindows 'Object
Dim CurrWin As SHDocVw.InternetExplorer
Dim Result As New Collection
Dim oFolderItems As Object
Dim i As長い

Set ExpWin=New SHDocVw.ShellWindows
On Error Resume Next
Dim CurrSelFile As String
For Each CurrWin in ExpWin
Not Not CurrWin.Document Is Nothing Then
If Not CurrWin.Document.FocusedItem Is Nothing Then
Set oFolderItems=CurrWin.Document.Folder.Items
For i=0 To oFolderItems.Count
Debug.Print oFolderItems.Item(CLng(i)).Name
Result.Add oFolderItems.Item(CLng(i)).Name
Next
End If
End If
Next CurrWin
Set GetSelectedFilesInWinExplorers=Result
End Function

応答11# ->にスキップ
12 #
keldsor

thx-

私は私の状況にいくつかのマイナーなアダプションであなたのコードを試しました、そしてそれを実行することができる-それでも私はまだ問題がある:

1)正しいwindows があるときに決める方法...1つ以上のエクスプローラWNDOWSが開いている場合-RetvalとCurrwin.hwdnは正しいwindows では同じではなく、何も見つけることができません.それ以外のそれはそれをテストするために使用することができますか?

2)終了サブはすべてのオープンエクスプローラwindows をキルします-「検索windows 」

を殺すべきです.

だから唯一の問題は、ファイルを取得するために右windows 1の検出方法を左に検出する方法で、もう一度閉じます.

これを解決するとき、それは超よ解です-右?

応答12# ->にスキップ
13 #
DanielP

シェルは私がしたタスクを返すので、APIを使用してそれをhwndに変換し、適切なwindows を取得する必要があります.

同じhwndを使用すると、完了したら別のAPIを使用してプロセスを終了できます.

そのため、この時点でのすべてはAPI関連です.

応答13# ->にスキップ
14 #
keldsor

OK-整理してみます!

アドバイスと時間をありがとう!

応答14# ->にスキップ
15 #
DanielP

次のように試してください

オプション比較データベース
オプション明示

Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA"(ByVal hWnd As Long、ByVal wMsg As Long、ByVal wParam As Long、lParam As Any)As Long
Public Const WM_CLOSE=16
Private ExplorerHwnd As Long

Public Sub LetFindSomeFiles()
Dim RetVal As Long 'TaskId
Dim ReturnedFiles As Collection
Dim ReturnedFile As Variant
Dim hWnd As Long
Const sSearchTerm As String="database*"

ExplorerHwnd=0
RetVal=Shell( "explorer.exe" "search-ms://query ="&sSearchTerm& "" ""、vbNormalFocus)

Call Sleep(3000) '処理/検索を許可するには遅延が必要です.

Set ReturnedFiles=GetSelectedFilesInWinExplorers(sSearchTerm)

ExplorerHwnd<>0の場合、SendMessage(ExplorerHwnd、WM_CLOSE、0、0)を呼び出します

'Debugging
ReturnedFilesの各ReturnedFileについて
Debug.Print ReturnedFile
次のReturnedFile
End Sub

関数GetSelectedFilesInWinExplorers(ByVal sSearchTerm As String)As Collection
Dim ExpWin As SHDocVw.ShellWindows 'Object
Dim CurrWin As SHDocVw.InternetExplorer
Dim Result As New Collection
Dim oFolderItems As Object
>Dim i As Long

Set WinWin=New SHDocVw.ShellWindows
On Error Resume Next
Dim CurrSelFile As String
For Each CurrWin in ExpWin
If Not CurrWin.Document Is Nothing Then
If CurrWin.Document.Folder.Title=sSearchTerm Then
ExplorerHwnd=CurrWin.hWnd
Set oFolderItems=CurrWin.Document.Folder.Items
For i=0 To oFolderItems.Count
'Debug.Print oFolderItems.Item( CLng(i)).Name
Result.Add oFolderItems.Item(CLng(i)).Name
Next
Exit For
End If
End If
Next CurrWin

Set GetSelectedFilesInWinExplorers=Result
End Function

応答15# ->にスキップ
16 #
keldsor

この最後のコードは本当に近くにあります-私の状況で実行するための小さな変更のみ-オプションベースの設定が異なります!

しかし、管理できない2つの問題が残っています.

1)コードをステップ実行すると、エクスプローラーの検索windows は正常に閉じますが、コードが「それ自体」で実行されていると閉じません!

2)多分これは間違った使用規則ですが、単一の単語を検索するときは、その単語をAccessの検索フォームのテキストボックスに入力するだけでうまくいきます(searchWindowを閉じる以外は-上記のとおり)
しかし、フレースを検索するときは、テキストボックスに二重のqoutationマークを付けてフレースを入力し、次に検索windows と、適切なwindows が見つかった、決して真にならない!
「-で囲まれたフレーズを使ってフレーズを検索し、ORで複数の単語を検索する機能が必要です.テキストボックスで、ユーザーは3つのものを入力するには:

単一の単語:mammgrafi

"i vores liv"-"-marks!

次のような単語:i vores liv-"-marks....... i OR vores OR liv

「WhatToSearchForで...」を探してコーディングを試みましたが、それはフレーズを検索していると見なす必要がありますが、これはちょっと汚いコードだと思います.

何か他のもの...

ユーザーは検索windows を表示しても何も得られないため、シェルコマンドの最後のパラメーター(vbHideまたはvbHidden)で非表示にできると思いました.多くの場合、このように機能するようです-なぜでしょうか.

コードが「単独で実行されている」ときに検索windows が閉じないため、何が問題なのか教えていただければ幸いです.

編集:了解、終了の問題はスリープに関係していることがわかりました-少しスリープする必要があります...そして私は多すぎました-申し訳ありません!

...そして、THXは素晴らしいソリューションです!

応答16# ->にスキップ
17 #
keldsor

ここに何を誤解していますか...私は現在、TaskIDからTaskID(Shellコマンドからの戻り値)からwindows ハンドル(Shell.Generated Explorerwindows )に変換できるコードを取得しようとしました-しかしイベントhoughさまざまな種類の機能を試した-
それは決してうまくいきません-永遠に1つのループと別のループが0(ZORE)を返します...このスレッドを参照してください:

TaskIDからWinHandleへの変換?

それはそれのタイトルでエクスプローラ検索windows を選ばないではなく、「タイトルから」ハンドルを取得するのが良い解決策であると思います-タイトルは検索されたものとは異なります-特別に解消を検索するとき.

だから私は代わりにTaskIDから生成されたHWNDを有します-しかし、それは一生懸命見ます-ここに私が試した2つの機能があります-必要な除去も行いました:

Private Declare Suple Lib "Kernel32"(Byval DWMilliseconds長)
Private Declare Function SendMessage lib "user32" alias "sendmessagea"(Long Chwnd GparAm、byval wmsg、byval wmsg、byval wmsg)任意の

Private Declare関数getParent lib "user32"(byval hwnd long long hwnd)getWindow lib "user32"(Long Long hwnd byval hwnd、byval hwnd long long gcmd)長い
Private DeclareファンクションFindWindow Lib "user32" alias "findwindowa"(文字列としてのbyval lpclassname、文字列としてbyval lpwindowname)getwindowthreadprocessid lib "user32"(Long hwnd long hwnd lpdwprocessid)long
Private Declare Function ShellLExecute lib "shell32.dll" _
(byval hwnd long _
_
_
byval lpfileとして、_
byval lpparameters文字列、_
byval lpdirectoryとしての文字列として、byval nshowcmd長い

プライベートconst wm_close= 16
プライベートエクスプローラ
Private Const gw_hwndnext= 2
関数procidfromwnd(long byval hwnd)
dim idprocこのhwnd forこのhwndのpidを取得します.
getWindowthreadProcessId hwnd、idproc
ProcidFromWnd= idproc
end関数
''関数getWinHandleFrom(Long Long Long Long Long Temphwnd} '' '' '' '' '' '' '' '' '' '' '' '' '' '' grab the windowsを見つける:
'temphwnd= findwindow (VBNullString、VBnullString)
'' '' 'ループまたはそれ以上のwindows ハンドルが見つかりません:
' 'temphwnd= 0
' 'このwindows の親がいないかどうかを確認する
' getParent(temphwnd)= 0次からPID Matchのチェック
'debug.print tid、temphwnd、procidfromwnd(Temphwnd)
' 'tid= procidfromwnd(Temphwnd)
' '' '' ''
'' getWinHandleFrom= temphwnd
'' 'exit検索ループ
' Exit do
''次のwindows を取得した場合は
'' 'temphwnd= getWindow(TEMPHWND、GW_HWNDNEXT)
''ループ
'' end関数
プライベートファンクションInstanceTownd(ByVal TA rget_pid long long
instanceハンドルのwindows ハンドルを返します.
test_hwnd= findWindow(vbnullString、vbnullString)ターゲットを見つけるまでループ.
test_hwnd<>0







>このwindows に親があるかどうかを参照してください.そうでない場合、
''は最上位のwindows です.
getParent(test_hwnd)= 0次第、これは最上位のwindows です.ターゲットインスタンスハンドルがあるかどうかを参照してください.
test_thread_id= _
test_thread_id= _
test_hwnd、_
test_pid)
test_pid= target_pidの場合
'これはターゲットです.
InstanceTownD= test_hwnd



'次のwindows を調べた場合は








End関数

それらのどれも作品していません-ただ永遠にループして0を返して0-なぜ?

応答17# ->にスキップ
18 #
DanielP

次のサンプルを参考にしてください.

https://cardaconsultants.com/files/SearchDemo.zip

応答18# ->にスキップ
19 #
S.A.Mar
こんにちはダニエル、ファイル名検索はうまくいきますが、私の検索は一般的な検索のためにハングします...しかし、それは彼が探している検索を開いたり閉じたりします.よくやった.
応答19# ->にスキップ
20 #
keldsor

ええ、私はここで私がここで使うことができるものを正確に持っていただけです!

吊り下げ式は、右のwindows が見つかったときのコード識別には、Frases Iを検索したときに(多分間違っている場合)、フリーズを二重象徴マークで囲む必要があります.のタイトルを比較するとき
windows とWhatSearchFor-それらは二重quetation-marksのために同じではありません.

編集:今、私は10のフォルダとサブフォルダの10のファイルの1000のファイルで解決策を試してみました.

1)それは単一の単語の魅力的な検索のように機能します!

2)一度にすべての単語が存在するファイル(AND-SEARC)

3)私の解消方法は、ダブルQoutation-MarksでFraseをフェンシングしています...そしてそれはハングアップ

4)*を使用して検索*は仕事も機能しているようです!

5)のようですか?......exspeted 1シングル文字とそれ以上

応答20# ->にスキップ
21 #
keldsor

私は私の承認を少し後ろに連れ戻します-「小さい」個のファイルとフォルダ/サブフォルダの数でうまく機能しています.

コード内で少し変更されたので、リストボックスにはファイルの前に番号があります.

エクスプローラ検索windows を閉じていない場合は、左下隅に表示されます.検索が見つかったファイルの数-私のケース3551の場合は

リストボックスは1440を示しています!

次のリストボックスにリストされているものを変更しようとし、この行を変更しました:

result.add i + 1&"-"&ofolderItems.item(CLNG(i)).名前

これに:

result.add i + 1&"-"&ofolderItems.Item(CLNG(I)).パス

モジュール内のGetSelectedFilesInSexplorErs

再びEXPLORER-SEARCH-WINDAREは以前と同じように見つかったファイルを表示しますが、リストボックスは364とすべての ".docx"ファイルだけを表示します.

ここでの説明は何ですか?

-私にとって非常に勉強しているようです!

応答21# ->にスキップ
22 #
keldsor
Hallooo...なぜこのスレッドが突然終わったのですか-私は何か悪いことをしましたか?
応答22# ->にスキップ
23 #
S.A.Mar

こんにちはケルダー

私はそれをフォローしていましたが、コードの潜水艦で何かを追跡してテストすることは困難です.テストのためにコピーをアップロードできるのであれば素晴らしいでしょうか?

応答23# ->にスキップ
24 #
keldsor

別のフォロワーのダニエルPが、このコードを使用する素晴らしいAccess DBを作成しました-ここにリンクがあります

https://cardaconsultants.com/files/SearchDemo.zip

そして私は自分のversionでそれを変更しました-ただそれをテストするためです.

さらに、自分のAccessフォームで使用するためにさらに削減しました-しかし、指摘したように、この奇妙な動作はまだあります-しかし、10のフォルダー/サブフォルダーに1000個のファイルが必要です-そして私がテストのために提供するのは難しいです;-))

デモを試して、サブフォルダーが含まれるオプションジェネレル検索を使用してください-ここで実行できるラジオバットの選択-本当に素晴らしいデモです!

適切なエクスプローラーwindows を見つけるための別の方法を作成しようとしました-シェルの戻り値からTaskIDを使用していますが、まだ運がありません.

フレイズを検索する場合、この方法は適切ではありません= "-マーク-" i vores liv "のようなフェンスで囲まれた単語-これらの"-マークは何らかの方法で削除され、適切なものを見つけるためのテストが破棄されますexplorer-Windowとコードがハングします!

応答24# ->にスキップ
25 #
S.A.Mar
正しいwindows を見つけるためのテストを破壊するのはなぜですか?検索語をwindows のタイトルと一致させようとしていますか?
応答25# ->にスキップ
26 #
keldsor

単語を検索するときに問題がないとき(Woops-編集を見てください-編集を参照してください!)-しかし、それがいくつかの個々の単語だけでなく、いくつかの個々の単語だけでなく、いくつかの個々の単語だけではなく、それを指定する必要があります.私が積極的に知っているデンマーク語の言葉
1の内容と1つのファイルだけ.

今、エクスプローラwindows でテストを行う必要があります(DIYコードが含まれていません.-)入力した場合は大きな違いがあります.

私はLIV

または

「私はvores liv」

検索フィールドに

-それは私のようです:

実際には最初の(i VORE LIV)はAND-SEARCHです-同じファイル内のコンテンツに3つの3つの単語が見つかります-そしてそれは私に1つ以上のファイルを与えます!

2番目(「私のvores liv」...二重引用符で囲む)は、私が知っている単一のファイルのみを見つける

アクセスサンプルの同じを試してみると、最初に同じ束が同じですが、検索テキストとエクスプローラwindows のタイトルがあるため、コードは1つ目にハングアップします.コード行(関数GetSelectedFilesInwinexplorers)
:

currwin.document.folder.title= ssearchtitle

は同じになることはありません=コードは正しいエクスプローラwindows を見つけることは決してないだろう...!

これが、シェルリターン値を使用して検索検索windows を見つけることができる理由ですが、そのために見つけたコードは他のタイプのWindowsのために機能します-このスレッドを参照してください:

TaskIDからWinHandleへの変換?

あなたはこれに自分自身を返信しました.-)

私はこの整理されたのでとてもうれしいです、私は思う;-)

編集:Wordのエラーや「エクスプローラ検索」のために問題があります-何らかの単語がクラッシュしたときに、隠されたシステムファイルが奇妙な名前で一部の隠された名前を残します(それ自体はクリーンアップする必要があります-そうではありません.)-「エクスプローラ検索」はこれらのファイルを検索します
EventHoufhフォルダ設定はこれらの隠しファイルを表示するように設定されています(そしてフォルダには表示できません!)エクスプローラ検索がオフになったときに隠されたシステムファイルを検索するのはなぜ-愚かなエラー!

応答26# ->にスキップ
27 #
S.A.Mar

私はデモを見ていましたが、それ以来いくつかの変更があったかもしれないと思いました.

ここで寝る時間が正しいwindows を見つけることに関して、私は検索テキストと一致させようとする代わりに、 "folder 'または' filename: 'のどちらのタイトルのどちらかを見つけることができるかもしれないと考えていました.これはコードから来ています
ファイル名または一般検索選択から、開いた検索windows のタイトルにのみ表示されますか?ただの思考

応答27# ->にスキップ
28 #
DanielP

エクスプローラを使用するこの方法では、特に索引付けされていない場所では、完了までにかなりの時間がかかる可能性があるため、待機する必要があります.私はそれがうまくいかなかったところでテストしていません.私はそこに座って私の親指を回しました
分と数分....フォルダを処理するために.hideコマンドを削除して実行するだけで実行しているかどうかを確認するだけです.

それが言っても、あなたは

に見えるのはずっと良くなるかもしれません

' リンク:小道具システムの種類
リンク:SQLからの検索
リンク:SQLを検索します
サブ検索フォーファイム()

objConnection= CreateObject( "Adodb.Connection")
objrecordset= createObject( "adodb.recordset")

objConnection.openプロバイダ= search.collatordso;拡張プロパティ= 'application= windows'; "

objRecordset.Open「SELECTトップSystem.DateCreated、System.DateModified、System.Author、System.FileName、System.FileExtension、System.ItemFolderPathDisplay、System.ItemPathDisplay、System.ItemName、System.MediumKeyWords、System.ItemUrl、システム.kind、system.size
"&_
" SystemIndex "&_
" from scope= 'ファイル:c:/users/myuser/desktop'とsystem.ItemnamedIsplay '%demo%'とsystem.fileextension= '.ACCDB '"&_
" ORDER by system.size desc "、objconnection
objrecordset.eofからdo
' 'objrecordset.fields.item(" system.itempathdisplay ")
debug.print objrecordset.fields.item( "system.itemfolderphdisplay")、objrecordset.fields.item( "system.fileName")、objrecordset.fields.item( "system.fileExtension")
objrecordset.movenext
ループ
end sub

テキスト検索をするためにあなたは

のようなものをすることができます

"ここで、scope= 'ファイル:c:/users/myuser/desktop'と含まれていて、( 'データベース')"&_

とスコープの使用vsディレクトリ指定したディレクトリ(ディレクトリが存在する)またはディレクトリを検索するかどうかを制御します(ディレクトリがあります).

応答28# ->にスキップ
29 #
DanielP

また、デモでは、ラインを使用する代わりに言及するのを忘れていました

ExplorerHwnd<>0の場合、SendMessage(ExplorerHwnd、WM_CLOSE、0、0)を呼び出します

最初に何とかしてexplorer.exe hwndを取得する必要があります.GetSelectedFilesInWinExplorers()の最後に単に使用します

CurrWin.Quit

とてもシンプルで、追加のAPIは必要ありません.

また、search-ms…はシステムのインデックス作成に大きく依存していることを忘れないでください.したがって、インデックス付きフォルダーの場合は超高速ですが、非インデックスフォルダー(およびその後のサブフォルダー)の場合は大幅に遅くなり、テキスト検索を実行するとさらに遅くなります
それは、単純なファイル名検索です.したがって、ここで学ぶべき教訓は、特定のフォルダを常に検索していて、それらをインデックスサービスに追加することがわかっている場合です.パフォーマンスの違いは控えめに言っても劇的です.

応答29# ->にスキップ
30 #
keldsor

ええ、私の親指を数分間回すことについての最初のコメント...わかりませんでした.VBAで実行できる方法に比べて、この方法は非常に速いため、100~500倍高速です.索引を作成しました!

windows を閉じるときに変更を試してみて、「フレイシングフレージング」に「」を使用すると、検索フレイズの問題を回避できるかどうかを確認します.

しかし、エクスプローラwindows で見つかったファイルの数の違いと、結果のコレクションでの数の違い、なぜ検索での数のカウントが大きいほど違いが大きくなるのか疑問に思います-小さな数字...問題ありません-それは奇妙です
そう思います.

しかし、あなたのコードとアイデアのためにthx!

応答30# ->にスキップ
31 #
keldsor

Explorer-Search-Windowと比較して、リストボックス内の欠けているアイテムの問題を検討しました.

Daniel PのデモのLetFindSomeFilesの最後の部分でコードを変更しました-私はListBoxに追加された単一のアイテムを監視することができます-

SET FRITSFILES= getSelectedFilesInWineXPlorers(SSearchTitle)
'ExplorerHWnd<>0を呼び出すと、SendMessage(ExplorerHwnd、WM_CLOSE、0,0,0,0)を呼び出します.>「戻りファイル内の各戻りファイルについて
'' '' debug.printの返品File
'' lst.additem ResturesFile
'' nextfile
i= 1の場合は<<<<<<<<<<<<これは= Explorer-Search-Windowsで見つかった項目-テスト1743
LST.ADDITEM RESULTEDFILES.ITEM(i)
次のI<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<全1743年全体で実行して追加するが...(テキストを参照してください.)
call syscmd(acsyscmdsetstatus、 "")
docmd.hourglass false
msgbox( "jound="&fountfiles.count)
end sub

Explorer-serch-windowのすべての1743が追加されました(= 1743年の間に実行されています)が、IMEDIATEwindows の中にいくつかの項目を要求する場合は、アイテム363とその上にすべての値がnullになります.-私はそれらがコレクションに追加されました!

コレクションは363項目のみを持つことができるかのように、または合計サイズ(=アイテム* weckitemsize)に最大値があります.

ここで何が悪いの?

...私はそれを得ることができない-私を助けて!

編集:それはコレクションではなくこの奇妙なMaxSizeの問題を持つリストボックスです-コレクション内のすべての項目がリストボックスに追加されますが、ListBoxにはListBoxにはvalue nullがある項目があります.これら
アイテム!

応答31# ->にスキップ
32 #
DanielP

マイナーな調整を行い、デモを更新しました(以前と同じリンクです).

https://cardaconsultants.com/files/SearchDemo.zip

しかし、それは今私ができる限りのことです.統合できる基準は他にもありますが、私はいくつかの作業を行う必要があります.おそらく来週になるでしょう.いずれにしても、デモは完全に機能し、あらゆるニーズに簡単に適合させることができます.

@KeldSor
コレクションの反復に関する興味深い問題.私は問題を調査していませんが、時間があるときは検討しますが、少なくとも回避策があります.

応答32# ->にスキップ
33 #
S.A.Mar

こんにちはダニエル、

既に開いているwindows で検索を実行することが可能な場合は知っていますか、つまり2つのファイルエクスプローラwindows が開いている場合は、PID 1とPID 2を開いている場合は、Window PID 2で実行することを強制することができます.新しいwindows を開きますか?

応答32# ->にスキップ
34 #
keldsor

任意のニュース?

KELDが検索しているときは、検索しているパスが見つかるため、すべてのファイルが見つかりました.

\\KeldSHP\users\ksor\documents \slēgtsforskning\slēgtsforskning_v4....

とJPGファイルが見つかりました...ファイルへのパスが含まれているため、Keldが含まれていると思います!

ファイルへのパスで検索を除外する方法は?