|
本帖最后由 红毛樱木 于 2019-7-19 15:45 编辑
- ENVI &&WM_CHAR=0x0102
- ENVI &&DiskPartResult="%temp%\DiskPartResult.txt"
- IFEX %&DiskPartResult%,FILE %&DiskPartResult%
- CALL @WIN
- _SUB WIN,W800H600,,KILL *%&DiskPartPid%
- ^EXEC -hide -pid:&CmdPid cmd.exe /k "diskpart.exe >%&DiskPartResult% & exit"
- LOOP #1=1,
- {*
- FIND --class:ConsoleWindowClass --forpid:%&CmdPid% --wid*@ &DiskPartWidInfos
- FIND $%&DiskPartWidInfos%<>,
- {*
- MSTR* * &DiskPartWid,&FixDiskPartWid=<2><8>&DiskPartWidInfos
- //注意这里的%&FixDiskPartWid%信息是在win7中获取得到的,其他系统中可能不一样,自己适配一下
- ^IFEX '%&FixDiskPartWid%'='%SystemROOT%\system32\cmd.exe - diskpart.exe ',
- {*
- FIND --pid*.#%&CmdPid% &DiskPartPid,diskpart.exe
- EXIT LOOP
- }
- }
- }
- CALL FixDone
- LABE ,L10T15W90H48,待输入的命令:
- EDIT &DiskPartCommandLines,L100T10W680H24,,
- ITEM ,L10T60W300H54,执行命令,CALL DoDiskPart,
- EDIT-| &DiskPartCallBack,L10T120W780H400,,,0xC
- _END
- //判断最后一行为'DISKPART> '则说明命令执行完成 //如果还有别的信息,在这里补上
- _SUB FixDone
- LOOP #1=1,
- {*
- ENVI &LastLine=
- READ %&DiskPartResult%,0,&LastLine
- IFEX '%&LastLine%'='DISKPART> ',
- {*
- EXIT LOOP
- }
- }
- _END
- _SUB DoDiskPart
- READ %&DiskPartResult%,-1,&DiskPartResultLines
- CODE *,%&DiskPartCommandLines%,*UNI,&DiskPartCommandLinesHexs
- FORX * %&DiskPartCommandLinesHexs%,&DiskPartCommandLinesHex,
- {*
- ENVI @@SENDMSG=%&DiskPartWid%;%&WM_CHAR%;%&DiskPartCommandLinesHex%
- }
- ENVI @@SENDMSG=%&DiskPartWid%;%&WM_CHAR%;0x0D //实际发送一个0x0D就行了
- //ENVI @@SENDMSG=%&DiskPartWid%;%&WM_CHAR%;0x0A
- LOOP #1=1,
- {*
- ENVI &TheLines=0
- READ %&DiskPartResult%,-1,&TheLines
- IFEX $%&TheLines%>0,
- {*
- IFEX $%&TheLines%>%&DiskPartResultLines%,
- {*
- CALL FixDone
- EXIT LOOP
- }
- }
- }
- //这里还可以根据&TheLines和&DiskPartResultLines的差值来截取每次的输出信息
- READ %&DiskPartResult%,**,&DiskPartResultInfos
- ENVI @&DiskPartCallBack=%&DiskPartResultInfos%
- _END
复制代码
以上代码在Win7中调试的,其他系统不知道是否一样,理论应该差不多吧。 |
|