【问题标题】:ShellExecute not working c++ [closed]ShellExecute 不工作 C++ [关闭]
【发布时间】:2013-12-08 15:49:14
【问题描述】:

我正在尝试使用 ShellExecute,但它就是不想工作。我从其他论坛尝试了很多东西,但我没有找到合适的解决方案,因为我不想使用 System()!

这是我的代码的一部分:

void myClass::executeWMP()
{
    ShellExecute(???);
    cout << "\n";
}

一开始我想从路径执行 Windows Media Player:

“C:\Program Files (x86)\Windows Media Player\wmplayer.exe”

然后有人可以解释一下函数的参数吗?

*我使用的是 Windows 7

【问题讨论】:

  • 我很抱歉我的语法不好,我的第一语言不是英语!
  • 好的:所以我尝试使用它:ShellExecute(HWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,nShowCmd);但我不知道我怎么能把路径放在哪里,在哪里。而且我真的不明白为什么我需要这六个参数。
  • 文档解释了参数。你应该读一下。
  • @drescherjm 是的,下次我会尝试写一个更清晰的问题!

标签: winapi


【解决方案1】:

如果你想运行一个特定的可执行文件,而不考虑注册表中的文件关联,那么你应该使用CreateProcess,而不是ShellExecute

LPCWSTR app = L"C:\\Program Files (x86)\\Windows Media Player\\wmplayer.exe";
PROCESS_INFORMATION pi;
STARTUPINFO si = { sizeof si };
CreateProcessW(app, app, 0, 0, 0, 0, 0, 0, &si, &pi);
CloseHandle(pi.hProcess);
Closehandle(pi.hThread);

【讨论】:

  • 这是正确的。当然,CreateProcess 中的参数比ShellExecute 还要多。并把手关闭。如果他不能打电话给ShellExecute,那么打电话给CreateProcess 的希望不大。您声明的一个例外是当您需要使用 runas 动词强制提升时。
  • 谢谢,我也看到了这个功能,但是 David Kron 的解决方案对我有用!
  • @DavidHeffernan:谢谢。
  • @Hans David Kron 的解决方案proposed 属于Works on my Machine 类型。它可能会或可能不会在其他人的机器上工作,并且它可能会在将来的某个时候停止在您的机器上工作。此答案更适合您的问题。
【解决方案2】:

我认为您指的是 Windows 库中的 shell 执行: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

ShellExecute(nullptr,L"open",L"C:\\Program Files (x86)\\Windows Media Player\\wmplayer.exe",nullptr,nullptr,SW_SHOW)

第一个参数是窗口句柄,可以为null。

第二个参数是对文件执行的操作。

第三个参数引用文件。

第四个参数是指打开文件时要切换到哪个工作目录,可以为null。

第五个参数是指在什么模式下打开文件/程序。

【讨论】:

  • 谢谢!有用。但是如果我为第二个参数输入“open”,编译器会说类型不兼容?
  • @HansPeter 阅读错误消息。它说的远不止这些。它表示该函数需要 LPCWSTR,但您传递的是 char*。所以照它说的去做。传递一个宽字符串:L"open"。如果您不了解窄弦和宽弦,请停止您正在做的事情并了解它们。最后,不要使用ShellExecute。使用CreateProcess
  • 我明白了。 @David Heffernan 是的,我想我得看看窄字符串和宽字符串并尝试 CreateProcess,谢谢!
  • 不要忘记在调用ShellExecute之前在调用线程上初始化COM。或者完全不要使用ShellExecuteCreateProcess 在这里更合适。
  • 你应该几乎总是传递NULL而不是"open"作为动词。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多