elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  GUI y eventos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: GUI y eventos  (Leído 4,928 veces)
fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
GUI y eventos
« en: 16 Marzo 2013, 15:32 pm »

Hola, estoy creando una ventana con un litview y quiero detectar cuando se pulsa un boton sobre uno de los item del listview y sabe rque item es, tengo la ventana así:



Pero no consigo saber como hacer eso...

un saludo!


En línea

Un byte a la izquierda.
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: GUI y eventos
« Respuesta #1 en: 16 Marzo 2013, 15:44 pm »

Proba con:
LVN_ITEMACTIVATE notification code (Windows)

Remarks
To obtain the items being activated, the receiving application should use the LVM_GETSELECTEDCOUNT message to retrieve the number of items that are selected and then send the LVM_GETNEXTITEM message with LVNI_SELECTED until all of the items have been retrieved.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: GUI y eventos
« Respuesta #2 en: 16 Marzo 2013, 19:04 pm »

Creo que tengo mal la constante LVN_ITEMACTIVATE porque no me funciona... No he encontrado su valor en la msdn y la he tenido que obtener así:

Código
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <commctrl.h>
  4.  
  5. #define LVN_ITEMACTIVATE (LVN_FIRST-14)
  6.  
  7. int main()
  8. {
  9.    printf("0x%x",LVN_ITEMACTIVATE);
  10.    return 0;
  11. }
  12.  

Y la uso así:

Código
  1. miWM_NOTIFY:
  2.           mov eax,[lparam]
  3.           add eax,0x8
  4.           mov eax,[eax]  ; EAX = lparam->code
  5.  
  6.  
  7.           .if eax = 0xFFFFFF8E ; LVN_ITEMACTIVATE
  8.               invoke MessageBoxA,0,0,0,0   ; comprobamos que funciona.
  9.           .endif
  10.  
  11.           jmp salirWPROC

saludos!
« Última modificación: 16 Marzo 2013, 21:05 pm por mDrinky » En línea

Un byte a la izquierda.
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: GUI y eventos
« Respuesta #3 en: 16 Marzo 2013, 20:54 pm »

Item,Subitem:

WM_NOTIFY->NM_RCLICK
En línea

fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: GUI y eventos
« Respuesta #4 en: 16 Marzo 2013, 21:06 pm »

Item,Subitem:

WM_NOTIFY->NM_RCLICK

Código
  1. miWM_NOTIFY:
  2.           mov eax,[lparam]
  3.           add eax,0x8
  4.           mov eax,[eax]  ; EAX = lparam->code
  5.  
  6.  
  7.           .if eax = 0xFFFFFFFB ; NM_RCLICK
  8.               invoke MessageBoxA,0,0,0,0   ; comprobamos que funciona.
  9.           .endif
  10.  
  11.           jmp salirWPROC

Ahí me lo detecta bien el clic derecho pero no se me seleciona el item :S

En línea

Un byte a la izquierda.
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: GUI y eventos
« Respuesta #5 en: 16 Marzo 2013, 21:17 pm »

Código
  1. miWM_NOTIFY:
  2.           mov eax,[lparam]
  3.           add eax,0x8
  4.           mov eax,[eax]  ; EAX = lparam->code
  5.  
  6.  
  7.           .if eax = 0xFFFFFFFB ; NM_RCLICK
  8.               invoke MessageBoxA,0,0,0,0   ; comprobamos que funciona.
  9.           .endif
  10.  
  11.           jmp salirWPROC

Ahí me lo detecta bien el clic derecho pero no se me seleciona el item :S



Y si llamas a Beep en lugar de Messagebox debido a que Windows da el foco inmediatamente al box de mensaje?  :silbar:
En línea

fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: GUI y eventos
« Respuesta #6 en: 16 Marzo 2013, 23:33 pm »

Tampoco le da el foco con Beep@Kernel32.dll  :-\
En línea

Un byte a la izquierda.
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: GUI y eventos
« Respuesta #7 en: 17 Marzo 2013, 00:37 am »

Tampoco le da el foco con Beep@Kernel32.dll  :-\

En realidad me referia que usando MessageBox window le da el foco al cuadro de texto no que Beep le daria el foco, Beep se usaria solo para saber que el EIP pasa por ahi. un winproc en C no tengo ningun problema, o talvez puedes explicar mejor lo que buscas o talvez lo encuentres en el winproc, nitemact tiene toda la information que estas pidiendo:

Código:
// test only
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
   static   char           szColumnHeader[][12] = {" col1", "col2", "col3"};
   static   Item           ListItem[3];
   static   HWND           hWndListView;
   static   LV_ITEM        lv;
   int                     index;
   int                     iiWidth[3];
   LV_COLUMN               lvC;
   RECT                    rect;

   LV_DISPINFO             *Lvinfo;
   NMITEMACTIVATE          *nitemact;

   switch (iMsg)
   {
   case WM_CREATE :
      hWndListView = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW,"", WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_SHOWSELALWAYS,0, 0, 0, 0, hwnd,(HMENU)ID_LISTVIEW, NULL, NULL);
      ListView_SetExtendedListViewStyle(hWndListView, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

      iiWidth[0] = 100;
      iiWidth[1] = 100;
      iiWidth[2] = 100;

      lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
      lvC.fmt = LVCFMT_LEFT;

      for(index = 0; index < 3; index++)
      {
         lvC.iSubItem = index;
         lvC.cx = iiWidth[index];
         lvC.pszText = szColumnHeader[index];
         ListView_InsertColumn(hWndListView,index,&lvC);
      }

      strcpy(ListItem[0].szItemNr, "item1");
      strcpy(ListItem[0].szItem, "subitem1");
      strcpy(ListItem[0].szItemDescription, "subitem1");

      strcpy(ListItem[1].szItemNr, "item2");
      strcpy(ListItem[1].szItem, "subitem2");
      strcpy(ListItem[1].szItemDescription, "subitem2");

      AdjustListView(hWndListView, &lv, index);
      break;

   case WM_SIZE :
      GetClientRect(hwnd, &rect);
      MoveWindow(hWndListView, 3, 3, rect.right - 6, rect.bottom - 6, 1);
      break;

   case WM_NOTIFY :
      switch(((LPNMnitemact)lParam)->code)
      {
      case NM_RCLICK :
          
         nitemact = (NMITEMACTIVATE *)lParam;
         break;
      case LVN_GETDISPINFO :
         Lvinfo = (LV_DISPINFO FAR*)lParam;
         if((((LPNMnitemact)lParam)->hwndFrom == hWndListView))
         {
            switch(Lvinfo->item.iSubItem)
            {
            case 0:
               Lvinfo->item.pszText =  ListItem[Lvinfo->item.iItem].szItemNr;
               break;
            case 1:
               Lvinfo->item.pszText = ListItem[Lvinfo->item.iItem].szItem;
               break;
            case 2:
               Lvinfo->item.pszText = ListItem[Lvinfo->item.iItem].szItemDescription;
               break;
            }
            break;
         }
      }
      
      break;
      
   case WM_CLOSE :
      DestroyWindow(hwnd);
      break;

   case WM_DESTROY :
      PostQuitMessage(0);
      break;
   }
   return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
« Última modificación: 17 Marzo 2013, 01:11 am por x64Core » En línea

fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: GUI y eventos
« Respuesta #8 en: 24 Marzo 2013, 15:38 pm »

@x64Core ya se que Beep no le da el foco  :rolleyes:. Lo que busco es saber cuando se ha clicado en el ListView y que item se a seleccionado.

un saludo.
En línea

Un byte a la izquierda.
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: GUI y eventos
« Respuesta #9 en: 26 Marzo 2013, 16:01 pm »

@x64Core ya se que Beep no le da el foco  :rolleyes:. Lo que busco es saber cuando se ha clicado en el ListView y que item se a seleccionado.

un saludo.

Lee el codigo de arriba
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Capturar eventos en Vb
Ingeniería Inversa
shoulck 3 2,736 Último mensaje 11 Julio 2006, 20:13 pm
por frankener1986
eventos
Programación Visual Basic
abel_xtnt 8 3,527 Último mensaje 14 Octubre 2005, 21:12 pm
por abel_xtnt
Eventos Ratón C#
.NET (C#, VB.NET, ASP)
kargarof 7 12,397 Último mensaje 4 Julio 2008, 11:22 am
por kargarof
Eventos en C++
Programación C/C++
HaX991 6 7,648 Último mensaje 2 Agosto 2010, 10:51 am
por HaX991
Eventos « 1 2 »
.NET (C#, VB.NET, ASP)
TheGhost(Z) 11 6,002 Último mensaje 19 Enero 2011, 12:59 pm
por [D4N93R]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines