getmenuiteminfo y getmenuitemid

al
20 de Mayo del 2004
Hola me gustaría que me ayudarais, hay alguna forma de conseguir con alguna de estas dos apis de guardar la posicion?, es que por los parametros que tienen da la sensación que igual con alguna de ellas podría resolverse mi problema

en?
20 de Mayo del 2004
pués no sé, pero creo que no.
lo que se me ocurre és que compruebes si cuando se cargan los menús en el ListBox que tienes, se cargan por orden, y en ese caso supongo que tendrías la posición.

O también, para no complicarlo todo, en lugar de guardarlo en una tabla como se te sugirió, podrías hacerlo directamente en una matriz, siempre y cuando hayas podido obtener la posición del menú.

Si te digo la verdad, creo que este proyecto que te han mandado és demasiado complejo, incluso para una ingeniería.

Pués eso, comprueba en que orden se te cargan los elementos del ListBox y comentanos algo.

al
20 de Mayo del 2004
Hola Enço!!
la verdad es que en la listbox si se guardan ordenadas las opciones con los nombres y a veces detras las combinaciones de teclas de algunas opciones(pero normalmente no de las principales como por ejemplo Archivo).De todas formas no creo que esto me pueda servir mucho porque yo creo que lo que hace es algo parecido a dibujar con la api que mete las opciones del menu en la listbox. Esta api la encontre en esta página francesa: http://docvb.free.fr/apidetail.php?idapi=11
lo que ocurre es que no se muy bien como funciona, ya he intentado probar cosas con ella para saber que significan los datos, que es cada cosa..
voy a ponerte de nuevo el codigo que utilizo para lo de la listbox:Dim i As Long
Dim j As Long
Dim hMenu As Long
Dim hwnd As Long
Dim subhwnd As Long
Dim ret2 As Long
Dim cont2 As Long
Dim cont As Long
Dim total As Long
total = 0
cont = 0
cont2 = 0
'prueba'

'Dim lngid As Long
Dim lgRet As Long
Dim stBuffer As String * 80
'la prueba hasta aqui'
'Form1.Label5.Caption = hMenu
'obtiene el handle de la ventana activa'
hwnd = GetForegroundWindow()
Form1.Label1.Caption = hwnd
'obtiene el contexto del dispositivo de la ventana activa'
ret2 = GetAsyncKeyState(p.vkCode)



'obtener el handle del menu

hMenu = GetMenu(hwnd)
Form1.Label8.Caption = hMenu
cont = GetMenuItemCount(hMenu)
Form1.Label4.Caption = cont
For i = 0 To cont - 1
'pruebas
lpItemInfo.cbSize = 44
lpItemInfo.dwTypeData = stBuffer & Chr$(0)

lpItemInfo.fType = MF_STRING

lpItemInfo.cch = 80
lpItemInfo.fState = MFS_DEFAULT
lpItemInfo.fMask = MIIM_ID Or MIIM_STATE Or MIIM_TYPE Or MIIM_SUBMENU
'Form1.Text3.Text = lpItemInfo.fMask
lgRet = GetMenuItemInfo(hMenu, i, True, lpItemInfo)

lpItemInfo.dwTypeData = Replace(lpItemInfo.dwTypeData, Chr$(0), vbNullString)

Form1.lst1.AddItem lpItemInfo.dwTypeData

'hasta aqui


subhwnd = GetSubMenu(hMenu, i)
'lngid = GetMenuItemID(hMenu, i)
cont2 = GetMenuItemCount(hMenu)
total = total + cont2

'mas pruebas'

For j = 0 To cont2 - 1
' Mise à niveau de la structure
lpItemInfo.cbSize = 44
lpItemInfo.dwTypeData = stBuffer & Chr$(0)
lpItemInfo.fType = MF_STRING
lpItemInfo.cch = 80
lpItemInfo.fState = MFS_DEFAULT
lpItemInfo.fMask = MIIM_ID Or MIIM_STATE Or MIIM_TYPE Or MIIM_SUBMENU
' Récupère le contenu du sous-menu
lgRet = GetMenuItemInfo(subhwnd, j, True, lpItemInfo)
lpItemInfo.dwTypeData = Replace(lpItemInfo.dwTypeData, _
Chr$(0), vbNullString)
' Affiche le menu dans le contrôle ListBox
Form1.lst1.AddItem Space$(8) & lpItemInfo.dwTypeData
Next j
'aqui acaba prueba'
Next i

Form1.Label7.Caption = total
End Function

Esto era solo para rememorar buenos momentos(es broma), he seguido preguntando en el grupo de microsoft que me dijiste pero la verdad la cosa esta dificil, hoy me ha contestado un usuario y le he enviado un email porque no se que hacer en el enlace que me ha dado. Bueno me despido porque te he metido mas chapa que de costumbre,gracias y espero tu respuesta.