Ruby win32api call getMenuItemInfo


#1

Hi all,

I have successfully managed to implement the following apis

findWindow=Win32API.new(“user32.dll”, “FindWindow”, [‘P’,‘P’], ‘N’)
sendMessage=Win32API.new(“user32.dll”, “SendMessage”,[‘N’,‘N’,‘N’,‘P’],
‘N’)
getMenu=Win32API.new(“user32.dll”, “GetMenu”, [‘N’], ‘N’)
getMenuItemCount=Win32API.new(“user32.dll”, “GetMenuItemCount”,[‘N’],
‘N’)
getSubMenu=Win32API.new(“user32.dll”, “GetSubMenu”, [‘N’,‘N’], ‘N’)
deleteMenu=Win32API.new(“user32.dll”, “DeleteMenu”, [‘N’,‘N’,‘N’,],‘N’)
drawMenuBar=Win32API.new(“user32.dll”, “DrawMenuBar”, [‘N’], ‘N’)
setWindowLong=Win32API.new(“user32.dll”, “SetWindowLong”,[‘N’,‘N’,‘N’],
‘N’)

but am unable to get getMenuItemInfo to work, this is because it takes a
type structure and boolean as parameters and i can’t figure it out…

this is what i have

getMenuItemInfo =Win32API.new(“user32.dll”, “GetMenuItemInfo”,
[‘L’,‘L’,‘NEED’,‘NEED’], ‘L’)

the api is as follows…

BOOL GetMenuItemInfo(
HMENU hMenu,
UINT uItem,
BOOL fByPosition,
LPMENUITEMINFO lpmii
);

typedef struct tagMENUITEMINFO {
UINT cbSize;
UINT fMask;
UINT fType;
UINT fState;
UINT wID;
HMENU hSubMenu;
HBITMAP hbmpChecked;
HBITMAP hbmpUnchecked;
ULONG_PTR dwItemData;
LPTSTR dwTypeData;
UINT cch;
HBITMAP hbmpItem;
} MENUITEMINFO, *LPMENUITEMINFO;

any help greatly appreciated…

Thanks

Ted


#2

Ted Baker wrote:

Hi all,

I have successfully managed to implement the following apis

findWindow=Win32API.new(“user32.dll”, “FindWindow”, [‘P’,‘P’], ‘N’)
sendMessage=Win32API.new(“user32.dll”,
“SendMessage”,[‘N’,‘N’,‘N’,‘P’],
‘N’)
getMenu=Win32API.new(“user32.dll”, “GetMenu”, [‘N’], ‘N’)
getMenuItemCount=Win32API.new(“user32.dll”, “GetMenuItemCount”,[‘N’],
‘N’)
getSubMenu=Win32API.new(“user32.dll”, “GetSubMenu”, [‘N’,‘N’], ‘N’)
deleteMenu=Win32API.new(“user32.dll”, “DeleteMenu”,
[‘N’,‘N’,‘N’,],‘N’)
drawMenuBar=Win32API.new(“user32.dll”, “DrawMenuBar”, [‘N’], ‘N’)
setWindowLong=Win32API.new(“user32.dll”,
“SetWindowLong”,[‘N’,‘N’,‘N’],
‘N’)

but am unable to get getMenuItemInfo to work, this is because it
takes a
type structure and boolean as parameters and i can’t figure it out…

this is what i have

getMenuItemInfo =Win32API.new(“user32.dll”, “GetMenuItemInfo”,
[‘L’,‘L’,‘NEED’,‘NEED’], ‘L’)

the api is as follows…

BOOL GetMenuItemInfo(
HMENU hMenu,
UINT uItem,
BOOL fByPosition,
LPMENUITEMINFO lpmii
);

typedef struct tagMENUITEMINFO {
UINT cbSize;
UINT fMask;
UINT fType;
UINT fState;
UINT wID;
HMENU hSubMenu;
HBITMAP hbmpChecked;
HBITMAP hbmpUnchecked;
ULONG_PTR dwItemData;
LPTSTR dwTypeData;
UINT cch;
HBITMAP hbmpItem;
} MENUITEMINFO, *LPMENUITEMINFO;

any help greatly appreciated…

Thanks

Ted

Very late reply.

You should have been directed towards Ruby/DL in the
standard library.

This is now preferred to Win32API which is in the process
of being obsoleted.

http://www.jbrowse.com/text/rdl_en.html

daz