2015-06-21 71 views
-1

我想知道是否有無論如何獲得選定文件的文件路徑。我已經註冊了一個熱鍵參考這個。獲取選定文件的文件路徑沒有OpenFileDialog

E.g. RegisterHotKey(Me.Handle,100,MOD_CONTROL或者MOD_SHIFT,Keys.D2)

這將做按下Ctrl,班次和2某些動作我想要做的是讓所選文件的路徑,而無需打開打開文件對話框

eg我選擇mydoc.doc位於我的桌面,按ctrl shift和2,它會msgbox出文件的位置。

(這意味着我點擊我的桌面上的文件mydoc.doc,按我的熱鍵並獲取文件位置。是否有反正這樣做?(就像你如何點擊文件夾中的文件來複制和粘貼它到另一個位置,我想點擊文件按我的熱鍵和msgbox出它的位置))

有沒有反正做這個或任何方向任何人都可以指向我?因爲我找不到任何API這樣做... 謝謝!

編輯:

在這裏和那裏讀取所有的更新和幾個環節後,我開始構建自己的功能對於這一點,我只是在部分來確定多少選擇的圖標也有,但我不斷收回0圖標是否有什麼問題,我在做什麼?

Public Function getDesktopFiles() As String 
    Dim vhandle As IntPtr = FindWindow("Progman", "Program Manager") 
    vhandle = FindWindowEx(vhandle, IntPtr.Zero, "SHELLDLL_DefView", vbNull) 
    vhandle = FindWindowEx(vhandle, IntPtr.Zero, "SysListView32", "FolderView") 
    Dim vItemcount As IntPtr 
    vItemcount = SendMessage(vhandle, LVM_GETSELECTEDCOUNT, 0, 0) 
    Return vItemcount 
End Function 
+0

所選文件?哪裏? –

+0

定義'選定的文件' - 沒有對話它*不能*是用戶選擇的東西;選中*如何* ??? – Plutonix

+0

我說得更清楚,這意味着我點擊桌面上的文件mydoc.doc,按我的熱鍵並獲取文件位置。無論如何要做到這一點? (就像你將如何點擊一個文件夾中的文件來複制並粘貼到另一個位置,我想單擊文件按我的熱鍵和msgbox了它的位置) – user2587774

回答

0

This question有一個鏈接到a Raymond Chen blog post,這將給你的API調用你需要,你需要將其轉換爲VB,但它是基於COM所以應該很容易。另一個問題的答案給出了雷蒙德的代碼C#版本...

編輯補充細節:
1.包含項目引用Microsoft Internet控制(獲取SHDocVw命名空間)和微軟Shell控制和自動化(獲取Shell32名稱空間)
2.使用SHDocVw.ShellWindows獲取打開的瀏覽器窗口的枚舉。
3.嘗試將每個項目投射爲ShellBrowserWindow,然後嘗試將Document屬性投射爲Shell32.IShellFolderViewDual2對象。
4. FocusedItem屬性給出所選項目。

VB.NET代碼:

Dim windows As New SHDocVw.ShellWindows 
For Each window As Object In windows 
    Dim browser As SHDocVw.ShellBrowserWindow = window 
    Dim folder As Shell32.IShellFolderViewDual2 = browser.Document 
    Console.WriteLine(folder.FocusedItem.Path) 
Next 
+0

這是用於文件夾而不是桌面,而概念的一部分是相同的,它不適用於桌面... – user2587774

+0

我以爲桌面是一個文件夾 – tjleigh

+0

桌面是一個文件夾,如果您訪問並打開它作爲資源管理器。但是,如果您希望像查看計算機屏幕一樣查看它,則會顯示爲列表視圖。從我收集的過程是通過GetDesktopWindow掛接桌面列表視圖,然後到SysList32等,但我無法正確掛鉤它。 Windows 8和7計算機中似乎還有一個WorkerW:( – user2587774