【发布时间】:2020-09-14 21:04:28
【问题描述】:
您好,您能帮忙实现宏 MAKEINTRESOURCEW。当我查看头文件时,我发现:
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
我的程序需要此功能,我正在实现 IContextMenu 功能以查看资源管理器上下文菜单。在我测试过的所有项目中,我都可以使用函数 GetCommandString 获取命令字符串。但在一项中,我没有得到命令字符串。该项目是使用记事本++编辑。所以我在文档中发现,在结构 CMINVOKECOMMANDINFOEX 的 lpverb 中,使用带有宏 MAKEINTRESOURCE 的项目的 id。
但是现在我不知道如何调用这个项目的 id 的命令并替换这个宏。
这是我的java代码:
Memory numberVerb = new Memory(Native.POINTER_SIZE);
numberVerb.setLong(0, 109);
CMINVOKECOMMANDINFOEX cmInvokeCommandEx = new CMINVOKECOMMANDINFOEX();
cmInvokeCommandEx.cbSize = cmInvokeCommandEx.size();
cmInvokeCommandEx.fMask = 0x00004000;
cmInvokeCommandEx.hwnd = null;
cmInvokeCommandEx.lpVerbW = new WTypes.LPWSTR(numberVerb);
cmInvokeCommandEx.lpVerb = new WTypes.LPSTR(verb);
cmInvokeCommandEx.lpParameters = null;
cmInvokeCommandEx.lpParametersW = null;
cmInvokeCommandEx.lpDirectory = new WTypes.LPSTR(parentDir.getAbsolutePath());
cmInvokeCommandEx.lpDirectoryW = new WTypes.LPWSTR(parentDir.getAbsolutePath());
cmInvokeCommandEx.nShow = 5;
cmInvokeCommandEx.dwHotKey = 0;
cmInvokeCommandEx.hIcon = Pointer.NULL;
cmInvokeCommandEx.lpTitle = null;
cmInvokeCommandEx.lpTitleW = null;
cmInvokeCommandEx.ptInvoke = point;
cmInvokeCommandEx.write();
hResult = contextMenu2.InvokeCommand(cmInvokeCommandEx.getPointer());
【问题讨论】: