读书人

如何获取到Windows系统自带的Windows照

发布时间: 2012-12-14 10:33:07 作者: rapoo

求助:怎么获取到Windows系统自带的Windows照片查看器打开的图片绝对路径
求助:怎么获取到Windows系统自带的Windows照片查看器打开的图片绝对路径

求解,先谢谢了!
[最优解释]
任务管理器里只是隐藏进程不显示,但还是可以查到pid

Dim hwnd As Long
hwnd = FindWindow(vbNullString, "功能说明.jpg - Windows 图片和传真查看器")
MsgBox hwnd

[其他解释]
"rundll32.exe" C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen C:\test.gif

上面是用图片查看器打开一张图片的命令。反之获取rundll32.exe进程的命令行参数即可获得。
[其他解释]
如何取得指定进程的命令行参数(VB6.0,马大哈原创)

只适用于双击打开的情况,调用GetRemoteCmdLine,传入查看器的PID,就会返回命令行.
[其他解释]

    Option Explicit  

Private Sub Form_Load()
getProcessCommandLine "rundll32.exe"
End Sub
'得到所有进程名为proName的详细列表,参数一定要写完整。
Private Function getProcessCommandLine(ByVal proName As String) As String
Dim objWMIService As Object
Dim colProcessList As Object
Dim objProcess As Object
Dim objProType As Object
Dim strResult As String
Set objWMIService = GetObject("winmgmts:" & "{impersonationlevel=impersonate}!//./root/cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name='" & proName & "'")

If colProcessList.Count <> 0 Then
For Each objProcess In colProcessList
For Each objProType In objProcess.Properties_
If objProType.Name = "CommandLine" Then
strResult = strResult & objProType.Value & vbCrLf
Exit For
End If
Next
Next
End If


If strResult <> "" Then
getProcessCommandLine = strResult
MsgBox strResult
End If
End Function


[其他解释]
你什么系统,怎么会是dllhost.exe呢?

[其他解释]
WIN7貌似有些不同,不是直接向另一个进程传参数的.

我手里没有WIN7系统,找找有WIN7的哥们跟踪一下调用过程应该就可以了.
[其他解释]
引用:
求助:怎么获取到Windows系统自带的Windows照片查看器打开的图片绝对路径

求解,先谢谢了!


照片查看器貌似没有PID
[其他解释]
引用:
任务管理器里只是隐藏进程不显示,但还是可以查到pid

Dim hwnd As Long
hwnd = FindWindow(vbNullString, "功能说明.jpg - Windows 图片和传真查看器")
MsgBox hwnd


谢谢你的详细解答,我刚尝试了下你提供的方法,我也看懂了你的思路,但是我这边存在一个问题。
rundll32.exe在我的进程管理器里面是没有找到,因此colProcessList.Count=0。

任务管理器-应用程序页签-右键照片查看器-转到进程,发现指向了dllhost.exe
我在网上搜到打开图片的实际调用了shimgvw.dll
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763104687270e54f73477909b4623c3933fc239045c0731b0ed3022674689876b6675e9120afdf1407232022bb491dccd179ded9d6d74d47169355d914062c468d9dc3654d651944d9ade0ee6cae74293b9a5d8c82427dd23036d81809c2b0403be6ae71541f4d69f5f615f07ca9927168c4e7659885236a13788f7436a10f287ca5c3dd45bda766692b845c32963c204a56f0c5443b73db01f212127903930fe342a75e4fc2d963d783034c64fa4c8c7a1ea389badea26e8ffdcdf588210e2&p=c37adc5f91904eaa08e2977e0c4d88&user=baidu&fm=sc&query=windows%CD%BC%C6%AC%B2%E9%BF%B4%C6%F7%B4%F2%BF%AA%CD%BC%C6%AC+%C8%E7%BA%CE%B5%C3%B5%BD%CD%BC%B5%C4%C2%B7%BE%B6&qid=eb922d4d4393a509&p1=14 2楼


[其他解释]
我尝试了其他的进程 比如VB6.EXE可以获取到VB6.EXE的绝对路径
[其他解释]
引用:
你什么系统,怎么会是dllhost.exe呢?

我是win7系统,我在win2003系统上实验,colProcessList.Count=0,也是没有rundll32.exe进程,但是我转向进程win2003上指向的却是explorer.exe这个进程,莫非这样子查进程是不对的?谢谢你!
[其他解释]
xp下直接双击打开是explorer进程加载shimgvw.dll,并没产生进程吧。
而win7下产生进程dllhost.exe,其command line的形式如:command line:C:\Windows\system32\DllHost.exe /Processid:{76D0CB12-7604-4048-B83C-1005C7DDC503} 也是没有路径。

读书人网 >VB

热点推荐