Скачать MetaTrader 5

Как узнать существует ли звуковой файл (в папке Sounds)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Andrew
87
Andrew  

Есть советник, который при определенных условиях подает звуковой сигнал. Вот функция:

void PlaySnd()
{
        string symbol = Symbol();
        PlaySound(symbol);
}

Т.е. если сигнал сработал на EURUSD, то проиграет файл EURUSD.wav, если на AUDUSD, то проиграет звуковой файл AUDUSD.wav. Мне нужно, чтобы если звукового файла не нашлось, то проиграл бы файл Signal.wav

что-то типа:

void PlaySnd()
{
        string symbol = Symbol();
         
        if (Узнаем существует ли файл "symbol.wav")
            PlaySound(symbol);
        else
            PlaySound("signal.wav");
}
Как узнать существование звукового файла?
Alexandr Bryzgalov
29586
Alexandr Bryzgalov  
kristopher:

Есть советник, который при определенных условиях подает звуковой сигнал. Вот функция:

Т.е. если сигнал сработал на EURUSD, то проиграет файл EURUSD.wav, если на AUDUSD, то проиграет звуковой файл AUDUSD.wav. Мне нужно, чтобы если звукового файла не нашлось, то проиграл бы файл Signal.wav

что-то типа:

Как узнать существование звукового файла?

проверять список файлов в папке со звуками )

стоит ли заморачиватся так ради звуков? )

Andrew
87
Andrew  
sanyooooook:

проверять список файлов в папке со звуками )


как это сделать?
Alexandr Bryzgalov
29586
Alexandr Bryzgalov  
kristopher:

как это сделать?

тут можно почитать

Получение списка всех экспертов с исходным кодом

Простой скрипт для демонстрации возможностей описанных функций:

//+------------------------------------------------------------------+
//|                                                CheckFindFile.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
#property show_inputs
 
#import "kernel32.dll"
int  FindFirstFileA(string path, int& answer[]);
bool FindNextFileA(int handle, int& answer[]);
bool FindClose(int handle);
#import
 
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int win32_DATA[79];
   
   int handle = FindFirstFileA(TerminalPath() + "\experts\*.mq4",win32_DATA);
   Print(bufferToString(win32_DATA));
   ArrayInitialize(win32_DATA,0);
 
   while (FindNextFileA(handle,win32_DATA))
      {
      Print(bufferToString(win32_DATA));
      ArrayInitialize(win32_DATA,0);
      }
 
   if (handle>0) FindClose(handle);
   
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//|  считать текст из буфера                                         |
//+------------------------------------------------------------------+ 
string bufferToString(int buffer[])
   {
   string text="";
   
   int pos = 10;
   for (int i=0; i<64; i++)
      {
      pos++;
      int curr = buffer[pos];
      text = text + CharToStr(curr & 0x000000FF)
         +CharToStr(curr >> 8 & 0x000000FF)
         +CharToStr(curr >> 16 & 0x000000FF)
         +CharToStr(curr >> 24 & 0x000000FF);
      }
   return (text);
   }  
//+------------------------------------------------------------------+
Andrew
87
Andrew  

спасибо. статья подсказала в какую сторону копать. вот функция FileExist:

#import "kernel32.dll"
int GetFileAttributesA(string filepath);
#import

bool FileExist(string path)
{
        int res = GetFileAttributesA(path);
        
        if (res == -1)
                return(false);
        else
                return(true);
}
Vadim Zhunko
5226
Vadim Zhunko  
kristopher:

спасибо. статья подсказала в какую сторону копать. вот функция FileExist:

Нестандартное решение. Почитал в МСДН... Ненадёжно выходит. Возможны проблемы. Вариант с перебором файлов и папок, как выложено выше, надёжнее.
Andrew
87
Andrew  

Zhunko:
Нестандартное решение. Почитал в МСДН... Ненадёжно выходит. Возможны проблемы. Вариант с перебором файлов и папок, как выложено выше,

надёжнее.
#import "kernel32.dll"
int  FindFirstFileA(string filepath, int& answer[]);
bool FindClose(int handle);
#import

bool FileExist(string path)
{
        int win32_DATA[80];
        int handle = FindFirstFileA(path, win32_DATA);
        
        if (handle > 0)
        {
                FindClose(handle);
                return(true);
        }
        else
                return(false);
}
первый вариант был такой :)
Андрей
1890
Андрей  
kristopher:
первый вариант был такой :)
INVALID_HANDLE_VALUE = -1
        if (handle > 0)
        {
                FindClose(handle);
                return(true);
        }
        else
                return(false);
Mikhail Kozhemyako
1247
Mikhail Kozhemyako  
kristopher:

Есть советник, который при определенных условиях подает звуковой сигнал. Вот функция:

Т.е. если сигнал сработал на EURUSD, то проиграет файл EURUSD.wav, если на AUDUSD, то проиграет звуковой файл AUDUSD.wav. Мне нужно, чтобы если звукового файла не нашлось, то проиграл бы файл Signal.wav

что-то типа:

Как узнать существование звукового файла?

Да в этом случае останавливайте советник совсем, если кто-то законно использует Ваш советник, у него будет нужный .wav. А если нет - дополнительная защита Ваших авторских прав.
Комбинатор
16033
Комбинатор  
Zhunko:
Нестандартное решение. Почитал в МСДН... Ненадёжно выходит.
Это... Без воды давай, по делу. Что ненадежно? Чем нестандартно? Это наверное наиболее легкое из возможных решение.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий