C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

ウインドウを更新する方法 /がむんだ (18/04/11(Wed) 19:33) #87100
Re[1]: ウインドウを更新する方法 /魔界の仮面弁士 (18/04/11(Wed) 22:12) #87103
  └ Re[2]: ウインドウを更新する方法 /がむんだ (18/04/13(Fri) 14:26) #87123
    └ Re[3]: ウインドウを更新する方法 /魔界の仮面弁士 (18/04/13(Fri) 16:13) #87127
      └ Re[4]: ウインドウを更新する方法 /がむんだ (18/04/13(Fri) 16:51) #87128
        └ Re[5]: ウインドウを更新する方法 /魔界の仮面弁士 (18/04/14(Sat) 02:35) #87135


親記事 / ▼[ 87103 ]
■87100 / 親階層)  ウインドウを更新する方法
□投稿者/ がむんだ (1回)-(2018/04/11(Wed) 19:33:04)

分類:[.NET 全般] 

VB.NETを使って
ファイルを移動させたり、生成したりするプログラムを作成したのですが
Windows10を使っていますがファイルを生成した直後
生成したファイルはエクスプローラーのウインドウのファイルリストの最後に表れます。
ここで、F5キーを押さないとファイル名でソートされません、

それでVBを使って、ファイルを生成後に自動で
ウインドウを更新したいのですが
どのようにすれば良いですか?




[ □ Tree ] 返信 編集キー/

▲[ 87100 ] / ▼[ 87123 ]
■87103 / 1階層)  Re[1]: ウインドウを更新する方法
□投稿者/ 魔界の仮面弁士 (1639回)-(2018/04/11(Wed) 22:12:40)
No87100 (がむんだ さん) に返信
> それでVBを使って、ファイルを生成後に自動で
> ウインドウを更新したいのですが
> どのようにすれば良いですか?

これでどうでしょう。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 For Each exp In GetObject("new:9BA05972-F6A8-11CF-A442-00A0C90A8F39")
  If CStr(exp.FullName).ToLower() Like "*\explorer.exe" Then
   If MsgBox("更新しますか?" & vbCrLf & exp.LocationName, vbYesNo Or vbQuestion) = vbYes Then
    exp.Refresh2(RefreshConstants.Normal)
   End If
  End If
 Next
End Sub

Enum RefreshConstants As Short
 Normal = 0
 IfExpired = 1
 Completely = 3
End Enum
[ 親 87100 / □ Tree ] 返信 編集キー/

▲[ 87103 ] / ▼[ 87127 ]
■87123 / 2階層)  Re[2]: ウインドウを更新する方法
□投稿者/ がむんだ (2回)-(2018/04/13(Fri) 14:26:25)
ありがとうございます。

試してみたのですが

エラー BC32023 式の型は 'Object' で、コレクション型ではありません。

エラー BC30574 Option Strict On では、遅延バインディングを使用できません。


というエラーが出ます。
どのように修正すれば良いでしょうか?

[ 親 87100 / □ Tree ] 返信 編集キー/

▲[ 87123 ] / ▼[ 87128 ]
■87127 / 3階層)  Re[3]: ウインドウを更新する方法
□投稿者/ 魔界の仮面弁士 (1641回)-(2018/04/13(Fri) 16:13:48)
No87123 (がむんだ さん) に返信
> どのように修正すれば良いでしょうか?
手っ取り早いのは、そのファイルの先頭に
Option Strict Off
と記述することですね。

(Option Strict On のままにしたい場合は、参照設定の追加とコードの手直しが必要)
[ 親 87100 / □ Tree ] 返信 編集キー/

▲[ 87127 ] / ▼[ 87135 ]
■87128 / 4階層)  Re[4]: ウインドウを更新する方法
□投稿者/ がむんだ (3回)-(2018/04/13(Fri) 16:51:04)
Option Strict On のままにしたいのですが
どのように修正すればよろしいでしょうか?
よろしくお願いいたします。
 
[ 親 87100 / □ Tree ] 返信 編集キー/

▲[ 87128 ] / 返信無し
■87135 / 5階層)  Re[5]: ウインドウを更新する方法
□投稿者/ 魔界の仮面弁士 (1642回)-(2018/04/14(Sat) 02:35:06)
No87128 (がむんだ さん) に返信
> Option Strict On のままにしたいのですが

その前に、「Option Strict Off にすれば動いたのかどうか」や
「提示したコードで目的を果たせるのか否か」をフィードバックしてくださいませ。

提示のコードでは問題が解決できないようであれば、
そのまま修正しても、あまり意味が無いわけで…。


> どのように修正すればよろしいでしょうか?
追加の参照設定を必要とする方法と、参照設定を追加せずに実装する方法とがあります。

とりあえず後者の場合は、 No35068 のようにすることで、Option Strict On のまま
9BA05972-F6A8-11CF-A442-00A0C90A8F39 のオブジェクトすなわち ShellWindows を列挙させられます。
https://msdn.microsoft.com/en-us/library/windows/desktop/bb773974.aspx

この場合はメソッドの呼び出しも CallByName に置き換えれば OK 。


参照設定する場合は、[Microsoft Internet Controls] を参照に加えたうえで、ループを
 For Each exp As SHDocVw.InternetExplorer In New SHDocVw.ShellWindows()
に変更する流れになります。Refresh2 メソッドの引数が ByRef Object の場合は
列挙型を Object 型変数に入れてから渡すように改修してください。


ただし、 No87103 にしても今回のコードにしても、
COM オブジェクトの解放処理を省いたものとなっています。
解放もきちんと行いたい場合には、ShellWindows を始めとした各種 COM オブジェクトを
ReleaseComObject するようにしたおいた方が良いでしょう。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=54129&KLOG=91
[ 親 87100 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -