manit 0 Posted November 6, 2011 (edited) Hi , I recently wrote c program which autoloads subtitle file (srt type) , if only one or none found else asks user to select appropriate file from list . Now I plan to write the same using autoit as it gives a gui look unlike DOS of c program binary. First I did I added an entry in registry key : HKEY_CLASSES_ROOT\*\shell\autoload video with subtitles\command default string : c:\turboc3\source\pass.exe %1 BTW my c code is expandcollapse popup//printf("\nflag line 1"); used while debugging #include<string.h> // for strcat,strcpy,strlen,memicmp,strrev #include<stdio.h> // for fgets,fopen,fprintf,fclose #include<stdlib.h> // for atoi,system #include<conio.h> //for clrscr //(3)currently we are using g:\log,list,a.bat files char name[128],finalsf[128],sf[20][128],fp[128];//sf=subtitle file,name=only video file name int sfnumber;//number of subtitle files found int check(char d[128]) { int len,cr;//cr=compare-result char bkup[128]; len=strlen(d); d[len-1]=0;//because last character in string received is \n then 0 strcpy(bkup,d); strrev(d); cr = memicmp(d, "trs", 3); if (cr==0) { //printf("\n%d:%s is an srt file",len,bkup); strcpy(sf[sfnumber],bkup); return 1; } else { //printf("\n%s!=trs",d); return 0; } } int findsubtitlefile() { FILE *fr,*log;//fr=read g:\\list.txt,log=write to g:\\log.txt char fn[128];//fn=file name log=fopen("c:\\asf\\log.txt","a"); if(log==NULL) printf ("\nCould not append g:\\log.txt in function findsubtitlefile"); fr=fopen("c:\\asf\\list.txt","r"); if(fr==NULL) printf("\ncould not read g:\\list.txt"); fprintf(log,"\nwe have to search srt in following \"name-length:file-name\" pairs \n"); while ( fgets ( fn, 127, fr ) != NULL ) { fprintf(log,"%d:%s\n",strlen(fn),fn); if(check(fn)) { fprintf(log,"found subtitle file : %s\n",strrev(fn)); sfnumber++; } } fclose(fr); fclose(log); if(sfnumber>0) return 1; else return 0; } void letuserdecide() { int i; printf("\nPLEASE CHOOSE SUBTITLE FILE"); for(i=0;i<sfnumber;i++) printf("\n%d)%s",i+1,sf[i]); printf("\nEnter option:"); scanf("%d",&i); strcpy(finalsf,sf[i-1]); } void main(int argc,char *argv[]) { FILE *log,*action; int i,j,len; char dir[120],command[512]; clrscr(); log=fopen("c:\\asf\\log.txt","w"); if(log==NULL) printf ("\nCould not open g:\\log.txt for writing "); // fp=full path for(i=1;i<argc;i++) { strcat(fp,argv[i]); strcat(fp," ");//here sprintf will not work because we are appending to fp in each loop } fp[strlen(fp)-1]=0; fprintf(log,"full path=%s\nnumber of words=%d",fp,argc-1); //copying directory name to 'dir' variable len=strlen(fp); i=strlen(fp)-1; while(fp[i]!='\\') i=i-1; for(j=0;j<i;j++) dir[j]=fp[j]; dir[j]=0; fprintf(log,"\ndirectory is %s",dir); //copying file name to 'name' variable for(j=0,i++;i<len;i++,j++) name[j]=fp[i]; //printf("\nfile name:%s",name); fprintf(log,"\nfile name : %s",name); //executing 'dir' command to output all items in current folder to g:\list.txt sprintf(command,"ls -1 \"%s\" > g:\\list.txt",dir); system(command); fprintf(log,"\nwe have executed : %s",command); fclose(log); command[0]=0; //let us find the subtitle file if (findsubtitlefile()) { //run the file with subtitle if(sfnumber>1) letuserdecide(); else strcpy(finalsf,sf[0]); sprintf(command,"\nk -subfont-text-scale 3 -fs -vf screenshot,expand=0:-40:0:0 \"%s\" -sub \"%s\\%s\"",fp,dir,finalsf); } else { //run file without subtitle sprintf(command,"\nk -fs \"%s\"",fp); } //printf("\nwe will run %s",command); action=fopen("c:\\asf\\a.bat","w"); if(action==NULL) printf("\nCould not open g:\\a.bat to write kovensky play command"); fputs(command,action); fclose(action); system("cmd /c g:\\a.bat"); //getchar(); while debugging to read output before exiting } $CmdLine will be useful to get file name passed Edited November 6, 2011 by manit Share this post Link to post Share on other sites
sleepydvdr 8 Posted November 6, 2011 You didn't ask any questions, so I assume you are looking for some kind of starting point. Here's something to think about: expandcollapse popup#include <ButtonConstants.au3> #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> $fileCount = 0 $subtitleFile = FileFindFirstFile ("*.srt") If $subtitleFile = 1 Then Dim $subtitleList[1] While 1 $file = FileFindNextFile($subtitleFile) If @error Then ExitLoop Else ReDim $subtitleList[$fileCount + 1] $subtitleList[$fileCount] = $file $fileCount += 1 EndIf WEnd FileClose($subtitleFile) EndIf If UBound($subtitleList) > 1 Then $Form1 = GUICreate("Select a subtitle", 284, 108) $Combo1 = GUICtrlCreateCombo("", 16, 32, 249, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL)) For $i = 0 To UBound($subtitleList) - 1 Step 1 GUICtrlSetData($Combo1, $subtitleList[$i]) Next $Button1 = GUICtrlCreateButton("Load", 192, 64, 75, 25) $Label1 = GUICtrlCreateLabel("Choose A Subtitle:", 16, 8, 91, 17) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 $subtitle = GUICtrlRead($Combo1) _RunYourCode() EndSwitch WEnd Else $subtitle = $subtitleList[0] _RunYourCode() EndIf Func _RunYourCode() ; Insert your code to play the movie with the selected subtitle. EndFunc #include <ByteMe.au3> Share this post Link to post Share on other sites
manit 0 Posted November 6, 2011 (edited) sleepydvdr , you wrote the code so quickly.(1) In _RunYourCode I want to run following commandk -subfont-text-scale 3 -fs -vf screenshot,expand=0:-40:0:0 <video_file> -sub <subtitle-file>k.exe is a binary present in my system path<video_file> is full path of video file that invoked my autoit program , so it should be $CmdLineRaw inside double quotes.<subtitle-file> should be the file I selected in drop down list (ofcourse , with full path & inside double quotes)I think I have to create a suitable string then use Run("string")_RunYourCode can use $filecount to determine if video should be run with or without subtitle.So , what should I write in Func _RunYourCode() ?(2) Also , I get "error:variable used without being declared" if folder containing video file has no srt files.I think $subtitleFile will be -1 if no srt file found . Thank You.Another thing , I noticed that functions in your code point to relevant autoit documentation. Edited November 6, 2011 by manit Share this post Link to post Share on other sites
manit 0 Posted November 12, 2011 sleepydvdr , please reply. Share this post Link to post Share on other sites