2009-10-27 79 views

回答

0

我知道操縱此設置的唯一方法是通過pInvoke,但看起來好像沒有消息將視圖設置爲縮略圖。 Here是針對WinXP的代碼片段。

2

相關注冊表項列在這裏: http://support.microsoft.com/kb/812003

然而,「記住每個文件夾的視圖設置」需要才能被選擇在知識庫文章的更改生效。看起來程序在沒有特定用戶提示的情況下改變這種做法會是'不良行爲'。

更新:對於desktop.ini,我從來沒有多少運氣使用它;然而,這個網站似乎列出幾個CLSID的,可能是值得探討: http://www.xs4all.nl/~hwiegman/desktopini.html

具體的[ExtShellFolderViews]部分。我給了它一個旋轉,但沒有任何運氣。

+0

我認爲行爲是好的,因爲應用程序正在創建文件夾 - 有點像JavaScript可以關閉它已經打開的窗口。 – 2009-10-27 18:55:42

+0

我正在尋找一些註冊表鍵來改變,但我沒有/沒有看到如何將註冊表連接到該文件夾​​。你是正確的,我不想覆蓋用戶的「記住每個文件夾的視圖設置」。是否可以使用desktop.ini文件? – pdavis 2009-10-27 19:17:24

+0

我添加了關於desktop.ini的信息,但是我沒有使用該路由。另一個需要注意的是,WinXP/2k的註冊表設置僅限於400個文件夾。 Vista/2k8/Win7似乎是可配置的,但如果打開足夠的文件夾並查看設置存儲它似乎仍然可能最終失去您的首選樣式。 – opello 2009-10-27 23:54:27

0

假設你這樣做自己使用ListView,您可以在View屬性設置爲LargeIcon或者如果這還不夠(你提到縮略圖)你應該設置OwnerDraw爲true的項目,自己繪製他們。

+0

我懷疑「LargeIcon」與「縮略圖」相同。 – 2009-10-27 18:44:21

0

呼叫IFolderView ::與FVM_THUMBSTRIP

SetCurrentViewMode

不知道哪個瀏覽器窗口,你應該從查詢雖然IFolderView。在用戶桌面上可能會有多個瀏覽器窗口,如果您是來自較低的完整性級別,那麼在較高完整性級別下運行的瀏覽器窗口會拒絕您訪問。

+0

創建文件夾後,我在資源管理器窗口中打開它,所以如果它是一個永久性更改,這可能是一種方式。意思是,在用戶關閉文件夾並返回之後,它仍然處於縮略圖視圖(假設他們具有「記住每個文件夾的視圖設置」設置爲true)。我在VB中找到了一個示例(http://www.vbforums.com/showthread.php?t=409476),但需要將其轉換爲C#。 – pdavis 2009-10-27 19:35:37

+0

在啓動進程後,ShellExecute不會爲您提供控制。您可以編寫一個BHO來檢查父進程是否是您的應用程序,並且當前的exe文件是explorer.exe。如果兩者都爲真,則可以通過進程間通信方法從應用程序獲取命令來執行,如更改DocumentComplete事件處理程序中的視圖模式。 http://blog.joycode.com/jiangsheng/archive/2004/09/17/33756.aspx是從IShellBrowser獲取IFolderView的方法。 – 2009-10-27 22:39:15

+0

在BHO中,您將從IServiceProvider(http://www.codeproject.com/KB/shell/AutomateShellWindow.aspx)獲得IShellBrowser接口。 – 2009-10-27 22:40:30

0

根據這一post你可以做一個參考shdocvw.dll中查詢當前IServiceProvider。然後得到theIShellBrowser - >IShellView - >IFolderView。當您有IFolderView時,您可以獲取/設置文件夾的當前查看模式。

相關問題