【发布时间】:2012-11-05 05:39:35
【问题描述】:
如何使用 delphi 弹出这个表单?
是ShellExecuteEx 还是ShellExecute 可以这样吗?
【问题讨论】:
如何使用 delphi 弹出这个表单?
是ShellExecuteEx 还是ShellExecute 可以这样吗?
【问题讨论】:
您可以从命令行执行此操作。 (至少,对我来说,在 Win7 上...()
rundll32.exe van.dll,RunVAN
所以,只需将其包装在合适的 ShellExecute 或类似电话中即可。
请注意,该对话框设计为在系统托盘中弹出。我不知道你怎么让它出现在更明显的地方。
另外,看看这个线程。这里提到的另一种方式描述了如何以一种可能更有用的方式进行操作:
如果您想从您的程序中调用它,跳过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 上进行修改。因此,您可能更喜欢使用LoadLibrary 和GetProcAddress 编写DLL 导入,并在运行时根据RunVANW 函数是否可用来切换行为。
【讨论】:
LoadLibrary加载van.dll,GetProcAddress获取RunVAN函数指针,然后调用RunVAN。从代码中调用rundll32 或ShellExecute 相当繁重。看起来您需要加载 RunVANW。不过,这确实看起来像是不受支持的黑客攻击。我怀疑它不适用于所有版本的 Windows。
procedure RunVANW; stdcall; external 'van.dll';
procedure RunVANW(hwnd: HWND; hinst: HINST; lpszCmdLine: LPSTR; nCmdShow: Integer); stdcall; external 'van.dll';。然后调用RunVANW(Handle, HInstance, '', 0); 工作(对我来说:-))。