- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用函数 SHGetKnownFolderPath() 获取用户本地应用程序数据的目录并将 PWSTR(这是一个 wchar_t*)转换为 LPCSTR(这是一个 const char*),然后将程序添加到 LPCSTR以便它可以在 CreateProcess 中使用。
我想出了如何使用 SHGetKnownFolderPath 并使用 printf(%ls%, path) 将路径打印到控制台,并想出了如何使用 CreateProcess 来执行 .exe 文件,但我不知道如何将 PWSTR 变成一个 const char* 并将我要执行的程序包含到该 const char* 中。
#include <Windows.h>
#include <fstream>
#include <shlobj_core.h>
#include <string>
#include <KnownFolders.h>
#include <wchar.h>
int main () {
//SHGetKnownFolderPath function
PWSTR path = NULL;
HRESULT path_here = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path);
//CreateProcess funtion
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
const char* execute = //Want to have path_here plus another folder and an .exe program.
BOOL create = CreateProcess(execute, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &info, &processInfo);
.......................
}
我不会说我对编码了解很多,可能还有一些重要的事情我还不知道。任何帮助将不胜感激。
编辑
我认为如果我展示我的代码的其他部分会更有帮助。以下代码紧接在我上面编写的代码之后:
if (create){
WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
最佳答案
根本不要转换为 char
。 SHGetKnownFolderPath()
返回一个 Unicode 字符串。显式使用 CreateProcessW()
以便您可以将 Unicode 字符串传递给它:
#include <Windows.h>
#include <fstream>
#include <shlobj_core.h>
#include <string>
#include <KnownFolders.h>
#include <wchar.h>
int main ()
{
PWSTR path = NULL;
HRESULT hres = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path);
if (SUCCEEDED(hres))
{
STARTUPINFOW info = { sizeof(STARTUPINFOW) };
PROCESS_INFORMATION processInfo;
std::wstring execute = std::wstring(path) + L"\\folder\\program.exe";
CoTaskMemFree(path);
BOOL create = CreateProcessW(&execute[0], NULL, NULL, NULL, FALSE, 0, NULL, NULL, &info, &processInfo);
// ...
}
return 0;
}
关于c++ - 在 CreateProcess 的路径中使用 SHGetKnownFolderPath 来运行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55435020/
我正在尝试使用 Visual Studio 2008 从 C 调用 Vista 函数 SHGetKnownFolderPath()。该代码可以像 C++ 一样正常工作,但拒绝使用以下输出编译为 C 代
我在使用 SHGetKnownFolderPath() 函数时遇到问题。我收到以下错误消息:“SHGetKnownFolderPath”参数 1 中的类型错误;应为“const struct _GUI
我使用下面的代码获取 appdata 文件夹。通常它可以工作,但是如果我使用与 this 类似的方式通过服务启动相同的进程我收到错误 0x80070005,这意味着 Access Denied。 HR
我正在使用 visual studio 2013 并编译一些东西以在 Windows XP 上运行它。它在我的 Windows 10 机器上运行良好,但是当我在 XP 下启动时出现错误: the pr
我正在 Windows 10 上使用 Visual Studio 2015 编写 Windows 应用商店应用程序。我的代码如下: #define WINVER 0x0A00 #define _WIN
我目前正在向现有的 Vb6 项目添加 Windows 7 支持,但在使用 SHGetFolderPath 定位特殊文件夹路径时遇到了问题,从 Vista 开始的 Windows 版本不支持该路径。我知
我正在尝试使用函数 SHGetKnownFolderPath() 获取用户本地应用程序数据的目录并将 PWSTR(这是一个 wchar_t*)转换为 LPCSTR(这是一个 const char*),
我正在将一些功能从 Windows 移植到 Linux,但我发现很难与 Linux 中的 SHGetKnownFolderPath 的功能相匹配。实际上 glib 中有一个 API 可以处理这部分,但
我使用下面的代码通过 SHGetKnowFolderPath() 获取 ProgramData 路径。 你能告诉我将它与 CString 一起使用是否正确吗?如果不是,使用 SHGetKnownFol
我的软件仍然需要支持 Windows XP。在里面我调用SHGetKnownFolderPath来自 Windows 服务的 API,用于通过 hToken 获取用户特定的路径(例如 FOLDERID
我在尝试解析 CommonDocuments 目录时遇到了一个有点奇怪的错误。在使用 Windows 资源管理器(属性 -> 上下文菜单中的路径)将 CommonDocuments 目录重定向/移动到
我正在为 Windows 7 及更高版本编写 C++ 桌面应用程序。 我想获取 AppData/Roaming 文件夹的路径,所以我使用 SHGetKnownFolderPath : #include
(Visual Studio 2010/Visual C++/Windows 7) 例子.cpp: #include #pragma comment (lib, "Shell32.lib")
我是一名优秀的程序员,十分优秀!