我想使用CreateProcess()来执行启动应用程序/活动的ADB命令。它使用更简单的系统(命令)函数,但我想通过system()消除命令行窗口的创建。以下是我现在所拥有的。我尝试使用不同的CreateProcess()es,比如CreateProcessW和CreateProcessA,但无济于事。
char prog[] = "C:\\Program Files\\Android\\sdk\\platform-tools\\platform-tools\\adb.exe";
char args[] = "adb shell am start -a android.intent.action.MAIN -n com.example.dmiller.myapplication/.Blankscreen";
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
CreateProcess((LPCWSTR)prog, (LPWSTR)args, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
我从这个答案How to use createprocess to execute adb program in PATH?得到了部分内容,但是当我的程序中执行该命令时,没有任何反应(运行系统时(cmd.c_str()),在连接的设备上启动相应的应用程序) 。有人可以提供一些帮助吗?也欢迎其他方法。
更新:我已经应用了以下帖子中的一些内容来尝试提供更好的问题。代码已更新为我的最新版本。
答案 0 :(得分:1)
将char
数组类型转换为类型LPCWSTR
并不能实现。前者是一个单字节字符的数组。后者是(指向)一个双字节字符数组。类型转换告诉编译器一个是另一个,编译器信任你。它不执行转换。
要解决此问题,请将prog
和args
声明为WCHAR
或wchar_t
,而不是char
,并使用L
前缀关于文字:
WCHAR prog[] = L"...";
WCHAR args[] = L"...";
然后您可以移除LPCWSTR
类型广告,因为他们不再需要了。
像往常一样,每当调用API函数时,检查返回值并查找任何错误代码都是明智之举。 The documentation建议您检查函数是否返回零。如果是,请致电GetLastError
以找出操作系统认为问题所在。