2015-06-21 70 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