问题标签 [shellexecuteex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1057 浏览

vb.net - ShellExecuteEx 在 x64 上打开文件属性不起作用

我使用以下 VB.net (Framework 4) 代码打开文件属性。
当目标设置为 x86 时,这可以正常工作。

现在我的项目需要 x64 目标,上面的代码不再起作用。:(
GetLastError返回 0 并且没有异常或错误消息。
我搜索了两天并尝试了一些东西,但我没有找到解决方案。这里有什么想法吗?

感谢帮助!

0 投票
0 回答
265 浏览

windows - 如何使用 ShellExecuteEx 启动应用程序的 pid(如果应用程序已经运行)

我想在双击文件(.doc;.xls)或快捷方式(.LNK)或exe时像Windows shell一样启动应用程序。然后我想获取已启动应用程序的 pid 和窗口句柄。

目前我正在使用 ShellExecuteEx 为(文件、.lnk 或 .exe)启动相应的应用程序。并从 ShellExecuteEx 返回的句柄中获取 pid。这对于少数应用程序(如 Adob​​eReader、Outlook 等)不起作用,但我试图通过获取“之前运行的应用程序列表”并在调用 ShellExecuteEx 以获取针对此类情况的新启动应用程序后采取差异来处理。

但是,如果应用程序已经在运行(对于打开的 word doc),或者如果应用程序具有选项卡式界面(不一定会产生新进程),当我执行 ShellExecuteEx 时,它只会将该应用程序置于顶部,返回的句柄为 0 ,而且我在 pids 上没有任何区别(因为没有产生新进程)

所以在这种情况下,我无法让应用程序的 pid 或窗口句柄运行。

有人可以建议任何可靠的方法来解决这个问题

提前致谢

0 投票
0 回答
721 浏览

delphi - 从 Delphi IDE 启动时,什么会导致 ShellExecuteEx 失败并显示 COMADMIN_E_REGDB_SYSTEMERR?

我有一个相当奇怪的问题:

我的程序使用 ShellExecuteEx 启动另一个程序。当我的程序独立运行时,这可以正常工作,但是当它从 Delphi IDE 启动时失败,其中“从 Delphi IDE 启动”意味着:

  • 运行 -> 运行(在调试器内)
  • 运行 -> 运行而不调试

ShellExecuteEx 返回 false 并且 RaiseLastOsError 导致以下错误消息:

同一个程序还有另一个问题,可能是由同一个问题引起的:TOpenDialog.Execute 和 TSaveDialog.Execute 方法不执行任何操作。没有显示对话框,函数返回 false。当程序单独运行时,这再次正常工作。通过谷歌搜索,我发现这也是一个与 COM 相关的问题。

我的程序不包含任何 COM 代码,只有 Delphi RTL/VCL 自动调用的那些函数。

我在 CoInitialize 和 CoInitializeEx 上放置了一个断点,发现只有一个来自 ComObj.InitComObj 的 CoInitialize 调用。那里似乎没有什么问题。

这是失败的代码:

这是一个在 Windows 8.1 64 位上运行的 32 位 Delphi XE2 程序。

任何提示可能导致这种情况?

编辑:

根据David Heffernan关于环境替换的问题,我删除了附加的环境变量

lang=de

我已经进入运行 - > 参数对话框来测试德语翻译。突然之间,上述两种效果都消失了。将其放回去,或仅添加任何环境变量(例如 test=test),即可可靠地复制它们。

怎么回事?

0 投票
0 回答
1747 浏览

c++ - 无法通过 ShellExecuteEx() 向 cmd.exe 发送参数

我希望我的 MFC-C++ 程序打开 cmd.exe 并在命令行中运行 7-zip,它接受几个参数。

如果我只是执行 "C:\tmp\7zip-command line\7za920\7za" e C:\cpp\zipping*.tar *. png -r -o"C:\tmp\7zip-command line\7za920" 通过将其粘贴到命令窗口中,它可以正常工作。但是,我无法通过我的程序执行相同的操作。请注意 7-zip 的命令行版本,“7za.exe”位于文件夹路径“C:\tmp\7zip-command line\7za920”中我还想知道我是否做出了正确的决定使用ShellExecuteEx() 而不是 CreateProcess() ,还有其他方法可以解决我的问题。请告诉我。提前致谢。

0 投票
1 回答
84 浏览

winapi - 终止 ShellExecuteEx 终止“错误”窗口

我使用此代码启动网络浏览器,然后终止它。然而,在启动 webbrowser 并使其成为活动窗口之后,它会在后台捕获窗口(启动浏览器的应用程序)并终止它。所以我希望它终止前台(网络浏览器)中的窗口。

我想问题是 GetCurrentProcessId() 给了我正在运行的应用程序的 id,而不是新打开的 webbrowser。这是为什么?

0 投票
0 回答
213 浏览

multithreading - 如何在等待子进程退出时暂停对我的应用程序的输入?

我有一个函数允许我启动一个子进程,等到它终止,然后返回一个退出代码。子进程是安装 MSI 包的 Windows Installer(仅显示其安装的当前进度)。从后台线程中调用此函数。

我已经像这样包装了这个函数:

然后我像这样使用它:

这工作正常,但是它不会暂停来自我的调用应用程序的输入——尽管上述函数中有循环,用户仍然可以点击我的应用程序——然后我的应用程序会进入子进程的顶部。我需要子流程来控制我的应用程序。

该进程从主窗体后面的工作线程中启动。线程使用事件来通知主窗体它的进度。主窗体有几个动画,我仍想继续,但我不希望用户能够在此子应用程序仍在运行时单击返回应用程序。我希望它看起来像一个模态状态。本质上,MSI 进度应该始终在我的应用程序之上。

如何运行此子进程并防止用户返回主应用程序并防止主应用程序在子应用程序之上运行?这是从 Inno Setup 执行相同操作时的默认行为,但我不知道如何在 Delphi 应用程序中执行此操作。

0 投票
2 回答
4361 浏览

shellexecute - ShellExecuteEx 函数总是返回错误代码 5 (C++)

我需要启动一个进程并可以访问 PID,所以我正在尝试使用 ShellExecuteEx。我正在尝试打开一个批处理文件。但是,无论我如何传递参数,无论文件位于何处以及我对文件有什么权限,该函数都会返回错误代码 5:访问被拒绝。

  • 该文件与已成功读取的配置文件位于同一位置。
  • 该文件设置为具有任何用户的完全访问权限。
  • 它对任何文件类型都执行此操作。我试过只打开具有相同结果的文本文件(错误 5)
  • 如果我改用 ShellExecute(),批处理文件运行成功。

这是我尝试过的一些代码:

我也试过:

以及上述的许多变体。

另外,我从这里尝试了一些非常简单的方法: Get PID from ShellExecute

无济于事。

然而这:

工作没有错误。不幸的是,我需要 PID,所以我不能使用 ShellExecute。

任何建议将不胜感激。我觉得我已经用尽了所有的选择。

环境:VS 2008 Windows 7

编辑:将代码修复为“C:\batchtest.bat”;按照建议。(还是一样的结果)

0 投票
0 回答
179 浏览

pid - ShellExecuteEx : 获取父 PID 并关闭它

我在 Windows 下使用 ShellExecuteEx 命令运行子应用程序。现在我希望子应用程序向父应用程序(此应用程序的调用者)发送 wm_close 命令。那可能吗 ?

0 投票
1 回答
3479 浏览

delphi - ShellExecuteEx 7z 德尔福

所以我正在尝试使用 delphi 和 ShellExecuteEx 进行存档,我的代码是:

出于某种原因,这只会打开命令提示符而不执行存档。我怎样才能让它执行 7z.exe 文件。

我尝试使用 ShellExecute 并且效果很好,但是我必须检查该过程是否完成,所以我坚持使用 ShellExecuteEx

0 投票
0 回答
773 浏览

visual-c++ - 如何等待 ShellExecute 运行多个文件?

我已经找到了让程序在这个线程中等待 ShellExecuteEx 的代码。如何让 ShellExecuteEx 启动多个文件并等到每个文件都关闭?

这是等待的代码: