如何获取当前窗口的进程路径,并打开所属文件夹 Topic is solved

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

iiyoo

如何获取当前窗口的进程路径,并打开所属文件夹

23 Nov 2022, 03:12

刚学,查了下文档,好像是用winget,但是写完后发现不对,想问下具体写法,然后自己如何debug
swagfag
Posts: 6222
Joined: 11 Jan 2017, 17:59

Re: 如何获取当前窗口的进程路径,并打开所属文件夹

23 Nov 2022, 09:31

stolen from v2

Code: Select all

GetProcessPath(PID) {
	static PROCESS_QUERY_LIMITED_INFORMATION := 0x1000
	if !hProcess := DllCall("OpenProcess", "UInt", PROCESS_QUERY_LIMITED_INFORMATION, "Int", false, "UInt", PID, "Ptr")
		throw Exception("OpenProcess failed with " A_LastError, -1, PID)

	static MAX_PATH := 260
	static pathSize := (MAX_PATH + 1) * (A_IsUnicode ? 2 : 1)
	VarSetCapacity(szImageFileName, pathSize, 0)
	if !DllCall("psapi\GetProcessImageFileName", "Ptr", hProcess, "Str", szImageFileName, "UInt", pathSize, "UInt")
	{
		DllCall("CloseHandle", "Ptr", hProcess)
		throw Exception("GetProcessImageFileName failed with " A_LastError, -1)
	}

	static DriveLetters := StrSplit("A: B: C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:", A_Space)
	for each, letter in DriveLetters
	{
		VarSetCapacity(szDevicePath, pathSize, 0)
		if !DllCall("QueryDosDevice", "Str", letter, "Str", szDevicePath, "UInt", pathSize, "UInt")
			continue
		
		processPath := letter RegExReplace(szImageFileName, "^\Q" szDevicePath "\E", , cReplacements)
		if cReplacements
		{
			DllCall("CloseHandle", "Ptr", hProcess)
			return processPath
		}
	}

	DllCall("CloseHandle", "Ptr", hProcess)
}
williams
Posts: 56
Joined: 01 Jan 2015, 08:40

Re: 如何获取当前窗口的进程路径,并打开所属文件夹  Topic is solved

23 Nov 2022, 13:42

swagfag wrote:
23 Nov 2022, 09:31
stolen from v2
````
[/code]
这个比相比 winget 有什么优点吗?


回楼主

Code: Select all

#F1::
WinGet, OutputVar, ProcessPath, A
MsgBox, %OutputVar%
Return

Return to “请求帮助”

Who is online

Users browsing this forum: No registered users and 3 guests