我想在程序中用winexec调用光盘中的某个执行文件,但系统装有二个CDROM。(100分)

  • 主题发起人 主题发起人 todennis
  • 开始时间 开始时间
T

todennis

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在程序中用winexec调用光盘中的某个执行文件,但系统装有二个CDROM,有时候是E:<br>有时候是F:,请问各位大虾怎样才能确定CDROM的盘符?并在winexec中使用变量来表示<br>盘符。希望能用例子来说明,并说得详细点。谢谢!
 
1、用GetLogicalDrives() 或 GetLogicalDriveStrings() 遍历驱动器<br>2、用GetDriveType() 检测每个驱动器的属性,如果是 DRIVE_CDROM 则表示是光驱。<br><br>有这样的现成函数处理。大致的处理如下:<br>&gt;&gt; 第一种:用GetLogicalDrives()<br>var<br>&nbsp; dwDrives: Longword;<br>&nbsp; dwMask: LongWord;<br>&nbsp; chDrive: char;<br>begin<br>&nbsp; dwDrives = GetLogicalDrives();<br><br>&nbsp; dwMask = $00000001;<br>&nbsp; chDrive = 'B';<br>&nbsp; while loop_count &lt; 27 (windows 最大接受盘符)<br>&nbsp; &nbsp; if dwDrives and drMask &lt;&gt; 0(有效盘符) then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; chDrive = Chr(Ord(chDrive) + 1); (盘符从C开始,顺序递增盘符)<br>&nbsp; &nbsp; &nbsp; check_drive_type;<br>&nbsp; &nbsp; &nbsp; if DRIVE_CDROM then<br>&nbsp; &nbsp; &nbsp; &nbsp;add your process code here;<br>&nbsp; &nbsp; endif<br>&nbsp; &nbsp; dwMask shr 1;<br>&nbsp; endwhile<br>end;<br><br>&gt;&gt; 第二种:用GetLogicalDriveStrings()<br>const<br>&nbsp; MAX_DRIVE_BUFFER_SIZE = 128;<br>var<br>&nbsp; Drives: PChar;<br>begin<br>&nbsp; AllocMem(Drives, MAX_DRIVE_BUFFER_SIZE);<br>&nbsp; GetLogicalDriveStrings(Drives, MAX_DRIVE_BUFFER_SIZE);<br><br>&nbsp; //到此可以得到c:/&lt;null&gt;d:/&lt;null&gt;&lt;null&gt;的串<br>&nbsp; while not EOS(EOS 为最后连续两个字符都为 #0#0!)<br>&nbsp; &nbsp; check_drive_type;<br>&nbsp; &nbsp; if DRIVE_CDROM then<br>&nbsp; &nbsp; &nbsp; add your process code here;<br><br>&nbsp; &nbsp; //扫描时必须判断到连续两个Null才算终结。<br>&nbsp; &nbsp; Inc(Drives);<br>&nbsp; &nbsp; if Drives^ = #0 then Inc(Drives);<br>&nbsp; &nbsp; EOS = Drives^ = #0;<br>&nbsp; endwhile<br>end;<br><br>注:由于NT可以自己分配盘符(不一定要C, D...依次排列),所以用第二种方法要更可靠些。
 
对不起,因我是初学者还是有些不明白。例如我在其中一个CDROM运行我的程序,并在程序<br>中调用同一光盘中的另一个执行文件,如e:/mmm/bbs.exe。我的目的是想将那盘符可自动<br>调整为当前光盘所在CDROM的盘符。希望能有例子说明。谢谢。
 
获取本程序可执行文件的路径:<br>&nbsp; ExtractFilePath(ParamStr(0));<br>或盘符:<br>&nbsp; ExtractFileDrive(ParamStr(0));
 
用楼上的方法取得当前可直接取得当前程序的路径<br>ExtractFilePath(Application.ExeName);<br>或者根(驱动符)ExtractFileDrive(Application.ExeName);<br>然后再定位到你所指定的运行程序即可。<br>&gt;&gt;例:<br>var<br>&nbsp; CurrDrive: string;<br>&nbsp; NewPath: string;<br>begin<br>&nbsp; CurrDrive := ExtractFilePath(Application.ExeName);<br>&nbsp; NewPath := CurrDrive + &lt;你的运行程序路径,注意不要带驱动符&gt;<br>&nbsp; WinExec(PChar(NewPath), SW_SHOW);<br>end;
 
衷心的说声谢谢!并接受答案这真是delphi爱好者的天堂。
 
后退
顶部