#!PECMD
//#code=936
ENVI^ EnviMode=1

//2个工具 
ENVI &&ETOOL=%CurDir%\PE_RESEDIT\ResEdit.ntr   //编辑工具
ENVI &&PTOOL=%CurDir%\PE_RESEDIT\pack.dat      //压缩工具
ENVI &&TDIR=%TEMP%       //临时目录

_SUB INITAUTO
ENVI &&BHIDE=0
ENVI &&BHIDE=1   //隐藏编辑工具界面
ENVI &&HIDECUR=0
ENVI &&HIDECUR=1   //隐藏光标
///FIND $%&BHIDE%=1,!!  MESS 隐藏编辑工具界面

SET  ::WM_LBUTTONDOWN                  =0x0201
SET  ::WM_LBUTTONUP                    =0x0202
SET  ::WM_COMMAND=0x0111
SET  ::BN_CLICKED=0
SET  ::WM_SETTEXT                      =0x000C
SET  ::WM_GETTEXT                      =0x000D
SET  ::WM_GETTEXTLENGTH                =0x000E
ENVI$ NL=0d 0a
IFEX %&ETOOL%,! TEAM MESS 编辑工具：%&ETOOL% 不存在| EXIT FILE
IFEX %&PTOOL%,! TEAM MESS 压缩工具：%&ETOOL% 不存在| EXIT FILE
_END 

//等待窗口,最多10秒
//CALL WAIT_FIND_WIND --wid配置  标题
_SUB WAIT_FIND_WIND
    @ENVI^ EnviMode=1
    MSTR &&T=<2->%*
    TEAM ENVI  &&WID=0| CALC #&&I=10000 / 50| ENVI &&OPT=%1
    LOOP #%&I% > 0,  TEAM WAIT 50| FIND --forpid:%&SubPid% %&OPT% &WID,%&T%| CALC #&I=%&I% -1| IFEX $ %&WID% > 0, ENVI &I=0
_END
//CALL WAIT_FIND_WIND --wid Hello

//函数:  HelloWindow  窗口ID  
_SUB HelloWindow  //确认该窗口能响应
    ENVI @@SENDMSG=%1;%WM_NULL%;0;0
_END

//函数:  SetAcative  窗口ID  
_SUB SetAcative
    ENVI @@POS=%1:::::::1:1 //激活
_END

//函数:  SetWindowText  窗口ID   文本变量名
_SUB SetWindowText
    ENVI @@POS=%1:::::::1:1 //激活
    ENVI @@SENDMSG=%1;%WM_SETTEXT%;0;@%2
_END

//函数:  GetWindowText  窗口ID   文本变量名
_SUB GetWindowText
    ENVI @@POS=%1:::::::1:1 //激活
    ENVI @@SENDMSG=:&&___LEN__;%1;%WM_GETTEXTLENGTH%;0;0 //长度
    CALC #&___LEN__=%&___LEN__% + 100
    ENVI$ %2=*%&___LEN__%  0   //申请内存/缓冲区
    ENVI @@SENDMSG=%1;%WM_GETTEXT%;%&___LEN__%;@%2
    //ENVI~ &&__dummy=%2
    //ENVI   &&__dummy2=%&__dummy% //打印到 LOGS
_END

//函数:  RUNMENU
//参数: 窗口ID 序号1 [序号2] [序号3]
_SUB RUNMENU
    ENVI &&WID1=%1
    ENVI &&I1=%2
    ENVI &&I2=%3
    ENVI &&I3=%4
    FIND --menu   &&MENUID,%&WID1%   
    FIND --menu#%&I1%   &&v,%&MENUID%
    MSTR*  &&MID=<2>%&v%
    MSTR*  &&IDD=<3>%&v%

    FIND $ = %&I2%,! FIND --menu#%&I2%   &v,%&MID%
    FIND $ = %&I2%,! MSTR*  &&MID=<2>%&v%
    FIND $ = %&I2%,! MSTR*  &&IDD=<3>%&v%
    FIND $ = %&I3%,! FIND --menu#%&I3%   &v,%&MID%
    FIND $ = %&I3%,! MSTR*  &&IDD=<3>%&v%

    CALC  #&&wp=%IDD% + %&BN_CLICKED% * 0x10000
    ENVI @@POS=%&WID1%:::::::1:1 //激活
    ENVI @@POSTMSG=%&WID1%;%&WM_COMMAND%;%&wp%;0
_END 
_SUB RUNMENU2  //阻塞模式
    ENVI &&WID1=%1
    ENVI &&I1=%2
    ENVI &&I2=%3
    ENVI &&I3=%4
    FIND --menu   &&MENUID,%&WID1%   
    FIND --menu#%&I1%   &&v,%&MENUID%
    MSTR*  &&MID=<2>%&v%
    MSTR*  &&IDD=<3>%&v%

    FIND $ = %&I2%,! FIND --menu#%&I2%   &v,%&MID%
    FIND $ = %&I2%,! MSTR*  &&MID=<2>%&v%
    FIND $ = %&I2%,! MSTR*  &&IDD=<3>%&v%
    FIND $ = %&I3%,! FIND --menu#%&I3%   &v,%&MID%
    FIND $ = %&I3%,! MSTR*  &&IDD=<3>%&v%

    CALC  #&&wp=%IDD% + %&BN_CLICKED% * 0x10000
    ENVI @@POS=%&WID1%:::::::1:1 //激活
    ENVI @@SENDMSG=%&WID1%;%&WM_COMMAND%;%&wp%;0
_END 


// RUBBUTTON  窗口ID  按钮ID
_SUB RUBBUTTON 
    ENVI &&WID1=%1
    ENVI &&BWID=%2
    ENVI @@POS=%&WID1%:::::::1:1 //激活
    ENVI @@POSTMSG=%&BWID%;%&WM_LBUTTONDOWN%;0;0
    WAIT 50
    ENVI @@POSTMSG=%&BWID%;%&WM_LBUTTONUP%;0;0
_END //RUBBUTTON 
_SUB RUBBUTTON2  //阻塞模式 
    ENVI &&WID1=%1
    ENVI &&BWID=%2
    ENVI @@POS=%&WID1%:::::::1:1 //激活
    ENVI @@SENDMSG=%&BWID%;%&WM_LBUTTONDOWN%;0;0
    WAIT 50
    ENVI @@SENDMSG=%&BWID%;%&WM_LBUTTONUP%;0;0
_END //RUBBUTTON 

//自动脚本
//CALL  AUTO_SCRIPT  资源文件 编辑文件
_SUB AUTO_SCRIPT,*   // HELPBIG5_936_2.CMZ MyAPP_U.EXE
ENVI @@Cur=-1000,-1000 
FIND $%&HIDECUR%=1,!! ENVI @@Cur=*0   //隐藏本程序光标
    FDIR  --fullfile &&HELPF=%1
    FDIR  --fullfile &&TMPF=%2
    TEAM ENVI  &&WID=0| ENVI &&WIND1=0
    CALL WAIT_FIND_WIND --wid Resource Hacker  -  %&TMPF%
    CALL WAIT_FIND_WIND --wid Resource Hacker  -  %&TMPF%
    CALL WAIT_FIND_WIND --wid Resource Hacker  -  %&TMPF%
    CALL WAIT_FIND_WIND --wid Resource Hacker  -  %&TMPF%
    CALL WAIT_FIND_WIND --wid Resource Hacker  -  %&TMPF%
    FIND --forpid:%&SubPid% --wid &WID,Resource Hacker  -  %&TMPF%
FIND $%&BHIDE%=1,!! THREAD+ ENVI @@Visable=%&WID%:*0
HelloWindow  %&WID%
WAIT 2000
    FIND --forpid:%&SubPid% --wid &WID,Resource Hacker  -  %&TMPF%
FIND $%&BHIDE%=1,!! THREAD+ ENVI @@Visable=%&WID%:*0
    IFEX $ %&WID% <= 0, TEAM MESS+icon6 没有找到窗口@EDEBUG#OK *3000| EXIT _SUB 
WAIT 500
    CALL SetAcative %&WID%
    CALL  RUNMENU  %&WID% 4 4
FIND $%&BHIDE%=1,!! THREAD+ ENVI @@Visable=%&WID%:*0



    CALL WAIT_FIND_WIND --wid 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid 替换一个资源 ...
WAIT 500
WAIT 500
    FIND --forpid:%&SubPid% --wid   &&WID2,替换一个资源 ...
ENVI @@Cur=-1000,-1000 
HelloWindow  %&WID2%
    CALL WAIT_FIND_WIND --wid*%&WID2%   打开
    CALL WAIT_FIND_WIND --wid*%&WID2%   打开
    CALL WAIT_FIND_WIND --wid*%&WID2%   打开
    CALL WAIT_FIND_WIND --wid*%&WID2%   打开
    CALL WAIT_FIND_WIND --wid*%&WID2%   打开
    FIND  --wid*%&WID2%   &BTWIDOPEN,打开
    FIND $ 0 = %&BTWIDOPEN%, TEAM WAIT 500| FIND  --wid*%&WID2%   &BTWIDOPEN,打开
    IFEX $ %&BTWIDOPEN% <= 0, TEAM MESS+icon6 没有找到【打开】按钮窗口@EDEBUG#YN *3000| EXIT _SUB 

    ENVI &&BOTTON2END=0
    THREAD* TEAM CALL RUBBUTTON2  %&WID2%   %&BTWIDOPEN%|  ENVI &BOTTON2END=1  //执行“打开” 对话框
FIND $%&BHIDE%=1,!! THREAD+ ENVI @@Visable=%&WID%:*0
FIND $%&BHIDE%=1,!! THREAD+ ENVI @@Visable=%&WID2%:*0 
///////ENVI @@Enable=%&WID2%:0
    ENVI &&WID2A=%&WID2%



TIPS 编辑,编辑1,50000,1,#1    
    CALL WAIT_FIND_WIND --wid 打开
    CALL WAIT_FIND_WIND --wid 打开
    CALL WAIT_FIND_WIND --wid 打开
    CALL WAIT_FIND_WIND --wid 打开
    CALL WAIT_FIND_WIND --wid 打开
    CALL WAIT_FIND_WIND --wid 打开
    CALL WAIT_FIND_WIND --wid 打开
    CALL WAIT_FIND_WIND --wid 打开
    CALL WAIT_FIND_WIND --wid 打开
    FIND --forpid:%&SubPid% --wid*   &WID3,打开
    IFEX $ %&WID3% <= 0, TEAM MESS+icon6 没有找到【打开】窗口@EDEBUG#YN *3000| EXIT _SUB 
HelloWindow  %&WID3%
/////////////////THREAD+ ENVI @@Visable=%&WID3%:*0
///////ENVI @@Enable=%&WID3%:0
ENVI @@Cur=-1000,-1000 
TIPS 编辑,编辑2,50000,1,#1    
CALL WAIT_FIND_WIND --wid%&WID3%  打开(&O)  //【打开(&O)】按钮
CALL WAIT_FIND_WIND --wid%&WID3%  打开(&O)  //【打开(&O)】按钮
CALL WAIT_FIND_WIND --wid%&WID3%  打开(&O)  //【打开(&O)】按钮
CALL WAIT_FIND_WIND --wid%&WID3%  打开(&O)  //【打开(&O)】按钮
CALL WAIT_FIND_WIND --wid%&WID3%  打开(&O)  //【打开(&O)】按钮
CALL WAIT_FIND_WIND --wid%&WID3%  打开(&O)  //【打开(&O)】按钮
    IFEX $ %&BTWIDOPEN% <= 0, TEAM MESS+icon6 没有找到【打开(&O)】按钮@EDEBUG#OK *3000| EXIT _SUB 
//ENVI &&tmp=0
//LOOP $ 0 = %&tmp%, TEAM WAIT 10|FIND --forpid:%&SubPid% --wid   &WID3,打开| FIND  --wid*%&WID3%  &tmp,打开
TIPS 编辑,编辑2-2,50000,1,#1    




    WAIT 50
    WAIT 500  //FIXME!!!不能省
    ENVI &&V1=%&CurDir%\HELPBIG5_936_2.CMZ
    ENVI &&V2=
    ENVI &&V1V2=0
    ENVI &&CWID=
    ENVI &&I=0      
WAIT 400
    LOOP # 0 = %&V1V2%,
    {
WAIT 100
    FIND --forpid:%&SubPid% --wid*   &WID3,打开
    FIND --forpid:%&SubPid% --wid   &&WID3,打开
    IFEX $ %&WID3% <= 0, TEAM MESS+icon6 没有找到【打开】－2窗口@EDEBUG#OK *3000| EXIT _SUB 
TIPS 编辑,编辑3,50000,1,#1    
//////////////////THREAD+ ENVI @@Visable=%&WID3%:*0
///////ENVI @@Enable=%&WID3%:0
    HelloWindow  %&WID3%
    CALL SetAcative %&WID3%
    FIND --wid*@%&WID3%   &CWID,
    READ  -,9,&&LINE1,%&CWID% 
    MSTR* &&EDIT1=<2>%&LINE1%
    CALC #&EDIT1= %&EDIT1% + 0
    IFEX $ %&EDIT1% <= 0, TEAM MESS+icon6 没有找到文件编辑框@EDEBUG#OK *3000| EXIT _SUB 
    SetWindowText %&EDIT1% &V1
    GetWindowText %&EDIT1% &V2
    FIND $ %&V1% = %&V2%, ENVI &V1V2=1
    CALC #&I=%&&I% + 1
    FIND $ 1 = %&V1V2%,!  IFEX $ %&I% <= 200,! TEAM MESS+icon6 填写文件编辑框失败@EDEBUG#OK *3000| EXIT _SUB 
    }

    READ  -,13,&&LINE1,%&CWID% 
    MSTR* &&BTWIDOPEN2=<2>%&LINE1%
    CALC #&BTWIDOPEN2= %&BTWIDOPEN2% + 0
    IFEX $ %&BTWIDOPEN2% <= 0, TEAM MESS+icon6 没有找到【打开】－2按钮@EDEBUG#OK *3000| EXIT _SUB 
    CALL RUBBUTTON2  %&&WID3%   %&&BTWIDOPEN2%

TIPS 编辑,编辑4,50000,1,#1  
ENVI &RUN=2
    ENVI &&I=0  
    LOOP # 200 >= %&I%, @TEAM @WAIT 50| CALC &I=%&I% + 1| IFEX $ %&BOTTON2END% = 1, ENVI &I=200000  //“打开” 对话框执行完毕, FIXME XXXXXXXXXXXXXXXXXXX
    IFEX $ %&BOTTON2END% = 1,! TEAM MESS+icon6 【打开】没有关闭@EDEBUG#OK *3000|KILL *%&SubPid%|  EXIT _SUB 
TIPS 编辑,编辑5,50000,1,#1    
ENVI &RUN=1
FIND $%&BHIDE%=1,!! THREAD+ ENVI @@Visable=%&WID2A%:*1 //FIXME  有这就卡一下-->THREAD





    CALL WAIT_FIND_WIND --wid* 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid* 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid* 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid* 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid* 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid* 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid* 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid* 替换一个资源 ...
    CALL WAIT_FIND_WIND --wid* 替换一个资源 ...
    FIND --forpid:%&SubPid% --wid*   &&WID2B,替换一个资源 ...
HelloWindow  %&WID2B%
TIPS 编辑,编辑6－1,50000,1,#1    
FIND $%&BHIDE%=1,!! THREAD+ ENVI @@Visable=%&WID2B%:*0
ENVI @@Cur=-1000,-1000 
//////ENVI @@Visable=%&WID2B%:0
WAIT 500
WAIT 500
TIPS 编辑,编辑6－2,50000,1,#1    
    FIND --forpid:%&SubPid% --wid   &&WID2B,替换一个资源 ...
FIND $%&BHIDE%=1,!! THREAD+ ENVI @@Visable=%&WID2B%:*0
    CALL SetAcative %&WID2B%
    FIND --sub --wid*@%&WID2B%   &&CWID,
    READ  -,8,&&LINE1,%&CWID% 
    MSTR* &&EDIT2=<2>%&LINE1%
    ENVI &&V1=RCDATA
    SetWindowText %&EDIT2% &V1

    READ  -,7,&&LINE1,%&CWID% 
    MSTR* &&EDIT2=<2>%&LINE1%
    ENVI &&V1=301
    SetWindowText %&EDIT2% &V1

    READ  -,1,&&LINE1,%&CWID% 
    MSTR* &&EDIT2=<2>%&LINE1%
    ENVI &&V1=2052
    SetWindowText %&EDIT2% &V1

    READ  -,2,&&LINE1,%&CWID%       //【替换】
    MSTR* &&BTWIDOPEN3=<2>%&LINE1%
TIPS 编辑,编辑6－3,50000,1,#1    
    CALL RUBBUTTON2  %&&WID2B%   %&&BTWIDOPEN3%   //阻塞模式


WAIT 501
HelloWindow  %&WID1%

TIPS 编辑,编辑7,50000,1,#1    
ENVI @@Cur=-1000,-1000 
///////ENVI @@Enable=%&WID%:0
    CALL SetAcative %&WID1%
    CALL RUNMENU2 %&WID% 1 3  //保存(&S)
TIPS 编辑,编辑8,50000,1,#1    
    CALL RUNMENU2 %&WID% 1 6  //退出(&X)
//THREAD+ ENVI @@Visable=%&WID%:*1
//THREAD+ ENVI @@Enable=%&WID%:1
TIPS 编辑,自动编辑完成,50000,1,#1    
_END //AUTO_SCIPT

_SUB  KIllMouse
    FIND $%&HIDECUR%=1,!! LOOP #%&RUN% = 0,! TEAM  IFEX $%&RUN% = 1, ENVI @@Cur=-1000,-1000 | WAIT 10 
_END

//函数: REPLACERES
//参数: 源文件 目标文件 临时文件 资源文件
_SUB  REPLACERES,*   // PECMD.EXE My_APP_U2.EXE PECMDBIG5_2.EXE  HELPBIG5_936_2.CMZ 
ENVI &&RUN=1
    ENVI &&SRC=%~1 //PECMD.EXE
    ENVI &&TMP_OUT=%~2  //My_APP_U2.EXE
    ENVI &&OUT=%~3  //PECMDBIG5_2.EXE
    ENVI &&RESF=%~4  //HELPBIG5_936_2.CMZ
    FILE --file %&TMP_OUT%
    FILE --file %&OUT%
    FDIR  --fullfile &&TMP_OUT1=%&TMP_OUT%
    FDIR  --fullfile &&OUT1=%&OUT%
    
    TEAM FILE -file %&TMP_OUT%|WAIT 500|EXEC* --exe:%&PTOOL%   =!pack -d  "%&SRC%"  -o  "%&TMP_OUT%"| WAIT 200  //解开
    ENVI &&SubPid=
    EXEC --pid:&SubPid  --exe:%&ETOOL%  ResEdit %&TMP_OUT1%    //编辑
ENVI @@Cur=?&&OldX,&&OldY   //备份位置
    ENVI &&&Clipboard?=&&OLD  //备份剪切板
    THREAD* @TEAM @LOGS **ON=0| CALL KIllMouse 
    CALL  AUTO_SCRIPT   %&RESF% %&TMP_OUT%       //自动脚本
    ENVI &&&Clipboard=%&OLD%  //恢复剪切板
    TEAM ENVI &RUN=0 | WAIT 50| ENVI @@Cur=%&OldX%,%&OldY%   //恢复位置
ENVI @@Cur=*1  //恢复
//LOGS
    
TIPS 编辑,恢复,50000,1,#1    
    TEAM FILE  %&OUT%
    EXEC --exe:%&PTOOL%   =!pack_exe --best --compress-resources=0 --compress-icons=0 "%&TMP_OUT%"  -o "%&OUT%"  //压缩
    TEAM  WAIT 1000| FILE --file %&TMP_OUT% | KILL *%&SubPid%  //| WAIT 100| ENVI @@DeskTopFresh=1 
TIPS 编辑,完毕,50000,1,#1   
     
_END //TOBIG5  


_SUB WAITNEW,W289H119,窗口,,,0,,-discloseb -nosysmenu
    ENVI &&I=%1
    TIME Timer1,1000, CALL OnTimer1
    CALL OnTimer1
_END

_SUB OnTimer1
    IFEX $%&I%<1, KILL  \
    ENVI @this=等待%&I%秒
    CALC &I=%&I% - 1
_END


// AUTO_MAIN  [源文件] [目标文件] [资源文件]
_SUB AUTO_MAIN
CALL * INITAUTO   // this 调用
ENVI &&SRC=PECMD.EXE  
ENVI &&DST=PECMDBIG5.EXE  
ENVI &&RES=HELPBIG5_936_2.CMZ  
FIND $  = %~1,! ENVI &&SRC=%1  
FIND $  = %~2,! ENVI &&DST=%2 
FIND $  = %~3,! ENVI &&RES=%3  
SIZE &&sz=%&SRC%
NAME &&SRCNM=%&SRC%
IFEX $ %&sz% > 600000,!! TEAM  EXEC --exe:%&PTOOL%   =!pack_exe -k --best --compress-resources=0 --compress-icons=0 %&SRC%  |WAIT 500 | EXEC =%&SRC% WAIT 100| WAITNEW 15  //| EXEC ="%MyName%" LOAD %CurFile% %* | EXIT 
TEAM EXEC =%&SRC% WAIT 10
FORX %&SRCNM%.00*,&&f,0, FILE --file %&&f%  

FDIR  --fullfile &SRC=%&SRC%
FDIR  --fullfile &DST=%&DST%
FDIR  --fullfile &RES=%&RES%

IFEX %&SRC%,! EXIT 
IFEX %&RES%,! EXIT 
IFEX %&TDIR%\,!   PATH %&TDIR%
CALL REPLACERES  %&SRC% %&TDIR%\~PECMDBIG5_TMP~.TMP  %&DST%  %&RES% 
FILE --file %&TDIR%\~PECMDBIG5_TMP~_original.*

_END

CALL AUTO_MAIN %* 
