Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Этот скрипт откроет и выделит файл/папку в папке "Desktop",В уже открытой папке или ещё нет?
Код:explorer /select,"путь"
нету такого понятия.на рабочем поле монитора.
IWebBrowserApp *m_pSite;
if (SUCCEEDED(pdisp->QueryInterface(IID_IWebBrowserApp, (void**)&m_pSite)))
{
IServiceProvider * pServiceProvider;
if (SUCCEEDED(m_pSite->QueryInterface(IID_IServiceProvider, (LPVOID*)&pServiceProvider)))
{
IShellBrowser * pShellBrowser;
if (SUCCEEDED(pServiceProvider->QueryService(SID_SShellBrowser, IID_IShellBrowser, (LPVOID*)&pShellBrowser)))
{
// получаем интерфейс активного окна explorer
IShellView * pShellView;
if (SUCCEEDED(pShellBrowser->QueryActiveShellView(&pShellView)))
{
IFolderView * pFolderView;
if (SUCCEEDED(pShellView->QueryInterface(IID_IFolderView, (LPVOID*)&pFolderView)))
{
int nCount = 0;
if (SUCCEEDED(pFolderView->ItemCount(SVGIO_ALLVIEW, &nCount)))
{
// select each entry
for (int i = 0; i < nCount; i++)
{
LPITEMIDLIST pidl;
pFolderView->Item(i, &pidl);
// здесь можно получить имя объекта, например через IShellFolder::GetDisplayNameOf
// выделить объект
pFolderView->SelectItem(i, SVSI_SELECT);
}
}
}
pShellView->Release();
}
pShellBrowser->Release();
}
pServiceProvider->Release();
}
m_pSite->Release();
}
pFolderView->SelectItem(i, SVSI_DESELECTOTHERS);
pFolderView->SelectItem(i, SVSI_FOCUSED);
pFolderView->SelectItem(i, SVSI_SELECT);
Dim k As Long
Dim nCount As Long
Dim shItem As IShellItem2
'получаем кол-во элементов
Call spfv.ItemCount(SVGIO_ALLVIEW, nCount)
For k = 0 To nCount - 1
spfv.GetItem k, IID_IShellItem, shItem
'получаем полный путь к файлу
shItem.GetDisplayName SIGDN_DESKTOPABSOLUTEPARSING, lpPath
sPath = LPWSTRtoStr(lpPath)
Debug.Print sPath
If sPath = "xxxxx" Then ' проверяем что нашли нужный нам путь
'выделяем его, сняв выделение с остальных
Call spfv.SelectItem(k, SVSI_DESELECTOTHERS)
Call spfv.SelectItem(k, SVSI_FOCUSED)
Call spfv.SelectItem(k, SVSI_SELECT)
Exit For
End If
Next
На рабочем столе выделена иконка 1.txt.нету такого понятия.
Вы имеете в виду уже открытую папку?
Вы всё поняли абсолютно правильно.Он имеет ввиду иконки на рабочем столе, там где стоит фоновая картинка, когда все окна свернутые.
Иконка проорамно выделится, если по ней сделать клик (нужно знать ее координаты), или сделать клик по первой иконке (Мой компьютер) и кдавишей Таб дойти до нужной (нужно знать ее номер).
Хотя... если сделать переименование иконки (ярлыка), то она получает фокус
(не утверждаю, а предполагаю, так как проверить не могу - у меня нет иконок на раб.столе - просто синий єкран).
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <shlobj.h>
#include <exdisp.h>
#include <shlwapi.h>
#include <atlbase.h>
#include <atlalloc.h>
#include <stdio.h>
void FindDesktopFolderView(REFIID riid, void** ppv)
{
CComPtr<IShellWindows> spShellWindows;
spShellWindows.CoCreateInstance(CLSID_ShellWindows);
CComVariant vtLoc(CSIDL_DESKTOP);
CComVariant vtEmpty;
long lhwnd;
CComPtr<IDispatch> spdisp;
spShellWindows->FindWindowSW(
&vtLoc, &vtEmpty,
SWC_DESKTOP, &lhwnd, SWFO_NEEDDISPATCH, &spdisp);
CComPtr<IShellBrowser> spBrowser;
CComQIPtr<IServiceProvider>(spdisp)->
QueryService(SID_STopLevelBrowser,
IID_PPV_ARGS(&spBrowser));
CComPtr<IShellView> spView;
spBrowser->QueryActiveShellView(&spView);
spView->QueryInterface(riid, ppv);
}
int __cdecl wmain(int argc, wchar_t** argv)
{
LPVOID lpRes = NULL;
CoInitialize(lpRes);
CComPtr<IFolderView> spView;
FindDesktopFolderView(IID_PPV_ARGS(&spView));
CComPtr<IShellFolder> spFolder;
spView->GetFolder(IID_PPV_ARGS(&spFolder));
int nCount = 0;
spView->ItemCount(SVGIO_ALLVIEW, &nCount);
for (int i = 0; i < nCount; i++)
{
CComHeapPtr<ITEMID_CHILD> spidl;
spView->Item(i, &spidl);
STRRET str;
spFolder->GetDisplayNameOf(spidl, SHGDN_NORMAL, &str);
CComHeapPtr<wchar_t> spszName;
StrRetToStr(&str, spidl, &spszName);
wprintf(L"Name: %ls\n", static_cast<LPWSTR>(spszName));
if (_wcsicmp(spszName, L"Reverse") == 0) // название файла на рабочем столе
{
spView->SelectItem(i, SVSI_DESELECTOTHERS | SVSI_FOCUSED | SVSI_SELECT);
}
}
return 0;
}
Попробывал Вашу вторую догатку с переименованием иконки, и вроде всё получилось.Он имеет ввиду иконки на рабочем столе, там где стоит фоновая картинка, когда все окна свернутые.
Иконка проорамно выделится, если по ней сделать клик (нужно знать ее координаты), или сделать клик по первой иконке (Мой компьютер) и кдавишей Таб дойти до нужной (нужно знать ее номер).
Хотя... если сделать переименование иконки (ярлыка), то она получает фокус
(не утверждаю, а предполагаю, так как проверить не могу - у меня нет иконок на раб.столе - просто синий єкран).
@echo off >nul
Chcp 1251 >nul
set /p i= ВВЕДИ ИМЯ файла/папки -
for %%a in ("%i%") do set x=%%~xa
cmdow @ /min
ren "%i%" ъ%x%
nircmd wait 500
nircmd win activate class progman
nircmd wait 500
nircmd sendkeypress ctrl+1 shift+221
nircmd wait 500
ren ъ%x% "%i%"
exit
Где это можно скомпилировать on-line?@fils,
C++:#define UNICODE #define _UNICODE #include <windows.h> #include <shlobj.h> #include <exdisp.h> #include <shlwapi.h> #include <atlbase.h> #include <atlalloc.h> #include <stdio.h> void FindDesktopFolderView(REFIID riid, void** ppv) { CComPtr<IShellWindows> spShellWindows; spShellWindows.CoCreateInstance(CLSID_ShellWindows); CComVariant vtLoc(CSIDL_DESKTOP); CComVariant vtEmpty; long lhwnd; CComPtr<IDispatch> spdisp; spShellWindows->FindWindowSW( &vtLoc, &vtEmpty, SWC_DESKTOP, &lhwnd, SWFO_NEEDDISPATCH, &spdisp); CComPtr<IShellBrowser> spBrowser; CComQIPtr<IServiceProvider>(spdisp)-> QueryService(SID_STopLevelBrowser, IID_PPV_ARGS(&spBrowser)); CComPtr<IShellView> spView; spBrowser->QueryActiveShellView(&spView); spView->QueryInterface(riid, ppv); } int __cdecl wmain(int argc, wchar_t** argv) { LPVOID lpRes = NULL; CoInitialize(lpRes); CComPtr<IFolderView> spView; FindDesktopFolderView(IID_PPV_ARGS(&spView)); CComPtr<IShellFolder> spFolder; spView->GetFolder(IID_PPV_ARGS(&spFolder)); int nCount = 0; spView->ItemCount(SVGIO_ALLVIEW, &nCount); for (int i = 0; i < nCount; i++) { CComHeapPtr<ITEMID_CHILD> spidl; spView->Item(i, &spidl); STRRET str; spFolder->GetDisplayNameOf(spidl, SHGDN_NORMAL, &str); CComHeapPtr<wchar_t> spszName; StrRetToStr(&str, spidl, &spszName); wprintf(L"Name: %ls\n", static_cast<LPWSTR>(spszName)); if (_wcsicmp(spszName, L"Reverse") == 0) // название файла на рабочем столе { spView->SelectItem(i, SVSI_DESELECTOTHERS | SVSI_FOCUSED | SVSI_SELECT); } } return 0; }
Часть кода взята из статей Raymond Chen:
Manipulating the positions of desktop icons - The Old New Thing
Just putting together the pieces you already have.devblogs.microsoft.comPrinting the name and position of the focused item on the desktop - The Old New Thing
You already know how to get the view, so ask the view.devblogs.microsoft.com
не в курсе, но могу скомпилировать вам, сделав название файла как первый аргумент запуска программыГде это можно скомпилировать on-line?
не понимаю вопросаИли ещё что-нибудь посоветуете для разового применения.
Как вариант Ubuntu или Mint Linux ,а потом компиляция (или другие варианты можно найти в инете)Где это можно скомпилировать on-line?
И в чём прикол?В Win10 есть Linux
Там учтите, что иконки - иногда ярлыки (папок) с расширением lnk или даже urlПопробывал Вашу вторую догатку с переименованием иконки, и вроде всё получилось.
Т.е батник работает как поисковая система. Вводишь имя с расширением файла или имя папки
и он на рабочем столе выделяет её иконку.
Спасибо за помощь.
А если Cygwin ? На форумах пишут ,что ставят пакеты и компилируют через него.такой же компилятор, как и на Линукс (mingw),