home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / toku2 / mpgcut01.lzh / mpgtxgui.pl < prev    next >
Encoding:
Text File  |  2004-03-15  |  5.6 KB  |  195 lines

  1. ##mpgtx frontend for win32;
  2. ##require win32-gui 0.670 or higher.
  3.  
  4. use Win32::MCI::Basic;
  5. use Win32::GUI;
  6. use Win32::API;
  7. $|=1;
  8.  
  9. $Window=Win32::GUI::Window->new(-name=>'Main',-text=>'Mpgcutter',-size=>[558,364]);
  10. $Window->AddLabel(-name=>"Status1",-pos=>[4,4],-size=>[400,20],-text=>"Drop mpeg file.",);
  11. $Window->AddButton(-name=>"play",-pos=>[4,30],-text=>"play",);
  12. $Window->AddButton(-name=>"pause",-pos=>[44,30],-text=>"pause",);
  13. $Window->AddButton(-name=>"rev",-pos=>[104,30],-text=>"<",);
  14. $Window->AddButton(-name=>"ff",-pos=>[126,30],-text=>">",);
  15. $Window->AddButton(-name=>"frev",-pos=>[148,30],-text=>"<<",);
  16. $Window->AddButton(-name=>"fff",-pos=>[176,30],-text=>">>",);
  17. $Window->AddTextfield(-name=>"Textfield1",-pos=>[204,30],-size=>[80,20],);
  18. $Window->AddLabel(-name=>"Frame",-pos=>[286,32],-size=>[80,20],);
  19. $Window->AddSlider(-name=>"Slider",-pos=>[4,50],-size=>[400,50]);
  20. $Window->AddButton(-name=>"regist",-pos=>[404,4],-text=>"regist",);
  21. $Window->AddButton(-name=>"remove",-pos=>[404,24],-text=>"remove",);
  22. $Window->AddButton(-name=>"done",-pos=>[404,44],-text=>"done",);
  23. $Window->AddListbox(-name => "List1",-pos=>[454,4],-size=>[90,100],-menu =>1,-group=>1,-addstyle=>WS_VSCROLL,-sort=>1);
  24.  
  25. #Get PlayMovies WindowHandle
  26. $Window->AddLabel(-name=>"ID",-pos=>[4,108],-visible=>1);
  27. $hwndx=$Window->ID->GetWindow(GW_HWNDLAST);
  28.  
  29. #Movie is play on another window.
  30. #$hwndx=0;
  31.  
  32. #### Enable DragDrop Only allwindow.
  33. $myhandle=$Window->{-handle};
  34. $DragAcceptFiles=new Win32::API('shell32', 'DragAcceptFiles', "II", "");
  35. $DragAcceptFiles->Call($myhandle,"1");
  36.  
  37. ##set default window style.
  38. $Window->Textfield1->Text("1000");
  39. $Window->Slider->Min(0);$Window->Slider->Max(200);
  40. $Window->AddTimer('T1',50);
  41.  
  42. $Window->Show();
  43. Win32::GUI::Dialog();
  44.  
  45. ####GUI Events
  46.  
  47. sub regist_Click{
  48.     ($i,$mess)=mciSendString("status avi1 position");
  49. #end can't regist
  50.     if ($mess ==$length){return;}
  51. #equal time can't regist
  52.     $sel=$Window->List1->Count();$sel--;
  53.     for(0..$sel){
  54.         $eq = $Window->List1->GetString($_);$eq=$eq*1000;
  55.         if ($eq == $mess){return;}
  56.     }
  57.     $mess=sprintf("%012.03f",($mess/1000));
  58.     $Window->List1->AddString($mess);
  59. }
  60.  
  61. sub Main_DropFiles{
  62.     $file=shift;
  63.     @data=&hndlview($file);
  64. #    foreach (@data){print ":$_\n";}
  65.     $fname=$data[0];
  66. #    print "fname $fname\n";
  67.     mciSendString("close avi1");
  68.     mciSendString("open \"$fname\" alias avi1");
  69.     mciSendString("set avi1 time format ms");
  70.     mciSendString("window avi1 handle $hwndx");
  71.     ($i,$buff)=mciSendString("status avi1 length");$length=$buff;
  72.     ($i,$buff)=mciSendString("where avi1 source");
  73. #    print "$buff\n";
  74.     (undef,undef,$x,$y)=split(/ /,$buff);
  75.     $Window->ID->Resize($x,$y);
  76.     $view=sprintf("%12.03f [%03d,%03d] ",($length/1000),$x,$y);
  77.     $view.=" $fname";
  78.     $Window->Status1->Text("$view");
  79.     $Window->List1->Reset();
  80. }
  81.  
  82. ###Timer.. FrameNumber Update
  83. sub T1_Timer{
  84.     if ($length <1){return;}
  85.     ($i,$buff)=mciSendString("status avi1 position");
  86.     $spos=int((200/$length)*$buff);$Window->Slider->Pos($spos);
  87.     $buff3=sprintf("%12.03f",($buff/1000));
  88.     $Window->Frame->Text($buff3);
  89.     $Window->Update();
  90. }
  91.  
  92. sub Main_Terminate{return -1;}
  93. sub play_Click{mciSendString("play avi1");}
  94. sub pause_Click{mciSendString("pause avi1");}
  95. sub rev_Click{&move_frame(-1);}
  96. sub ff_Click{&move_frame(1);}
  97. sub frev_Click{$step=$Window->Textfield1->Text;&move_frame(-$step);}
  98. sub fff_Click{$step=$Window->Textfield1->Text;&move_frame($step);}
  99.  
  100. ####Frame seek
  101. sub move_frame{
  102.     $set=shift;
  103.     ($i,$mess)=mciSendString("status avi1 position");
  104.     $mess=$mess+$set;
  105.     mciSendString("seek avi1 to $mess");
  106.     &T1_Timer;
  107. }    
  108.  
  109. sub Slider_Scroll {
  110.     $mess=int(($Window->Slider->Pos)*($length/200));
  111. #    print "Scroll $mess\n";
  112.     mciSendString("seek avi1 to $mess");
  113.     &T1_Timer;
  114. }
  115.  
  116. sub remove_Click{
  117.     $sel = $Window->List1->SelectedItem();
  118. #    print "Remove $sel\n";
  119.     if ($sel==-1){return;}
  120.     $Window->List1->RemoveItem($sel);
  121. }
  122.  
  123. sub List1_DblClick{
  124.     $mess = $Window->List1->SelectedItem();
  125.     $mess = $Window->List1->GetString($mess);
  126.     $mess2=$mess*1000;
  127.     mciSendString("seek avi1 to $mess2");
  128.     &T1_Timer;
  129. }
  130.  
  131. ###make result.bat and run.
  132. sub done_Click{
  133.     open (DATA,">./result.bat");
  134.     print DATA "mpgtx -s $fname ";
  135.     $sel=$Window->List1->Count();$sel--;
  136.     $mess = $Window->List1->GetString(0);
  137.     if ($mess==0){
  138.         $flug=0;$sels=1;
  139.     }else{
  140.         $flug=1;$sels=0;print DATA "[-";
  141.     }
  142.     $chunk=0;
  143.     for($sels..$sel){
  144.         $mess = $Window->List1->GetString($_);
  145.         $mess=$mess*1000;
  146. ##time format convert
  147.         $hour=int($mess/3600000);$mess=$mess-$hour*3600000;
  148.         $min=int($mess/60000);$mess=$mess-$min*60000;
  149.         $sec=int($mess/1000);$secs=$mess%1000;
  150.         if ($flug==0){
  151.             $flug=1;print DATA "\[$hour:$min:$sec\.$secs-";
  152.         }else{
  153.             $flug=0;print DATA "$hour:$min:$sec\] ";$chunk++;
  154.         }
  155.     }
  156.     if ($flug==1){print DATA "\]";$chunk++;}
  157. #work file delete.
  158.     unlink "chunk.mpg";
  159. #    print "chunk $chunk\n";
  160.     if ($chunk==1){
  161. ##only 1-file 
  162.         unlink "chunk.mpg";
  163.     }else{
  164.         print DATA "\n"."mpgtx -j ";
  165.         for(1..$chunk){
  166.             unlink "chunk-".$_.".mpg";
  167.             print DATA "chunk-".$_.".mpg ";
  168.         }
  169.     }
  170.     close (DATA);
  171.  
  172. #run batch file
  173.     system("result.bat");
  174. #rename.
  175.     rename "chunk.mpg","$fname\.mpg";
  176.     print "Successed.\n";
  177. }
  178.  
  179. ####extract Dragdrop keyhandle
  180. sub hndlview{
  181.     my @data;
  182.     my $DragQueryFile =new Win32::API('shell32','DragQueryFileA',"NNPN","N");
  183.      my $DragFinish =new Win32::API('shell32','DragFinish',"N","");
  184.     my $hndl=shift;
  185.     my $buffer=' 'x1024;
  186.     my $no = $DragQueryFile->Call($hndl, 0xFFFFFFFF, $buffer,1024);
  187.     $no--;
  188.     for (0..$no){
  189.         my $fname= $DragQueryFile->Call($hndl,$_,$buffer,1024);
  190.         push (@data,substr($buffer,0,$fname));
  191.     }
  192.     $DragFinish->Call($hndl);
  193.     return (@data);
  194. }
  195.