2012-11-05 100 views

回答

4

從命令行你可以做到這一點。 (至少,在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函數是否可用。

+2

+1非常好玩先生!在代碼中最簡單的方法是調用'LoadLibrary'來加載'van.dll','GetProcAddress'來獲得'RunVAN'函數指針,然後調用'RunVAN'。從代碼調用'rundll32'或'ShellExecute'非常繁重。看起來你需要加載'RunVANW'。這看起來像一個不受支持的黑客。我懷疑它不適用於所有版本的Windows。 –

+1

甚至就像這樣:'程序RunVANW; STDCALL;外部的'van.dll';' –

+1

@David:最後一個崩潰 - 顯然這個簽名必須是RunDll兼容的:'procedure RunVANW(hwnd:HWND; hinst:HINST; lpszCmdLine:LPSTR; nCmdShow:Integer); STDCALL;外部'van.dll';'。然後調用'RunVANW(Handle,HInstance,',0);'作品(對我來說:-))。 –