⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w32g_ut2.c

📁 linux上播放midi音乐,但是要一些设置.可网上查找. 软件名称: TiMidity++-2.13.0.tar
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifdef W32GUI_DEBUGPrintfDebugWnd("[%s]\n",buffer);#endif		if(bRes==TRUE){			break;		}		Sleep(300);	}	if(bRes==TRUE){		*size = (int)dwMessageSize;		return TRUE;	} else		return FALSE;}// 柍帇偡傞斉void ReadFromMailslotIgnore(HANDLE hmailslot, int num){	int i;	char buffer[10240];	int size;	for(i=0;i<num;i++){		if(ReadFromMailslot(hmailslot,buffer,&size)==FALSE)			return;	}	return;}// 儊乕儖僗儘僢僩偵彂偒崬傓HANDLE *OpenMailslot(void){	HANDLE hFile;	hFile = CreateFile(TIMIDITY_MAILSLOT,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);	if(hFile==INVALID_HANDLE_VALUE)		return NULL;	else		return hFile;}void CloseMailslot(HANDLE hmailslot){	CloseHandle(hmailslot);}int WriteMailslot(HANDLE hmailslot, char *buffer, int size){	DWORD dwWrittenSize;	BOOL bRes;	bRes = WriteFile(hmailslot,buffer,(DWORD)lstrlen(buffer) + 1,&dwWrittenSize,(LPOVERLAPPED)NULL);	if(bRes==FALSE){		return FALSE;	}	return TRUE;}int isURLFile(char *filename);extern volatile DWORD dwWindowThreadID;volatile argc_argv_t MailslotArgcArgv;volatile int MailslotThreadTeminateFlag = FALSE; void w32gMailslotThread(void){	int i;	char buffer[1024];	int size;	MailslotArgcArgv.argc = 0;	MailslotArgcArgv.argv = NULL;	for(i=0;i<10;i++){		hMailslot = CreateMailslot(TIMIDITY_MAILSLOT,0,MAILSLOT_WAIT_FOREVER,(LPSECURITY_ATTRIBUTES)NULL);		if (hMailslot != INVALID_HANDLE_VALUE) {			break;		}		hMailslot = NULL;		Sleep(300);	}	if(hMailslot==NULL){		return;	}	for(;;){		Sleep(1000);		if(MailslotThreadTeminateFlag==TRUE){			if(hMailslot!=NULL)				CloseHandle(hMailslot);			break;		}		for(;;){			Sleep(200);			if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){				Sleep(1000);				continue;			}			if(strcasecmp(buffer,MC_HEADER)!=0){				continue;			}			if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){				Sleep(1000);				continue;			}			if(strcasecmp(buffer,MC_TERMINATE)==0){				CloseHandle(hMailslot);			    w32g_send_rc(RC_STOP, 0);			    w32g_send_rc(RC_QUIT, 0);//				PostThreadMessage(dwWindowThreadID,WM_CLOSE,0,0);//				PostThreadMessage(dwWindowThreadID,WM_QUIT,0,0);				Sleep(500);				return;			}			if(strcasecmp(buffer,MC_FILES)==0){				char **files;				int nfiles;				int flag = TRUE;				if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){					continue;				}				nfiles = atoi(buffer);				// MailslotArgcArgv丂偑弶婜壔偝傟偰偄側偐偭偨傜張棟搑拞偲偟偰柍帇				if(MailslotArgcArgv.argc!=0 || MailslotArgcArgv.argv!=NULL){					ReadFromMailslotIgnore(hMailslot,nfiles);					continue;				}				files = (char **)malloc(sizeof(char *)*nfiles);				if(files==NULL){					ReadFromMailslotIgnore(hMailslot,nfiles);					continue;				}				for(i=0;i<nfiles;i++){					if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){						flag = FALSE;						break;					}					files[i] = (char *)malloc(sizeof(char)*(size+1));					if(files[i]==NULL){						int j;						ReadFromMailslotIgnore(hMailslot,nfiles-i-1);						for(j=0;j<i;j++){							free(files[j]);						}						flag = FALSE;						break;					}					strncpy(files[i],buffer,size);					files[i][size] = 0;				}				if(flag==FALSE){					free(files);					continue;				}				MailslotArgcArgv.argc = nfiles;				MailslotArgcArgv.argv = files;				// files 偼暿偺偲偙傠偱夝曻偟偰偔傟傞				w32g_send_rc(RC_EXT_LOAD_FILES_AND_PLAY,(int32)&MailslotArgcArgv);//				w32g_send_rc(RC_EXT_LOAD_FILE,(int32)files[0]);				continue;			}			if(strcasecmp(buffer,MC_PLAYLIST_CLEAR)==0){				int param_num;				if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){					continue;				}				param_num = atoi(buffer);				w32g_send_rc(RC_EXT_CLEAR_PLAYLIST,0);				ReadFromMailslotIgnore(hMailslot,param_num);				continue;			}			if(strcasecmp(buffer,MC_PLAY)==0){				int param_num;				if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){					continue;				}				param_num = atoi(buffer);				w32g_send_rc(RC_LOAD_FILE,0);				ReadFromMailslotIgnore(hMailslot,param_num);				continue;			}			if(strcasecmp(buffer,MC_PLAY_NEXT)==0){				int param_num;				if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){					continue;				}				param_num = atoi(buffer);				w32g_send_rc(RC_NEXT,0);				ReadFromMailslotIgnore(hMailslot,param_num);				continue;			}			if(strcasecmp(buffer,MC_PLAY_PREV)==0){				int param_num;				if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){					continue;				}				param_num = atoi(buffer);				w32g_send_rc(RC_REALLY_PREVIOUS,0);				ReadFromMailslotIgnore(hMailslot,param_num);				continue;			}			if(strcasecmp(buffer,MC_STOP)==0){				int param_num;				if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){					continue;				}				param_num = atoi(buffer);				w32g_send_rc(RC_STOP,0);				ReadFromMailslotIgnore(hMailslot,param_num);				continue;			}			if(strcasecmp(buffer,MC_PAUSE)==0){				int param_num;				if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){					continue;				}				param_num = atoi(buffer);				w32g_send_rc(RC_PAUSE,0);				ReadFromMailslotIgnore(hMailslot,param_num);				continue;			}			if(strcasecmp(buffer,MC_SEND_TIMIDITY_INFO)==0){				int param_num;				if(ReadFromMailslot(hMailslot,buffer,&size)==FALSE){					continue;				}				param_num = atoi(buffer);				ReadFromMailslotIgnore(hMailslot,param_num);				// 壗傕偟側偄				continue;			}		}	}}#define TIMIDTY_MUTEX_NAME "TiMidity_pp_Win32GUI_ver_1_0_0"static HANDLE hMutexTiMidity = NULL;// TiMidity 偑桞堦側傞偙偲傪庡挘偟傑偡// 偦偺徹嫆偺 Mutex 傪 hMutexTiMidity 偵曐帩偟傑偡int UniqTiMidity(void){	hMutexTiMidity = CreateMutex(NULL,TRUE,TIMIDTY_MUTEX_NAME);	if(hMutexTiMidity!=NULL && GetLastError()==0){		return TRUE;	}	if(GetLastError()==ERROR_ALREADY_EXISTS){		;	}	if(hMutexTiMidity!=NULL){		CloseHandle(hMutexTiMidity);	}	hMutexTiMidity = NULL;	return FALSE;}// 偡偱偵 TiMidity 偑懚嵼偡傞偐int ExistOldTiMidity(void){	HANDLE hMutex = CreateMutex(NULL,TRUE,TIMIDTY_MUTEX_NAME);	if(GetLastError()==ERROR_ALREADY_EXISTS){		if(hMutex!=NULL)	CloseHandle(hMutex);	return TRUE;	}	if(hMutex!=NULL)		CloseHandle(hMutex);	return FALSE;}// 壗夞偐桞堦偺 TiMidity 偵側傠偆偲偟傑偡int TryUniqTiMidity(int num){	int i;	for(i=0;i<num;i++){		if(UniqTiMidity()==TRUE){			return TRUE;		}		Sleep(1000);	}	return FALSE;}int SendFilesToOldTiMidity(int nfiles, char **files){	int i;	HANDLE hmailslot;	char buffer[1024];	int size;	hmailslot = OpenMailslot();	if(hmailslot==NULL)		return FALSE;	strcpy(buffer,MC_HEADER);	size = strlen(buffer); WriteMailslot(hmailslot,buffer,size);	strcpy(buffer,MC_FILES);	size = strlen(buffer); WriteMailslot(hmailslot,buffer,size);	sprintf(buffer,"%d",nfiles);	size = strlen(buffer); WriteMailslot(hmailslot,buffer,size);	for(i=0;i<nfiles;i++){		char filepath[1024];		char *p;//		if(url_check_type(files[i])==-1 && GetFullPathName(files[i],1000,filepath,&p)!=0){		if(isURLFile(files[i])==FALSE && GetFullPathName(files[i],1000,filepath,&p)!=0){			size = strlen(filepath); WriteMailslot(hmailslot,filepath,size);		} else {			size = strlen(files[i]); WriteMailslot(hmailslot,files[i],size);		}	}	CloseMailslot(hmailslot);	return TRUE;}int SendCommandNoParamOldTiMidity(char *command){	HANDLE hmailslot;	char buffer[1024];	int size;	hmailslot = OpenMailslot();	if(hmailslot==NULL)		return FALSE;	strcpy(buffer,MC_HEADER);	size = strlen(buffer); WriteMailslot(hmailslot,buffer,size);	strcpy(buffer,command);	size = strlen(buffer); WriteMailslot(hmailslot,buffer,size);	strcpy(buffer,"0");	size = strlen(buffer); WriteMailslot(hmailslot,buffer,size);	CloseMailslot(hmailslot);	return TRUE;}int TerminateOldTiMidity(void){	return  SendCommandNoParamOldTiMidity(MC_TERMINATE);}int ClearPlaylistOldTiMidity(void){	return  SendCommandNoParamOldTiMidity(MC_PLAYLIST_CLEAR);}int PlayOldTiMidity(void){	return  SendCommandNoParamOldTiMidity(MC_PLAY);}int PlayNextOldTiMidity(void){	return  SendCommandNoParamOldTiMidity(MC_PLAY_NEXT);}int PlayPrevOldTiMidity(void){	return  SendCommandNoParamOldTiMidity(MC_PLAY_PREV);}int StopOldTiMidity(void){	return  SendCommandNoParamOldTiMidity(MC_STOP);}int PauseOldTiMidity(void){	return  SendCommandNoParamOldTiMidity(MC_PAUSE);}// 俀廳婲摦帪偺張棟// opt==0 : 僼傽僀儖傪屆偄 TiMidity 偵搉偟偰帺暘偼廔椆丅屆偄 TiMidity 偑側偄偲偒偼帺暘偑婲摦丅//                屆偄僾儗僀儕僗僩偼僋儕傾偡傞丅// opt==1 : 僼傽僀儖傪屆偄 TiMidity 偵搉偟偰帺暘偼廔椆丅屆偄 TiMidity 偑側偄偲偒偼帺暘偑婲摦丅//               屆偄僾儗僀儕僗僩偼僋儕傾偟側偄丅// opt==2 : 屆偄 TiMidity 傪廔椆偟偰丄帺暘偑墘憈偡傞// opt==3 : 帺暘偼壗傕偣偢廔椆// opt==4 : 屆偄 TiMidity 傪廔椆偟偰丄帺暘偼壗傕偣偢廔椆// opt==5 : 俀廳偵婲摦偡傞// 帺暘偑廔椆偡傞傋偒偲偒偼 FALSE 傪曉偡// 帺暘偑廔椆偡傞傋偒偱側偄偲偒偼 TRUE 傪曉偡int w32gSecondTiMidity(int opt, int argc, char **argv){	int i;	switch(opt){	case 0:	case 1:		if(ExistOldTiMidity()==TRUE){			if(opt==0)				ClearPlaylistOldTiMidity();			SendFilesToOldTiMidity(argc > 0 ? argc-1 : 0, argv+1);			return FALSE;		} else {			if(TryUniqTiMidity(20)==TRUE){				w32gStartMailslotThread();				return TRUE;			}			return FALSE;		}	case 2:		if(ExistOldTiMidity()==TRUE){			for(i=0;i<=20;i++){				TerminateOldTiMidity();				if(UniqTiMidity()==TRUE){					w32gStartMailslotThread();					return TRUE;				}				Sleep(1000);			}		} else {			if(TryUniqTiMidity(20)==TRUE){				w32gStartMailslotThread();				return TRUE;			}		}		return FALSE;	case 3:		return FALSE;	case 4:		if(ExistOldTiMidity()==TRUE){			for(i=0;i<=20;i++){				TerminateOldTiMidity();				if(ExistOldTiMidity()==FALSE){					return FALSE;				}				Sleep(1000);			}		}		return FALSE;	case 5:		return TRUE;	default:		return FALSE;	}}// w32gSecondTiMidity() 偺屻張棟int w32gSecondTiMidityExit(void){	MailslotThreadTeminateFlag = TRUE;	Sleep(300);	if(hMailslot!=NULL)		CloseHandle(hMailslot);	ReleaseMutex(hMutexTiMidity);	CloseHandle(hMutexTiMidity);	return 0;}// Before it call timidity_start_initialize()int isURLFile(char *filename){	if(strncasecmp(filename,"http://",7)==0		|| strncasecmp(filename,"ftp://",6)==0		|| strncasecmp(filename,"news://",7)==0		|| strncasecmp(filename,"file:",5)==0		|| strncasecmp(filename,"dir:",4)==0){		return TRUE;	} else {		return FALSE;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -