On Saturday, 28 December 2024 at 19:25:48 UTC, bauss wrote:
On Saturday, 28 December 2024 at 19:23:39 UTC, Jordan Wilson
wrote:
On Saturday, 28 December 2024 at 18:55:08 UTC, bauss wrote:
I cannot figure out how to get spawnProcess working with
explorer.exe on Windows.
Been trying to call it like:
```
spawnProcess(["explorer.exe", path]);
```
But it only opens explorer.exe in the documents path and not
the path given.
I've tried to set the working directory too and it doesn't
work either.
Can anyone help me? All I want to do is open a specific
folder in explorer.exe given a specific path.
This may achieve what you want:
`spawnProcess(["powershell", "invoke-item", "-path", path]);`
Thanks,
Jordan
Yeah I ended up doing something similar, but with cmd.
This have one downside, for example in real apps such as vscode
going through right-click on folder and click "Show In Explorer"
it will keep one instance of explorer, but with spawn process it
doesn't tracks it and opens multiple explorer windows, so I use
this snippet for windows.
```d
version(Windows) {
import core.sys.windows.windows;
import core.sys.windows.shlobj;
alias PCIDLIST_ABSOLUTE = ITEMIDLIST*;
alias PIDLIST_ABSOLUTE = ITEMIDLIST*;
alias PCUITEMID_CHILD_ARRAY = LPITEMIDLIST*;
extern(Windows) HRESULT
SHOpenFolderAndSelectItems(PCIDLIST_ABSOLUTE pidlFolder, UINT
cidl, PCUITEMID_CHILD_ARRAY apidl = null, DWORD dwFlags = 0);
extern(Windows) PIDLIST_ABSOLUTE ILCreateFromPathW(PCTSTR
pszPath);
// implements "Open In Explorer" feature
void browseToFile(string filename) {
import std.utf;
LPCTSTR _fpath = filename.toUTF16z;
ITEMIDLIST *pidl = ILCreateFromPathW(_fpath);
if (pidl) {
SHOpenFolderAndSelectItems(pidl,0,null,0);
ILFree(pidl);
}
}
}
```