¿Cómo puedo determinar si el botón de desplazamiento está pulsado o presionado y, en ese caso, presionarlo? - página 5

 

int max = SendMessage ( hwndTaskbar, TB_BUTTONCOUNT, 0, 0);

Por favor, dígame dónde puedo ver todos los valores de las constantes como: TB_BUTTONCOUNT, TB_ISBUTTONPRESSED ?

¡Quiero determinar el botón y su estado !

 
Puedes buscarlo en MSDN.
 

¿Qué comando de la barra de herramientas se puede utilizar para desplazarse por los botones y encontrar el adecuado?

¿Alguien ha hecho esto?

Se ha encontrado el descriptor de la ventana gráfica:

#property copyright "Copyright © 2012 ЛЕО"
#import "user32.dll" 
      int      GetWindow            (int, int);
      int      FindWindowExA        (int, int, string, string);
      int      GetParent            (int hWnd); 
      bool     GetCursorPos         (int& Pos[2]);
      bool     GetWindowRect        (int hWnd,int& Pos[4]);
      int      GetKeyState          (int button); 
      void     mouse_event          (int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
      int      GetAncestor          (int hWnd, int gaFlags);
      int      GetWindowTextLengthA (int);
      int      GetWindowTextA       (int, string, int);
#import
#import "gdi32.dll" int GetPixel (int hDC, int x, int y);
int         Pos[2];
int         rect[4];
int         hwnd, hg, h;
int         X, Y;
string      Name       = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234";
int deinit() {ObjectsDeleteAll();Comment ("");}
int start() {
      ObjectsDeleteAll(); Comment ("");

      int hwnd  = GetAncestor (WindowHandle(Symbol(),Period()),2); //дескриптор основного окна терминала
      
      int temp  = GetWindow (hwnd, 5);              
      int Count = GetWindowTextLengthA (temp); GetWindowTextA (temp, Name, Count+1);
      if (Name != "Стандартная" || Name == "Графики" || Name == "Графические инструменты") {
            for (int i=0;i<10;i++) {
                  temp  = GetWindow (temp, 2);  if (temp == 0) break;
                  Count = GetWindowTextLengthA (temp); GetWindowTextA (temp, Name, Count+1);
                  if (Name == "Стандартная" || Name == "Графики" || Name == "Графические инструменты") {hg = temp; break;}
            }
      } else hg = temp;
      
      int h  = GetWindow (hg, 5);              
      Count = GetWindowTextLengthA (h); GetWindowTextA (h, Name, Count+1);
      if (Name != "Графики") {
            for (i=0;i<10;i++) {
                  h  = GetWindow (h, 2);  if (h == 0) break;
                  Count = GetWindowTextLengthA (h); GetWindowTextA (h, Name, Count+1);
                  if (Name == "Графики") break;
            }
      }
      Print (DecToHex(h,8));

      while (!IsStopped()) {
            GetWindowRect (h,rect);
            GetCursorPos  (Pos);
            X                       = Pos[0] - rect[0];
            Y                       = Pos[1] - rect[1];
            Comment ("X= ",X,"\n","Y= ",Y); Sleep(100);
      }
      return(0);
}
string DecToHex (int n, int dig) {
      string s[], r="";
      string Sym[16] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
      ArrayResize (s,dig);
      for (int i=0; i<dig; i++) s[i]="0";
      i = dig-1;
      while (n != 0) {s[i] = Sym[n%16]; n = n>>4; i--; }
      for (i=0; i<dig; i++) r=r+s[i];
      return (r);
}
 

No lo entiendo... ¿Para qué? Estoy muy sorprendido. ¿Has mirado mi cabecera? No según el código.

Cualquier comando de un gráfico es una función, una línea de código.

 
Zhunko:

No lo entiendo... ¿Para qué? Estoy muy sorprendido. ¿Has mirado mi cabecera? No según el código.

Cualquier comando de un gráfico es una función, una línea de código.


De acuerdo, buscaré en otra parte la solución a esta cuestión.

Disculpe las molestias.

 
LEOK:


De acuerdo, buscaré en otra parte una solución a este asunto.

Siento las molestias...

Allí, en la cabecera, el código y el ejemplo. No hay necesidad de ofenderse. Lo que estás haciendo hace tiempo que se ha resuelto muchas veces en este foro en diferentes versiones. Sólo tienes que mirar el archivo de cabecera WinUser32.mqh, que tiene mi biblioteca. Todos los códigos de control están ahí. Ya he escrito sobre ello varias veces.
 
Zhunko:
Allí, en la cabecera, hay un código y un ejemplo.


Copie aquí lo que considere un ejemplo para esta pregunta.

Sólo encontré esto:

// 3.1.1 La función activa/desactiva el desplazamiento automático del gráfico especificado.
void ServiceAutoScroll(int hwndChart); // Descriptor del sistema de la ventana del gráfico, en la que el autodesplazamiento está desactivado.
//=====================================================================================================================================================================
// 3.1.2. La función activa/desactiva el desplazamiento del gráfico especificado. Si tiene éxito, el método devuelve TRUE, de lo contrario - FALSE.
bool ServiceShift(int hwndChart); // Descriptor de sistema de la ventana del gráfico, en la que se activa/desactiva el desplazamiento.

¡Pero no lo necesitas!

 
LEOK:

Copie aquí lo que considere un ejemplo sobre el tema...
¿Y buscarlo tú mismo?
 

Si esta función aquí, todavía necesito sus internos ...

// 3.2.1. La función devuelve el estado de autodesplazamiento del gráfico especificado. Si tiene éxito, la función devuelve TRUE, en caso contrario FALSE.
bool ServiceGetAutoScroll(int hwndChart); // Descriptor de sistema de la ventana del gráfico, del que se devuelve el estado de autodesplazamiento.

 
LEOK:


Copie aquí lo que considere un ejemplo sobre el tema...

Sólo encontré esto:

// 3.1.1. La función activa/desactiva el desplazamiento automático del gráfico especificado.
void ServiceAutoScroll(int hwndChart); // El descriptor del sistema de la ventana del gráfico, en la que se desactiva el autodesplazamiento.

// 3.1.2. La función activa/desactiva el desplazamiento del gráfico especificado. El método devuelve TRUE si tiene éxito, en caso contrario FALSE.
bool ServiceShift(int hwndChart); // Descriptor del sistema de la ventana del gráfico, en la que se activa/desactiva el desplazamiento.

¡Pero no lo necesitas!

No estaba hablando de la biblioteca. Pero si se trata de una biblioteca, hay una función:

 // 3.2.1. Функция возвращает состояние автопрокрутки на указанном графике. В случае успеха функция возвращает TRUE, иначе - FALSE.
 bool ServiceGetAutoScroll(int hwndChart); // Системный дескриптор окна графика, с которого возвращается состояние автопрокрутки.
He escrito más arriba sobre WinUser32.mqh. Los códigos de control están ahí.