我ShellExecuteW
在Windows8.1上调用标准调用来打开PPS(powerpoint slide)文件.
这在Windows 7上运行正常.在Windows 8.1上.它报告"没有与打开文件相关的程序".当然,文件关联已设置,如果文件已保存并从资源管理器中运行(双击),则打开就可以了.我还尝试更改关联并关联另一个程序,然后关联回PPS查看器,没有任何改进.它只对W8.1不起作用,但同样的调用适用于早期的Windows.
任何人都可以告诉我这里可能有什么问题吗?
用于打开文件的代码非常简单,我发现它没有错误:
HINSTANCE hinst = ShellExecuteW(NULL, L"open", L"C:\\path\\to\\file.pps", NULL, NULL, SW_SHOWNORMAL);
// Check if result is error
if ((int)hinst <= 32)
{
wchar_t buf[512] = { 0 };
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, 512, NULL);
MSGBOX(buf);
}
Run Code Online (Sandbox Code Playgroud)
我使用免费的PPS查看器,如下所示:http: //www.microsoft.com/en-us/download/details.aspx?id = 13
我发现类似的东西指出这可能是Win8.1中的一个错误.谁能证实这一点?或者揭示一个解决方法?
我有一个需要 2 个参数的 .exe。我需要在运行时在我的程序之间运行 .exe 文件。我曾经ShellExecuteEx
运行过 .exe 文件,但它没有接受参数。请帮助我哪里出错了。我在下面发布我的代码。
void StartProgram() {
SHELLEXECUTEINFO lpExecInfo;
lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
lpExecInfo.lpFile = L"F:\\EXEFolder\\RunMe.exe"; // Path to the .exe
lpExecInfo.fMask = SEE_MASK_DOENVSUBST | SEE_MASK_NOCLOSEPROCESS;
lpExecInfo.hwnd = NULL;
lpExecInfo.lpVerb = L"open"; // to open program
lpExecInfo.lpParameters = L"D:/input.csv" "F:/output.csv;"; //Arguments to be passed to .exe
lpExecInfo.lpDirectory = NULL;
lpExecInfo.nShow = SW_SHOW;
lpExecInfo.hInstApp = (HINSTANCE)SE_ERR_DDEFAIL;
ShellExecuteEx(&lpExecInfo);
//wait until a file is finished printing
if (lpExecInfo.hProcess != NULL)
{
::WaitForSingleObject(lpExecInfo.hProcess, INFINITE);
::CloseHandle(lpExecInfo.hProcess);
}
}
Run Code Online (Sandbox Code Playgroud) 我用来创建一个自定义函数,如winexec(...):Hwnd将重新执行已执行应用程序的句柄.
我确实使用了findwindow()但是如果它改变了窗口标题就有问题.
如果我在命令/ dos窗口中执行以下命令
schtasks.exe /delete /tn "MMP4CDownloadCheck" /f
Run Code Online (Sandbox Code Playgroud)
结果如下
ERROR: The specified task name "MMP4CDownloadCheck" does not exist in the system.
Run Code Online (Sandbox Code Playgroud)
使用我的应用程序(Delphi XE)中运行相同命令时是否可以检索返回值ShellExec
?
我运行如下:
AHWnd := ShellExecute(0, nil, PChar('schtasks.exe'), PChar(Params), nil, SW_HIDE);
Run Code Online (Sandbox Code Playgroud)
先感谢您.
问候,彼得.
我需要使用Internet Explorer打开网页,即使它不是预定义的浏览器.
(例如,Chrome是预定义的,但我想打开www.ThisRunsOnlyOnInternetExplorer.com
.
怎么做到这一点?当然,ShellExecute
我知道如何打开默认浏览器.
当然,这必须适用于所有Windows操作系统和所有Internet Explorer版本,因此我无法对其路径进行编码iexplorer.exe
.
你能建议一个解决方案吗?
注意:如果有一种方法可以获得带有一些API的iexplorer.exe的路径可能就是gtet那条路径然后使用ShellExecute来运行
PATH_TO_INTERNET_EXPLORER_EXE www.ThisRunsOnlyOnInternetExplorer.com
Run Code Online (Sandbox Code Playgroud) 我在 Delphi 10.1 中遇到以下代码的问题:
ShellExecute(handle,'open',PChar(filename), '','',SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
当我尝试运行代码时,它给了我这个错误:
不兼容的类型:“HWND”和“TWindowHandle”
我想使用Delphi(7)的DOS命令显示目录的内容.使用Win10 - 64
以下程序显示DOS shell但不显示目录内容.我的代码出了什么问题?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, shellapi;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var i : integer;
begin
i := ShellExecute(Handle, nil, 'cmd.exe', PChar(' dir'), nil, SW_SHOW);
caption := inttostr(i);
end;
end.
Run Code Online (Sandbox Code Playgroud) #include "ShellAPI.h";
ShellExecute(Handle,NULL,"file.txt",NULL,NULL,SW_RESTORE);
Run Code Online (Sandbox Code Playgroud)
为什么此代码不起作用?
错误画面如下:
我使用Win32Api制作了一个程序.在程序中,它具有"ShellExecute"短语,以便执行chrome进行搜索.以下是我写的内容的抽象.
#include <windows.h>
#include <shellapi.h>
int main () {
ShellExecute(NULL, L"open", searching_url, NULL, NULL, SW_SHOWMAXIMIZED);
}
Run Code Online (Sandbox Code Playgroud)
它适用于我的电脑.但是,我把这个Windows应用程序发送给其他人,他们说它不起作用.我的意思是只有shellexecute不起作用.我无法抓住从哪里开始弄清楚这里有什么问题.
你能否建议我如何以结构化的方式解决这个问题?谢谢.
我试图从我的Delphi代码使用命令行实用程序(它与dos命令行中的测试一起使用)将PDF转储到文本.
这是我的代码
if fileexists(ExtractFilePath(Application.ExeName) + 'pdftotext.exe') then
begin
ShellExecute(H,'open', 'pdftotext.exe', PWideChar(fFileName), nil, SW_SHOWNORMAL);
if fileExists(changeFileExt(fFileName, '.txt')) then
Lines.LoadFromFile(changeFileExt(fFileName, '.txt'))
else
ShowMessage('File Not found');
end;
Run Code Online (Sandbox Code Playgroud)
在代码中放置断点并单步执行时,它会使用它
if fileExists(changeFileExt(fFileName, '.txt')) then
Run Code Online (Sandbox Code Playgroud)
但是返回false,因此调用了Shellexecute,但是没有转储任何文件
我做错了什么?
我有这个代码,需要对这些问题进行一些解释:
首次使用"ShellExecHookXample"部分之后的"_TLB"是什么?
我应该如何在Delphi 7中使用此代码并制作独立的exe文件?(我不知道放置代码并调用其方法的适当位置.因为它似乎是一个单元或什么?)
如果可能请为我描述代码.
提前致谢.
shellexecute ×11
delphi ×7
c++ ×4
winapi ×3
windows ×3
api ×1
c ×1
cmd ×1
command-line ×1
delphi-2010 ×1
handle ×1
hook ×1
hwnd ×1
release ×1
runtime.exec ×1
shell ×1
windows-8.1 ×1