标签: shellexecute

如何查找是否可以通过ShellExecute打开文档?

我想检查一个特定的文件是否可以通过ShellExecute成功"打开",所以我试图使用AssocQueryString来发现这个.

例:

DWORD size = 1024;
TCHAR buff[1024];  // fixed size as dirty hack for testing

int err = AssocQueryString(0, ASSOCSTR_EXECUTABLE, ".mxf", NULL ,buff , &size);
openAction->Enabled  = ((err == S_OK) || (err == S_FALSE)) && (size > 0);
Run Code Online (Sandbox Code Playgroud)

现在,这几乎可行.如果有注册的应用程序,我会得到字符串.

但是,有一个问题:在Vista上,即使没有注册的应用程序,它返回应用程序c:\ Windows\System32\shell32.dll是关联的,这是带来100%无用的东西"Windows无法打开这个文件:使用Web服务找到正确的程序?" 对话.

显然我想要隐藏最终用户的cr*p,但简单地将返回的字符串与常量进行比较似乎是一种丑陋,暴力和脆弱的方式.

此外,黑客入侵注册表以完全禁用此对话框不是一个好主意.

什么是更好的选择?

c++ winapi shellexecute

4
推荐指数
1
解决办法
1385
查看次数

使用 Windows 'ShellExecute' 函数将数据传送到文件

我在 windows vista 中使用了“ ShellExecute ”函数

有没有办法将输出通过管道传输到文件?

IE

MySqlDump.exe '-u user1 -ppassword dbName > TheOutputFile.Sql

这是我的代码

theProgram     :=  'MySqlDump.exe';
itsParameters  :=  '-u user1  -ppassword  dbName';
rslt := ShellExecute(0, 'open',
                       pChar (theProgram),
                       pChar (itsParameters),
                       nil,
                       SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

编辑:

我试过了

 itsParameters  :=  '-u user1  -ppassword  dbName > TheOutputFile.Sql';
Run Code Online (Sandbox Code Playgroud)

但这不起作用

windows delphi shellexecute

4
推荐指数
1
解决办法
4566
查看次数

以标准用户身份打开默认浏览器 (C++)

我目前正在使用 ShellExecute“打开”在用户浏览器中打开一个 URL,但在 Win7 和 Vista 中遇到了一些麻烦,因为该程序作为服务运行。

当 ShellExecute 打开浏览器时,它似乎读取的是“本地管理员”配置文件而不是用户的配置文件。例如,如果键盘上的用户将 Firefox 作为他的默认浏览器,它可能会打开 IE(这是管理员的默认设置)。

我知道“runas”动词可以用来提升,但你如何反其道而行之?是否可以通过服务在标准用户桌面上的默认浏览器中打开 URL?

c++ uac shellexecute windows-vista windows-7

4
推荐指数
1
解决办法
3117
查看次数

从 Visual Basic 6 执行 .exe

我是视觉基础的新手。我正在尝试.exe从 VB执行文件。但我没有得到输出。我.exe有命令行参数。以下是我的代码

Private Sub Command1_Click()

    Shell "D:\FEP\extractFEPData.exe data.txt", vbNormalFocus

End Sub
Run Code Online (Sandbox Code Playgroud)

在 cmd 提示符下如果我给命令extractFEPData.exe data.txt它正在解析文件。但是在 VB 中单击命令按钮后什么也没有发生。

请帮我。

vb6 exe shellexecute

4
推荐指数
2
解决办法
3万
查看次数

VBA:运行“提升”命令(Shell 与 ShellExecute)

在我的 VBA 程序中,我需要运行应用程序“Skitch”并使用它打开一个 JPEG 文件。这是我一直在使用的命令:

ReturnValue = Shell("C:\Program Files (x86)\Evernote\Skitch\Skitch.exe " & """" & aPic & """", 1)
Run Code Online (Sandbox Code Playgroud)

...其中“aPic”是路径和文件名。

经过一些试验,我想我需要像在提升的命令窗口中一样运行命令(换句话说,以“管理员身份”运行它)。是否可以提升运行 Shell?

如果这是不可能的:如果我理解正确,使用 ShellExecute 而不是 Shell 将自动提升命令。但我对它不太熟悉。有人可以告诉我如何使用 ShellExecute 运行我的命令吗?(顺便说一句,我知道 ShellExecute 适合运行与文件类型相关的命令,但在此用户的计算机上 *.jpg 可能不会与 Skitch 相关联。)

谢谢。

command-line vba cmd shellexecute windows-7

4
推荐指数
1
解决办法
1万
查看次数

Python win32 ShellExecute 错误 31:“连接到系统的设备无法运行。”

我有一个 python 程序,我尝试将文档发送到打印机。它在我的机器上运行良好,将本地打印机设置为默认打印机,并通过 USB 与我的笔记本电脑连接。但是,当我在另一台计算机上尝试使用其默认打印机位于网络中时,它无法工作。我得到的错误是:

pywintypes.error: (31, 'ShellExecute', '连接到系统的设备无法运行。')

出现问题的代码如下:

win32api.ShellExecute(0,"print",doc_path,None,".",0)
Run Code Online (Sandbox Code Playgroud)

我认为问题是因为打印机是使用网络而不是 USB 连接的,但这可能是另一回事。

谢谢你的帮助。

printing winapi runtime-error shellexecute python-3.x

4
推荐指数
1
解决办法
8419
查看次数

在新的浏览器进程中打开URL

我需要在新的浏览器进程中打开一个URL.我需要在浏览器进程退出时收到通知.我目前使用的代码如下:

        Process browser = new Process();
        browser.EnableRaisingEvents = true;
        browser.StartInfo.Arguments = url;
        browser.StartInfo.FileName = "iexplore";

        browser.Exited += new EventHandler(browser_Exited);

        browser.Start();
Run Code Online (Sandbox Code Playgroud)

显然,这不会到期,因为"FileName"固定为iexplore,而不是用户的默认Web浏览器.如何确定用户的默认Web浏览器是什么?

我正在运行Vista->前进.虽然如果可能的话XP会很好.

更多上下文:我创建了一个非常小的独立Web服务器,它可以从本地磁盘上提供一些文件.在启动服务器结束时,我想启动浏览器.用户完成并关闭浏览器后,我想退出Web服务器.除了仅使用IE之外,上面的代码完美地运行.

提前致谢!

c# windows system shellexecute

3
推荐指数
1
解决办法
1万
查看次数

从命令提示符执行AutoIt脚本

有没有办法从命令行执行我的AutoIt脚本(.au3文件)?

windows autoit shellexecute command-prompt

3
推荐指数
1
解决办法
1万
查看次数

可以检测.exe是如何启动的吗?

我希望能够以编程方式检测给定的exe是否是shellex,或者是否在CMD.EXE中以交互方式输入和执行.

有没有关于exe的启动方式,表明用于启动它的机制?

上下文:Windows XP,Visual Studio 6语言.

vb6 winapi exe shellexecute

3
推荐指数
1
解决办法
551
查看次数

如何使用hinstance确定win32api.ShellExecute是否成功?

我一直在寻找原始问题的答案..如何(以编程方式)确定我的win32api.ShellExecute语句成功执行,如果成功执行,则执行os.remove()语句.

研究我发现ShellExecute()调用返回HINSTANCE.进一步挖掘我发现如果成功,ShellExecute()将返回HINSTANCE> 32.我的问题/问题是,如何使用它来控制程序的其余部分?我尝试使用if HINSTANCE> 32:语句来控制下一部分,但我得到了一条NameError: name 'hinstance' is not defined消息.通常这不会让我感到困惑,因为这意味着我需要在引用之前定义变量'hinstance'; 但是,因为我认为ShellExecute应该返回HINSTANCE,我认为它可以使用吗?

这是我的完整代码,我试图实现这一点.请注意,在我的print_file()中,我将hinstance分配给完整的win32api.ShellExecute()命令,以尝试捕获hinstance并在函数末尾显式返回它.这也不起作用.

import win32print
import win32api
from os.path import isfile, join
import glob
import os
import time

source_path = "c:\\temp\\source\\"

def main():
    printer_name = win32print.GetDefaultPrinter()
    while True:
        file_queue = [f for f in glob.glob("%s\\*.txt" % source_path) if isfile(f)]
        if len(file_queue) > 0:
            for i in file_queue:
                print_file(i, printer_name)
                if hinstance > 32:
                    time.sleep(.25)
                    delete_file(i)
                print "Filename: %r has printed" % i
                print
                time.sleep(.25)
                print                
        else:
            print …
Run Code Online (Sandbox Code Playgroud)

python winapi pywin32 shellexecute python-2.7

3
推荐指数
1
解决办法
5918
查看次数