Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
У тебя Linux? Узнай, как установить на нее MetaTrader!
Andrew
89
Andrew 2012.10.08 12:52 

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

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
23901
Alexandr Bryzgalov 2012.10.08 13:19  
kristopher:

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

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

что-то типа:

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

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

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

Andrew
89
Andrew 2012.10.08 13:29  
sanyooooook:

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


как это сделать?
Alexandr Bryzgalov
23901
Alexandr Bryzgalov 2012.10.08 13:30  
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
89
Andrew 2012.10.11 11:04  

спасибо. статья подсказала в какую сторону копать. вот функция 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
5221
Vadim Zhunko 2012.10.11 11:51  
kristopher:

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

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

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
Андрей 2012.10.11 14:53  
kristopher:
первый вариант был такой :)
INVALID_HANDLE_VALUE = -1
        if (handle > 0)
        {
                FindClose(handle);
                return(true);
        }
        else
                return(false);
Mikhail Kozhemyako
1180
Mikhail Kozhemyako 2012.10.11 15:06  
kristopher:

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

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

что-то типа:

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

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