如何编程打开特殊文件夹,如我的电脑...(50分)

  • 主题发起人 主题发起人 gbh
  • 开始时间 开始时间
G

gbh

Unregistered / Unconfirmed
GUEST, unregistred user!
如何编程打开特殊文件夹,如我的电脑、打印机、控制面板...
 
用 DELPHI6.0 自带的 ShellTreeView 控件,如果想自己编程实现,不妨看看<br>这个控件的源代码。
 
winexec('rundll32 shell32,Control_RunDLL',sw_Show);//打开控制面板文件夹
 
给你一段用VC++实现的代码吧,非常容易翻译成Delphi的。<br>我没有时间翻译。<br>这是我以前写的一个工具里的一部分代码。<br><br>OpenSpecialShell(CSIDL_DRIVES)便是打开我的电脑<br><br>typedef struct __THotKeyInfo {<br> int iActionCode;// Action code<br> int iShowCmd; // window state<br>} THotKeyInfo, *PHotKeyInfo;<br><br><br>BOOL CQuickOpenDlg::OpenSpecialShell(THotKeyInfo info)<br>{<br> SHELLEXECUTEINFO sei = {0};<br> BOOL rtn;<br> <br> sei.cbSize = sizeof (SHELLEXECUTEINFO);<br> sei.lpVerb = "open";<br> if (info.iActionCode &gt;= 0) {<br> LPITEMIDLIST pidlRoot = NULL;<br> LPMALLOC pMalloc = NULL;<br> <br> SHGetMalloc(&amp;pMalloc);<br> SHGetSpecialFolderLocation(m_hWnd, info.iActionCode, &amp;pidlRoot);<br> sei.nShow = info.iShowCmd;<br> sei.fMask |= SEE_MASK_INVOKEIDLIST;<br> sei.lpIDList = pidlRoot;<br> sei.hInstApp = NULL;<br> <br> rtn = ShellExecuteEx (&amp;sei);<br> pMalloc-&gt;Free(pidlRoot);<br> pMalloc-&gt;Release();<br> } <br> else { // run the special program !!!!<br> if ((info.iActionCode) == -1) {<br> sei.nShow = info.iShowCmd;<br> sei.hInstApp = NULL;<br> sei.lpFile = info.strFile;<br> sei.lpDirectory = info.strWorkDir;<br> sei.lpParameters = info.strParam;<br> rtn = ShellExecuteEx(&amp;sei);<br> }<br><br> }<br> return rtn;<br>}<br><br>BOOL CQuickOpenDlg::OpenSpecialShell(UINT iCLSID)<br>{<br> if (iCLSID &lt; 0) return false;<br> THotKeyInfo info;<br> info.iActionCode = iCLSID;<br> info.iShowCmd = SW_SHOW;<br> return OpenSpecialShell(info);<br>}<br>
 
一个利用Delphi打开特殊文件夹的范例:<br>http://www.undu.com/Articles/980226a.htm
 
打开控制面板:<br>winexec('rundll32.exe shell32.dll,Control_RunDLL',9);<br>添加打印机:<br>winexec('rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter',9);<br>其它:<br>在程序运行过程中启动控制面板的各个设置功能:<br>var x:cardinal;<br>begin<br>{启动控制面板}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL',9);<br>{辅助选项 属性-键盘}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1',9);<br>{辅助选项 属性-声音}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2',9);<br>{辅助选项 属性-显示}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3',9);<br>{辅助选项 属性-鼠标}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4',9);<br>{辅助选项 属性-常规}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5',9);<br>{添加/删除程序 属性-安装/卸载}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl,,1',9);<br>{添加/删除程序 属性-Windows安装程序}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl,,2',9);<br>{添加/删除程序 属性-启动盘}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl,,3',9);<br>{显示 属性-背景}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0',9);<br>{显示 属性-屏幕保护程序}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1',9);<br>{显示 属性-外观}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2',9);<br>{显示 属性-设置}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3',9);<br>{Internet 属性-常规}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,0',9);<br>{Internet 属性-安全}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,1',9);<br>{Internet 属性-内容}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,2',9);<br>{Internet 属性-连接}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,3',9);<br>{Internet 属性-程序}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,4',9);<br>{Internet 属性-高级}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,5',9);<br>{区域设置 属性-区域设置}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,0',9);<br>{区域设置 属性-数字}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,1',9);<br>{区域设置 属性-货币}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,2',9);<br>{区域设置 属性-时间}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,3',9);<br>{区域设置 属性-日期}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,4',9);<br>{游戏控制器-一般}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Joy.cpl,,0',9);<br>{游戏控制器-高级}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Joy.cpl,,1',9);<br>{鼠标 属性}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Main.cpl',9);<br>{多媒体 属性-音频}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,0',9);<br>{多媒体 属性-视频}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,1',9);<br>{多媒体 属性-MIDI}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,2',9);<br>{多媒体 属性-CD音乐}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,3',9);<br>{多媒体 属性-设备}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,4',9);<br>{调制解调器 属性}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Modem.cpl',9);<br>{网络}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Netcpl.cpl',9);<br>{密码 属性}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Password.cpl',9);<br>{扫描仪与数字相机 属性}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Sticpl.cpl',9);<br>{系统 属性-常规}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,0',9);<br>{系统 属性-设备管理器}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,1',9);<br>{系统 属性-硬件配置文件}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,2',9);<br>{系统 属性-性能}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,3',9);<br>{日期/时间 属性}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL timedate.cpl',9);<br>{电源管理 属性}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Powercfg.cpl',9);<br>{拨号属性}<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL Telephon.cpl',9);<br>{----------------------调用错误----------------------}<br>if x=0 then messagebox(0,'程序超出内存','错误',0);<br>if x=ERROR_BAD_FORMAT then messagebox(0,'该程序非一个合法的Win32.EXE程序).','错误',0);<br>if x=ERROR_FILE_NOT_FOUND then messagebox(0,'指定文件没找到','错误',0);<br>if x=ERROR_PATH_NOT_FOUND then messagebox(0,'指定路径没找到','错误',0);<br>end;<br>
 
to:huiyugan<br>我将你的代码译到 LPITEMIDLIST pidlRoot = NULL 就不行了,等于nil,0都不行。<br>to:zhihuali<br>你说的东西我都见过。<br>
 
随便一个文件夹呢?<br>怎样才能打开啊?<br>急需!
 
用win3.1面板下的控件可以實現
 
听课学习,up..........
 
怎么没个象样的回答? 是不是非常难?
 
ShellExecute(handle,'Explor','我的电脑',nil,nil,SW_NORMAL);
 
我专门写了一个类,马上就要上传了!<br>提供所有源代码
 
打开“我的电脑”可以这么做<br>ShellExecute(0,'open','"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"',nil,nil,SW_NORMAL);<br>对于其它文件夹别人已经回答了吧。
 
打开当前执行文件的目录: <br>WinExec(Pchar('EXPLORER.EXE '+ExtractFilePath(ParamStr(0))),SW_SHOW);
 
这个问题我自己解决了,是在CSDN上VC部分找到的答案:<br>WinExec("explorer.exe &nbsp;::{20D04FE0-3AEA-1069-A2D8-08002B30309D} ",<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SW_SHOWMAXIMIZED);
 
后退
顶部