Помогите нажать на кнопку ...

 

имеется диалоговое окно, в окне кнопка

О‌К, хочу нажать ее из программы, но, никак, хоть ты тресни...

‌в приведенном фрагменте  h_ButtonOK - хэндл этой кнопки, проверял разными способами - дейсвительно кнопка ОК...

                i_DlgCtrlID = GetDlgCtrlID(h_ButtonOK);
                if (i_DlgCtrlID != 0)
                {
                        SendMessage(GetParent(h_ButtonOK),WM_COMMAND,MAKEWPARAM(i_DlgCtrlID,BN_CLICKED),(LPARAM)h_ButtonOK);
             return TRUE;
                }
 

SendMessage(h_ButtonOK, BN_CLICKED, 0, 0); // BN_CLICK?

не?‌

 
Комбинатор:

SendMessage(h_ButtonOK, BN_CLICKED, 0, 0); // BN_CLICK?

не?‌


не...не канает...  

 

А так че?

‌#include <WinUser32.mqh>

int iHandle=FindWindowExW(child,0,str,"Sell by Market");
         SetFocus(iHandle);
         SendMessageW(iHandle,WM_LBUTTONDOWN,0,0);


 
void CloseVirtualBuy()
     {
      string str;
      string closeOrdString="Position: "+"#"+(string)Ticket()+" "+Type()+" "+DoubleToString(Lot(),2)+" "+Symb()+" "+DoubleToString(Price(),_Digits);
      int CloseWindow=FindWindowW(NULL,closeOrdString);
      Print(CloseWindow, closeOrdString);
      child=GetWindow(CloseWindow,5);
      child=GetWindow(child,2);
      child=GetWindow(child,2);
      child=GetWindow(child,2);
      child=GetWindow(child,2);
      child=GetWindow(child,2);
          
      SetFocus(child);
      int iHandle=FindWindowExW(child,0,str,"Print");
        // SetFocus(iHandle);
            
         int CloseOrrder=GetWindow(iHandle,2);
           CloseOrrder=GetWindow(CloseOrrder,2);
            CloseOrrder=GetWindow(CloseOrrder,2);
              
         SendMessageW(CloseOrrder,WM_LBUTTONDOWN,0,0);
         SendMessageW(CloseOrrder,WM_LBUTTONUP,0,0);
      
      Sleep(500);  
      int OkButton=FindWindowExW(child,0,str,"Ok");
      SendMessageW(OkButton,WM_LBUTTONDOWN,0,0);
      SendMessageW(OkButton,WM_LBUTTONUP,0,0);
    
      Sleep(1000);
      if(CountOrders(0)==0)
        {
         BuyVirtualStop=0;
         BuyClosed=true;
         BuyOpened=false;
        }
     }
 
Maxim Dmitrievsky:
void CloseVirtualBuy()
     {
      string str;
      string closeOrdString="Position: "+"#"+(string)Ticket()+" "+Type()+" "+DoubleToString(Lot(),2)+" "+Symb()+" "+DoubleToString(Price(),_Digits);
      int CloseWindow=FindWindowW(NULL,closeOrdString);
      Print(CloseWindow, closeOrdString);
      child=GetWindow(CloseWindow,5);
      child=GetWindow(child,2);
      child=GetWindow(child,2);
      child=GetWindow(child,2);
      child=GetWindow(child,2);
      child=GetWindow(child,2);
          
      SetFocus(child);
      int iHandle=FindWindowExW(child,0,str,"Print");
        // SetFocus(iHandle);
            
         int CloseOrrder=GetWindow(iHandle,2);
           CloseOrrder=GetWindow(CloseOrrder,2);
            CloseOrrder=GetWindow(CloseOrrder,2);
              
         SendMessageW(CloseOrrder,WM_LBUTTONDOWN,0,0);
         SendMessageW(CloseOrrder,WM_LBUTTONUP,0,0);
      
      Sleep(500);  
      int OkButton=FindWindowExW(child,0,str,"Ok");
      SendMessageW(OkButton,WM_LBUTTONDOWN,0,0);
      SendMessageW(OkButton,WM_LBUTTONUP,0,0);
    
      Sleep(1000);
      if(CountOrders(0)==0)
        {
         BuyVirtualStop=0;
         BuyClosed=true;
         BuyOpened=false;
        }
     }


спасибо максим, посмотрю. 

к‌ак я понял, вы вызываете Win32 API прямо в MQL программе....

н‌икаких подводных камней не встретили еще ?

а‌ я вот DLL долблю...

 
Denis Sartakov:


спасибо максим, посмотрю. 

к‌ак я понял, вы вызываете Win32 API прямо в MQL программе....

н‌икаких подводных камней не встретили еще ?

а‌ я вот DLL долблю...


А там есть инклудник этот в стандартной поставке.. не помню где именно, давно делал, сейчас посмотрел нету у меня его сейчас, а был в другом терминале) где-то значит на форуме должен лежать здесь.. Да, прямо из mql, вроде не было проблем никаких, единственное что на впс, помню, он в упор не хотел мне искать окна когда я из него выходил, а когда был подключен к впс и окно было активно то все было нормально, ну это я наверное что-то не доделал. Сама кликалка по кнопкам терминала работала гуд, терминал сам по себе кликал :)

#import "user32.dll"
int FindWindowW(string lpClassName,string lpWindowName);
int FindWindowExW(int hwndParent,int hwndChildAfter,string lpszClass,string lpszWindow);
bool EnumWindows(int lpEnumFunc,int lParam);
bool EnumWindowsProc(int hwnd,int lParam);
int SetForegroundWindow(int hwnd);
#import

либо так
#include <WinUser32.mqh>


 
Maxim Dmitrievsky:


А там есть инклудник этот в стандартной поставке.. не помню где именно, давно делал, сейчас посмотрел нету у меня его сейчас, а был в другом терминале) где-то значит на форуме должен лежать здесь.. Да, прямо из mql, вроде не было проблем никаких, единственное что на впс, помню, он в упор не хотел мне искать окна когда я из него выходил, а когда был подключен к впс и окно было активно то все было нормально, ну это я наверное что-то не доделал. Сама кликалка по кнопкам терминала работала гуд.

#import "user32.dll"
int FindWindowW(string lpClassName,string lpWindowName);
int FindWindowExW(int hwndParent,int hwndChildAfter,string lpszClass,string lpszWindow);
bool EnumWindows(int lpEnumFunc,int lParam);
bool EnumWindowsProc(int hwnd,int lParam);
int SetForegroundWindow(int hwnd);
#import

либо так
#include <WinUser32.mqh>



вот спасибо, друг ! я собственно кликалку по кнопкам терминала и делаю !

з‌начит DLL не буду городить...

 
Denis Sartakov:


вот спасибо, друг ! я собственно кликалку по кнопкам терминала и делаю !

з‌начит DLL не буду городить...


Да не за что, он мне самому крови выпил со всеми этими окнами
 
Denis Sartakov:


спасибо максим, посмотрю. 

к‌ак я понял, вы вызываете Win32 API прямо в MQL программе....

н‌икаких подводных камней не встретили еще ?

а‌ я вот DLL долблю...

из камней встречал, то что на VPS винапи и клики не работают(кнопки не жмутся, сообщения не отправляются). приходилось держать открытой консоль доступа к рабочему столу на vps

может не так отправлял.‌

 

в своё время перемещал указатель мыши в нужное положение и нажимал ЛКМ )

естественно, нужно что бы окно с кнопкой, которую нажимаем, была сверху‌, поэтому скорее всего такой способ не подойдёт.

             mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,25000,35000, 0, 0);
             Sleep(100);
             mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN,25000,35000, 0, 0);
             Sleep(100);
             mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP,25000,35000, 0, 0);
             Sleep(10);

https://c.mql5.com/3/45/Alert_new_Job_ru.mq4