버튼 및 마우스 클릭을 가로채는 자동화. - 페이지 9

 
YuraZ >> :

SP2 XPPRO

소프트웨어가 지속적으로 컴퓨터에 많이 설치되어 있으면 무엇이든 될 수 있습니다.

AXIS가 대상인 경우 - 안정적이고 입증된 소규모 작업 세트가 회전하는 경우

즉, 많은 프로그램의 가치가 없으며 무언가가 지속적으로 철거되고 많은 것이 거기에 배치되지 않습니다.

일반적으로 문제가 없습니다


내 라이브러리는 훨씬 작습니다. 교체해 보니 1회선에서 전문가 교체가 가능한지 봤는데 단말기가 넘어져 버렸습니다. 다시 실행되어 더 이상 작동하지 않습니다. 출력 -1, 즉 명령이 잘못되었습니다. 무엇이 잘못되었는지는 분명하지 않지만, 왜냐하면. 1 번 작동했습니다.


다른 운영 체제의 가상 머신에서 플레이하기로 결정했습니다.

 
HIDDEN >> :

컴퓨터와 네트워크에서 user32.dll 라이브러리 파일을 살펴보니 다양한 크기의 파일이 많이 있습니다.

아마도 내 문제는 라이브러리 자체가 곡선이라는 것입니다.


Ilnur, 어렵지 않다면 여기에 라이브러리 버전을 게시해 주시면 테스트해 보겠습니다.

Yuraz, 그리고 당신은 Ilnur의 코드에 따라 함수의 이름을 찾아서 대체했습니다. 어렵지 않다면 라이브러리도 배치하십시오.

XP Pro SP3가 있습니다.

도서관을 붙였습니다.

파일:
user32_1.zip  305 kb
 

게시된 라이브러리를 시도했는데 스크립트가 실행될 때 터미널이 계속 충돌합니다.

맨손으로 깨끗한 윈도우에 똑같은 쓰레기를 놓고 모니터를 이마로 두드려도 스위치가 작동하지 않습니다.


나는 무엇을해야할지 모르겠다. 완전한 교착 상태에서 더 나은 시간이 될 때까지 구현 시도를 다시 연기합니다 .....

 
// Зайцев Ю. В. YURAZ
//
// программируем на API 
// передать данные в SysDateTimePick32 можно через ХУК ,  но хуки не люблю  
// потому проколотим дату кнопками ввода
// 
// 


#define GW_HWNDNEXT                     2

#define WM_ACTIVATE                     0x0006
#define WM_ENABLE                       0x000A
#define WM_SETFOCUS                     0x0007

#define WM_KEYDOWN                     0x0100
#define WM_KEYUP                       0x0101

#define VK_TAB                         0x09
#define VK_RIGHT                       0x27


#define GW_CHILD                       5

// ID 
#define _ID_TESTER                     0x053       // дескриптор ТЕСТЕРА     
#define _ID_TW                         0x81BF      // дескриптор окна TESTERA
#define _ID_TERMINAL                   0xE81E

#define _ID_NAV                         0xE81B      // навигатор


#import "user32.dll"
   int       SendMessageA ( int hWnd , int Msg , int wParam , string lParam ) ;
   int       PostMessageA ( int hWnd , int Msg , int wParam , int lParam ) ;
   int       GetWindowTextA ( int hWnd , string lpString , int nMaxCount ) ;
   int       GetDlgItem ( int hDlg , int nIDDlgItem ) ;
   int       GetAncestor ( int hWnd , int gaFlags ) ;
   int       GetWindow ( int hWnd , int uCmd ) ;
#import


void start ( )
{


   int hMetaTrader = GetAncestor ( WindowHandle ( Symbol ( ) , Period ( ) ) , 2 ) ;                // Дескриптор основного окна терминала
   Print ( "hMetaTrader = " , hMetaTrader , " || " , DecToHex ( hMetaTrader ) ) ;

   int hTerminal = GetDlgItem ( hMetaTrader , _ID_TERMINAL ) ;                                  // Дескриптор окна валютной пары
   Print ( "hTerminal = " , hTerminal , " || " , DecToHex ( hTerminal ) ) ;

   int hTester = GetDlgItem ( hTerminal , _ID_TESTER ) ;                                      // Дескриптор окна тестера стратегий
   Print ( "hTester = " , hTester , " || " , DecToHex ( hTester ) ) ;    

// хитро вычисляем окошко объекта 
   int hOt   =   GetWindow ( FindHendlKey ( GetDlgItem ( hTester , _ID_TW ) , "От:" ) , GW_HWNDNEXT ) ;
   Print ( "hOt = " , hOt , " || " , DecToHex ( hOt ) ) ;    // для отладки покажем HENDL окна ввода даты

//
// тупо нажимаем дату  2001.03.27
//
    SendMessageA ( hOt , WM_ACTIVATE ,        1 ,    0 ) ; // Активизируем
    SendMessageA ( hOt , WM_ENABLE   ,        1 ,    0 ) ;
    SendMessageA ( hOt , WM_SETFOCUS ,        1 ,    0 ) ;

 
    PostMessageA ( hOt , WM_KEYDOWN   ,        0x032    ,    1 ) ; //  0x32 код '2'
     Sleep ( 1000 ) ;
    PostMessageA ( hOt , WM_KEYDOWN   ,        0x030    ,    1 ) ; //  
     Sleep ( 1000 ) ;
    PostMessageA ( hOt , WM_KEYDOWN   ,        0x030    ,    1 ) ; //
     Sleep ( 1000 ) ;
    PostMessageA ( hOt , WM_KEYDOWN   ,        0x031    ,    1 ) ; // 2001 
     Sleep ( 1000 ) ;
    PostMessageA ( hOt , WM_KEYDOWN   ,        VK_RIGHT ,    1 ) ; // .
     Sleep ( 1000 ) ;
    PostMessageA ( hOt , WM_KEYDOWN   ,        0x030    ,    1 ) ; // 12
     Sleep ( 1000 ) ;
    PostMessageA ( hOt , WM_KEYDOWN   ,        0x033    ,    1 ) ; // 03
     Sleep ( 1000 ) ;
    PostMessageA ( hOt , WM_KEYDOWN   ,        VK_RIGHT ,    1 ) ; // .
     Sleep ( 1000 ) ;
    PostMessageA ( hOt , WM_KEYDOWN   ,        0x032    ,    1 ) ; //  27
     Sleep ( 1000 ) ;
    PostMessageA ( hOt , WM_KEYDOWN   ,        0x037    ,    1 ) ; // 
     Sleep ( 1000 ) ;
    SendMessageA ( hOt , WM_KEYDOWN   ,        VK_TAB   ,    0 ) ;
     Sleep ( 1000 ) ;
 
}

 
 
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string DecToHex ( int n )
   {
   string s = "" , c ;
   while ( n ! = 0 )
     {
       if ( n % 16 < 10 )
          c = CharToStr ( n % 16 + '0' ) ;
       else 
          c = CharToStr ( n % 16 + 'A' - 10 ) ;
      s = c + s ;
      n = n / 16 ;
     }
   return ( s ) ;
   }

//+------------------------------------------------------------------+
//
// прощелкать объекты
// ищем объект по имени 
//
//+------------------------------------------------------------------+

int FindHendlKey ( int Current , string findname )
{
   string p1 =    "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234" ;
   int temp = GetWindow ( Current , GW_CHILD ) ;                    // ищем
   while ( temp ! = NULL )
   {
     GetWindowTextA ( temp , p1 , StringLen ( findname ) + 1 ) ; 
     if ( p1 = = findname )
     {                                                            // проверим а не  тот ли это объект
         return ( temp ) ; // это то что мы ищем
     }
     int r =    FindHendlKey ( temp   ,    findname   ) ;            // не значит не она , обойдем ее дочерние объекты
     if ( r ! = NULL )
     {
         return ( r ) ;                                              // опс нашли дочку
     }
     temp = GetWindow ( temp , GW_HWNDNEXT ) ;                      // проверяем следующий объект, дочерний 
   }
   return ( 0 ) ;
}

숨겨진 04.05.2009 14:20



추가로 ... 필요한 키보드 코드의 형성이라는 의미에서 입력 날짜에


 


아마도 LVN_ COLUNCLICK 기능이 적합하지만 무언가가 작동하지 않을 수 있습니다.

 

F9(주문)로 호출되는 창을 잡는 방법을 알려주세요.

텍스트는 검색되지 않습니다.

지금까지 다음과 같이 잡았습니다.

 int hwnd=GetAncestor(WindowHandle(name, Period ()), 2 ); //main terminal handle

string s= "" ; 

hdlg=GetLastActivePopup(hwnd); //FindWindowA(0,s);

 if (hdlg!=hwnd){

         GetWindowTextA(hdlg,s,GetWindowTextLengthA(hdlg)+ 1 ); //работает, надо s=""   

         Print (s);

} 
 
//------------------------------------------------------------------    F9
void F9()
{
         int h= WindowHandle ( Symbol (), Period ());   // хэндл графика
         int hMetaTrader=GetAncestor(h, 2 );   // хэндл МТ
        PostMessageA(h, WM_COMMAND, 35458 , 0 ); // открываем F9
}

러시아어 MT로 창 핸들 주문

         int h=FindWindowA ( "#32770" , "Ордер");

--------

Spy++를 사용하여 Windows에서 리소스 ID 찾기

 

이것은 터미널에서 러시아어가 선택된 경우에만 작동하지만 예를 들어 클라이언트의 터미널에 중국어가 있는 경우에는?

중국어로 검색하려면?) 다른 방법이 필요합니다.

내가 지정한 옵션이 작동하는 동안.

 

DKeN :

내가 지정한 옵션이 작동하는 동안.

축하합니다, 그럼 무엇을 원하시나요?

이 F9에만 있는 고유한 리소스를 창에서 볼 수 있습니다.

 

FindWindowA 이후에는 찾은 창의 스레드/프로세스 ID도 확인해야 합니다(GetWindowThreadProcessId 함수). 발견된 주문 창은 메타 트레이더의 다른 사본에 속할 수 있습니다.

사유: