gpt4 book ai didi

c++ - 在窗口或桌面窗口中单击文件

转载 作者:行者123 更新时间:2023-11-28 05:18:55 25 4
gpt4 key购买 nike

我是 shell 编程的新手,在获取有关在窗口(桌面或其他)中单击哪个项目的文件路径(或实际上,任何信息)时遇到问题。我正在遵循 Can i use Global System Hooks to capture which file was clicked on? 的答案列出的一般路径。但我没有任何运气。

点击在这里是一个较小的问题,所以我只是用随机值(我知道桌面在哪里以及文件应该位于何处)代替鼠标位置。 (无论如何,即使我在鼠标的当前位置上尝试它也不起作用)。

LVHITTESTINFO hitTest = { 0 };
hitTest.pt.x = 55;
hitTest.pt.y = 230;
hitTest.flags = LVHT_ONITEM;
currWindow = WindowFromPoint(pt);
int index = ListView_HitTest(currWindow, &hitTest);
//cout << index + " index";
//cout << hitTest.iItem + " iltem ";
if (index != -1) {
//char* itemText = new char[256];
std::vector<wchar_t> itemText(1024);
ListView_GetItemText(window, index, 0, &itemText[0], 256);
PIDLIST_ABSOLUTE filepidl;
SFGAOF out;
std::wstring strtext = std::wstring(itemText.begin(), itemText.end());
//cout << " ";
//cout << *(strtext.c_str()) + " ";
HRESULT parse = SHParseDisplayName(strtext.c_str(), NULL, &filepidl, SFGAO_CANDELETE, &out);
if (filepidl != NULL) {
LPTSTR filePath = new TCHAR[MAX_PATH];
BOOL getPath = SHGetPathFromIDList(filepidl, filePath);
cout << *filePath ;
}
}

这是我的代码的一部分。我认为我获取文件索引的方式有问题,因为它一直返回 0,但我已经为此进行了数天的黑客攻击并且被卡住了。 MSDN 文档充其量让我感到困惑。

任何帮助或见解将不胜感激!我在网上找不到任何示例代码。谢谢!

最佳答案

像这样直接使用 ListView 不是一个好主意,因为 Explorer 可以自由实现 shell view以任何它想要的方式,在 Windows 7 和更高版本中,资源管理器窗口不再使用 ListView ,它默认使用自定义控件!

如果您只关心显示名称和调用默认操作,您可以使用 UI Automation ,它也应该适用于其他类型的窗口/控件,而不仅仅是 shell 文件列表。

如果您需要知道完整路径和其他详细信息,您可以使用 IShellWindows interface .可以在 Raymond Chens 的博客上找到示例 herehere ...

关于c++ - 在窗口或桌面窗口中单击文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41944005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com