标签: shellexecute

如何执行/ShellExecuteEx/InvokeCommand ITEMIDLIST 指向 Shell 对象?

我正在构建一种码头,我很难找到如何保存“运行”、“搜索”、“帮助”、“打印机”等内容并在此之后重新打开它们。

我试过这个:

CComPtr<IShellFolder> pDF;
SHGetDesktopFolder(&pDF);

LPITEMIDLIST pidlPrintersAndFaxes=0;
hr=pDF->ParseDisplayName(0, 0, L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{2227A280-3AEA-1069-A2DE-08002B30309D}", 0, &pidlPrintersAndFaxes, NULL);

CComPtr<IShellFolder> pSF;
hr=pDF->BindToObject(pidlPrintersAndFaxes, 0, IID_IShellFolder, (void**)&pSF);

LPITEMIDLIST pidlPrinter=0;
hr=pSF->ParseDisplayName(0, 0, L"PDFCreator", 0, &pidlPrinter, NULL);

CComPtr<IContextMenu> pPrinterCtxMenu;
hr=pSF->GetUIObjectOf(0, 1, (LPCITEMIDLIST*)&pidlPrinter, IID_IContextMenu, 0, (void**)&pPrinterCtxMenu);

CMINVOKECOMMANDINFO cmd={0};
cmd.cbSize=sizeof(CMINVOKECOMMANDINFO);
cmd.lpVerb=MAKEINTRESOURCE(0);
cmd.nShow=SW_SHOWNORMAL;
hr=pPrinterCtxMenu->InvokeCommand(&cmd);
Run Code Online (Sandbox Code Playgroud)

无论我在最后一行尝试 InvokeCommand 什么,总是返回 E_INVALIDARG。我用 ShellExecuteEx 试了一下,得到了同样的错误。

我尝试了所有可能的动词。

我试图枚举动词并得到 E_INVALIDARG。

我不能让它工作,但在正常的文件系统路径上,比如文件夹上的“c:\”和 clsid。我错过了什么 ?

com shellexecute windows-shell win32ole

2
推荐指数
1
解决办法
971
查看次数

TerminateProcess()不会关闭应用程序

我正在尝试使用TerminateProcess来终止ShellExecuteEX启动的应用程序,如下所示:

SHELLEXECUTEINFO ExecuteInfo;
ExecuteInfo.fMask = SEE_MASK_FLAG_NO_UI; /* Odd but true */
ExecuteInfo.hwnd = NULL;
ExecuteInfo.cbSize = sizeof(ExecuteInfo);
ExecuteInfo.lpVerb = NULL;
ExecuteInfo.lpFile = "http://www.microsoft.com";
ExecuteInfo.lpParameters = "";
ExecuteInfo.lpDirectory = NULL;
ExecuteInfo.nShow =  SW_SHOW;;
ShellExecuteEx(&ExecuteInfo);
//WaitForSingleObject(ExecuteInfo.hProcess, 0);
Sleep(4000);
TerminateProcess(ExecuteInfo.hProcess, 0);
Run Code Online (Sandbox Code Playgroud)

IE被打开但它永远不会关闭.难道我做错了什么?

c++ shellexecute terminate visual-studio-2010

2
推荐指数
1
解决办法
1915
查看次数

仅使用文件名而不使用php命令在命令行中执行php脚本

我如何配置linux/php来运行php脚本,而不必每次我想运行脚本时都输入php -f命令.即

代替:

$ php -f /path/to/file/script.php
Run Code Online (Sandbox Code Playgroud)

我希望脚本在我执行此操作时运行:

/path/to/file/script.php
Run Code Online (Sandbox Code Playgroud)

我的google-fu在这方面让我失望,而且大多数关于从命令行运行php的所有其他SO问题并没有真正帮助.我们工作的远程服务器就是这样做的,我对它的工作方式感到有点困惑.我在想与.php扩展有什么关系?在任何php文件中都没有使用hash-bangs.

php command-line shellexecute command-line-parsing

2
推荐指数
1
解决办法
5285
查看次数

Delphi ShellExecute在Windows 7中不起作用

我只知道这很简单,但我已经尝试了我在这个论坛上找到的所有建议,而且我仍然无法获得以下ShellExecute语句,这些语句在XP上工作了四年,在Windows中工作7.

任何建议都感激不尽!

ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c ftp -s:c:\checkout\WebFTPParams.txt 91.208.99.4'), Nil, SW_SHOW);
ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c ftp -s:c:\checkout\WWFTPParams.txt 212.78.232.39'), Nil, SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

不管怎样,谢谢伙计,但我发现了问题.我应该一直在使用CMD.EXE而不是旧的Command.com.对不起,打扰你!

delphi shellexecute windows-7

2
推荐指数
1
解决办法
4727
查看次数

如果默认为Chrome或IE,ShellExecute会挂起打开新的浏览器窗口

我使用此代码(来自MSDN)打开默认浏览器.

Private Declare Function ShellExecute _
                            Lib "shell32.dll" _
                            Alias "ShellExecuteA"( _
                            ByVal hwnd As Long, _
                            ByVal lpOperation As String, _
                            ByVal lpFile As String, _
                            ByVal lpParameters As String, _
                            ByVal lpDirectory As String, _
                            ByVal nShowCmd As Long) _
                            As Long

Private Sub Command1_Click()
   Dim r As Long
   r = ShellExecute(0, "open", "http://www.microsoft.com", 0, 0, 1)
End Sub
Run Code Online (Sandbox Code Playgroud)

它仅适用于IE和chrome,如果一个实例已经打开,它只是广告一个标签并返回所请求的页面.

如果没有实例已经打开,则会创建一个新实例但页面永远不会加载并最终超时.

只有firefox似乎在两种情况下都能正常工作.

然后我尝试了一种技术(在此详述),我在其中创建了一个临时的htm文件,以便查找关联的应用程序,然后使用下面的一个Shell调用来查看:

Shell "C:\Program Files\Internet Explorer\iexplore.exe https://www.google.co.uk/", vbNormalFocus

 Shell "C:\Program Files\Mozilla Firefox\firefox.exe https://www.google.co.uk/", vbNormalFocus

 Shell …
Run Code Online (Sandbox Code Playgroud)

vb6 shellexecute default-browser

2
推荐指数
1
解决办法
5791
查看次数

如何使用默认文本编辑器打开文件?

我想打开一个*.conf文件.我想用标准Windows编辑器(例如,notepad.exe)打开此文件.

我目前有这个ShellExecute代码:

var
  sPath, conf: String;
begin
  try
  sPath := GetCurrentDir + '\conf\';
  conf := 'nginx.conf';
ShellExecute(Application.Handle, 'open', PChar(conf), '', Pchar(sPath+conf), SW_SHOW);
  except
    ShowMessage('Invalid config path.');
  end;
end; 
Run Code Online (Sandbox Code Playgroud)

但没有任何反应.那么我应该改变什么呢?

delphi shellexecute configuration-files

2
推荐指数
1
解决办法
9288
查看次数

如果应用程序在其他目录中启动父应用程序,则文件I/O无法正常工作

好的 - 这是一个非常奇怪的场景,我在试图找到它的底部时遇到了问题.

我有2个应用程序(简单地说app1和app2)和一个文本文件(txt1).
App1和txt1位于同一目录(例如C:\ APP)中,但app2位于app1目录(C:\ APP\SUB)的子目录中.

当App1启动时,它会使用标准从txt1读取一些内容:

AssignFile(txtFile,'txt1.txt');
Reset(txtFile);
Run Code Online (Sandbox Code Playgroud)

没问题.但是,当App2通过shellexecute命令启动App1时:

shellexecute(0,'open','..\app1.exe',nil,nil,SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

App1似乎无法看到文本文件.我收到回复说"无法找到指定的文件".奇.

我做了调试添加:

if not fileexists('txt1.txt') then
showMessage(ExtractFilePath(application.exename));
Run Code Online (Sandbox Code Playgroud)

这显示了app1(本身)的正确文件路径,那么,为什么'reset'命令会产生'找不到......'错误?我想知道是否使用shellexecute使应用程序以某种方式认为它是从子目录执行而不是它所在的实际目录?

我知道最简单的解决方案是简单地将文件路径添加到我的'app1'打开的每个文件的前面(我试过它,是的,它确实可以正常工作),但是,实际上有数百个这样的文件应用程序通过类似的方法访问(无论是txt,ini还是dll),即根据文件与应用程序在同一目录中分配文件,因此,不设置完全限定的文件路径,因此更改(和维护)它们一切都不是我们此时感兴趣的事情.

以前有没有人见过这样的东西?除了ShellExecute之外,还有更好的方法让App2启动App1吗?没有任何参数或任何东西可以传递给App1,我只需要它来启动.

感谢您的时间 - 请告诉我您是否需要其他任何东西!

delphi file-io shellexecute delphi-xe3

2
推荐指数
1
解决办法
242
查看次数

我怎么能用变量运行shellexecute?

我尝试通过delphi在shell中执行命令,但它不起作用.我用这个脚本:

var
shellexecommand:string;
begin
ShellExecute(0, nil, 'cmd.exe', '/C ' + shellexecommand + ' > output.txt', nil, SW_HIDE);
end;
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

[dcc32错误] Unit1.pas(329):E2010不兼容的类型:'PWideChar'和'AnsiString'

此外,如果我将字符串更改为pwidechar是不起作用.我怎样才能解决这个问题?

delphi variables shellexecute

2
推荐指数
1
解决办法
1426
查看次数

VBScript执行成功后如何关闭CMD提示窗口

我正在从另一个调用 VBScript 以管理员身份运行。以下是 Invoker VBScript 代码

Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "cscript", "C:\Temp\XYZ.vbs", "", "runas", 0
Wscript.Quit 1
Run Code Online (Sandbox Code Playgroud)

以下是 XYZ.vbs 代码

On Error Resume Next 

Dim strComputerRole, strDomain, strComputer, strText, strText2
Dim arrServiceList, strNextLine
Dim objFile, objFile2, strFile, strSysDrive, strTempDir, strSQLcommand

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = wscript.createObject("Wscript.Shell")
Set colProcEnvVars = objShell.Environment("Process")
Set colSystemEnvVars = objShell.Environment("System")

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
strSysDrive = colProcEnvVars("systemdrive")
strTempDir = colProcEnvVars("SY0")

Const ForReading = …
Run Code Online (Sandbox Code Playgroud)

vbscript cmd wsh shellexecute

2
推荐指数
1
解决办法
7452
查看次数

不兼容的类型pwidechar和字符串ShellExecute

我尝试使用winrar命令行压缩文件,但是当我在命令行中添加变量时,我得到这些错误 不兼容的类型'PWideChar'和'string'!

我将sdate变量转换为WideChar,但它不起作用!!

我怎么解决它!

procedure TForm1.Button1Click(Sender: TObject);
var
mydate : TDateTime;
sdate : string;
begin
mydate:= Now-7;
sdate := FormatDateTime('YYYY/mm/dd',mydate);
  ShellExecute(0, 'open', PChar('C:\Program Files\WinRAR\WinRar.exe'),
    'a -r -ta'+ PChar(sdate) +' D:\xlsFiles.rar D:\*.xls*', nil, SW_SHOW);
end;
Run Code Online (Sandbox Code Playgroud)

delphi shellexecute delphi-xe7

2
推荐指数
1
解决办法
3430
查看次数