【问题标题】:How popup "Connect To" dialog?如何弹出“连接到”对话框?
【发布时间】:2012-11-05 05:39:35
【问题描述】:

如何使用 delphi 弹出这个表单? 是ShellExecuteEx 还是ShellExecute 可以这样吗?

【问题讨论】:

    标签: delphi winapi


    【解决方案1】:

    您可以从命令行执行此操作。 (至少,对我来说,在 Win7 上...()

     rundll32.exe van.dll,RunVAN
    

    所以,只需将其包装在合适的 ShellExecute 或类似电话中即可。

    请注意,该对话框设计为在系统托盘中弹出。我不知道你怎么让它出现在更明显的地方。

    另外,看看这个线程。这里提到的另一种方式描述了如何以一种可能更有用的方式进行操作:

    https://groups.google.com/forum/?hl=en&fromgroups=#!topic/microsoft.public.development.device.drivers/nPn-PH3g_2Q


    如果您想从您的程序中调用它,跳过rundll32 调用会更简单。您可以自己加载 DLL 并调用该函数。例如:

    procedure RunVANW(hwnd: HWND; hinst: HINST; lpszCmdLine: LPSTR; 
        nCmdShow: Integer); stdcall; external 'van.dll';
    
    procedure ShowViewAvailableNetworksDialog;
    begin
      RunVANW(0, 0, nil, 0);
    end;
    

    我希望此功能在旧版本的 Windows 上不可用,并且几乎可以肯定会在未来版本的 Windows 上进行修改。因此,您可能更喜欢使用LoadLibraryGetProcAddress 编写DLL 导入,并在运行时根据RunVANW 函数是否可用来切换行为。

    【讨论】:

    • +1 打得很好,先生!在代码中最简单的方法是调用LoadLibrary加载van.dllGetProcAddress获取RunVAN函数指针,然后调用RunVAN。从代码中调用rundll32ShellExecute 相当繁重。看起来您需要加载 RunVANW。不过,这确实看起来像是不受支持的黑客攻击。我怀疑它不适用于所有版本的 Windows。
    • 或者甚至像这样:procedure RunVANW; stdcall; external 'van.dll';
    • @David:最后一个崩溃了——显然签名必须与 RunDll 兼容:procedure RunVANW(hwnd: HWND; hinst: HINST; lpszCmdLine: LPSTR; nCmdShow: Integer); stdcall; external 'van.dll';。然后调用RunVANW(Handle, HInstance, '', 0); 工作(对我来说:-))。
    • @UliGerhardt 啊,你是对的。我的错。当我做错时并没有为我崩溃,但我想我只是幸运!或者不走运,取决于你的观点!
    • @Roddy 我在您的答案中添加了一些代码。在我看来,我们不需要另一个答案。
    猜你喜欢
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2011-12-12
    • 1970-01-01
    • 2015-09-17
    • 2012-06-07
    • 2012-02-05
    相关资源
    最近更新 更多