Показать полную графическую версию : Копирование пути к файлу с помощью горячих клавиш
garynich
30-03-2012, 10:10
Всем доброго времени суток.
Собственно САБЖ: как копировать путь к файлу с помощью горячих клавиш и можно ли их заменить на свои? Про shift+пкм я знаю, но данный вариант мне абсолютно не подходит - слишком много мароки будет в будущем.
Заранее спасибо за ответ...
Morpheus
30-03-2012, 10:33
garynich, можно без Shift сделать - http://forum.oszone.net/post-1555548.html#post1555548
garynich
30-03-2012, 11:10
Morpheus, спасибо, я этот вариант уже рассматривал, но для меня он не подходит. Данный путь будет использован в другой программе, поэтому мне легче эмулировать нажатие, чем долбаться с нажатием кнопок мыши.
Dzirt2005
30-03-2012, 11:34
garynich, по Ctrl+C в буфер обмена копируется полное имя файла (если выделено несколько, то каждое имя с новой строки). Единственное замеченное отличие от Shift+ПКМ - имена файлов не обрамлены кавычками
Morpheus
30-03-2012, 11:45
garynich, сомневаюсь, что хотелка реализуема.
Dzirt2005, по Ctrl+C копируется сам файл, а не его имя.
Dzirt2005
30-03-2012, 11:56
Morpheus, по Ctrl+C _файл_ не копируется - это легко проверить нажав Ctrl+C на каком-нибудь файле размером гигов в 50 :) Вы же не думаете, что все 50 гигов мгновенно скопировались в ОЗУ и при этом занимаемая память не увеличилась? Или например "скопировать" pagefile.sys или любой другой к которому нет доступа - он ведь не мог скопироваться? Тогда откуда в буфере обмена его имя?
Копируются управляющие структуры для того, чтобы можно было в дальнейшем скопировать файл, а имена файлов просто присутствуют как текст. Реальное копирование произойдет при нажатии Ctrl+V.
Можно просто скачать какой-нибудь просмотрщик буфера обмена(например, Free Clipboard Viewer (http://freeclipboardviewer.com/FreeClipViewer.exe)) и посмотреть что будет в буфере обмена при копировании в него разнообразных данных.
Morpheus
30-03-2012, 12:00
Dzirt2005, нажмите на файле Ctrl+C и попробуйте вставить в командую строку, например. Работает?
Dzirt2005
30-03-2012, 12:06
Morpheus, не в командную строку, а в любой текстовый редактор. Да, естественно работает. С чего бы ему не работать? Хотя конечно я проверял в Far'е (и в командной строке и в его текстовом редакторе), может в этом дело. Но имя файла в буфере обмена есть (см. приложенный скриншот).
PS: Хотя возможно дело в том, что по Ctrl+C в буфере обмена не записываются данные с типом CF_TEXT (или CF_UNICODETEXT) в дополнение к другим данным. Это уже минус Майкрософту, могли бы и сделать... Вечно им лень. Наверное, все программисты в Майкрософте работают исключительно мышкой :)
Morpheus
30-03-2012, 12:10
в любой текстовый редактор. »
Блокнот есть? :)
Но имя файла в буфере обмена есть (см. приложенный скриншот). »
Ага, осталось научиться работать с этой бесценной информацией.
Dzirt2005
30-03-2012, 12:56
Morpheus,
Блокнот есть? »
Есть, в него не вставляет, потому что:
PS: Хотя возможно дело в том, что по Ctrl+C в буфере обмена не записываются данные с типом CF_TEXT (или CF_UNICODETEXT) в дополнение к другим данным. Это уже минус Майкрософту, могли бы и сделать... Вечно им лень. Наверное, все программисты в Майкрософте работают исключительно мышкой »
В текстовый редактор Far'а замечательно вставляет. Видимо, разработчики Far'а не настолько ленивы, как программисты MS, за что им честь и хвала!
Ага, осталось научиться работать с этой бесценной информацией. »
Данный путь будет использован в другой программе »
Какие проблемы программно достать путь из буфера обмена?
Morpheus
30-03-2012, 13:08
Это уже минус Майкрософту, могли бы и сделать... Вечно им лень. »
Точно! А ещё блокнот должен показывать фильмы в HD качестве :)
Какие проблемы программно достать путь из буфера обмена? »
Спросим у автора темы, может ли он научить программу вычленять из кучи хлама нужное?
garynich
30-03-2012, 13:29
Какие проблемы программно достать путь из буфера обмена? »
Никто и не говорил, что проблемы здесь...
С Ctrl+C у меня тоже ничего не получается. Использую NotePad++, в него название не вставляется.
garynich, сомневаюсь, что хотелка реализуема. »
Я программист, поэтому у нас все реализуется, просто отличается количество затраченных ресурсов.
Dzirt2005
30-03-2012, 15:00
С Ctrl+C у меня тоже ничего не получается. Использую NotePad++, в него название не вставляется. »
Я же уже написал, что не вставится и написал почему не вставится. Программистам Майкрософта было лень наряду с другими данными вставить в буфер обмена данные с форматом CF_UNICODETEXT. Но программно не составит труда проверить и если есть, то получить данные из формата CF_HDROP. Примерно таким способом (неужели я отвечаю программисту?):
HANDLE Clipboard::GetData(UINT uFormat)
{
if (UseInternalClipboard)
{
if (InternalClipboardOpen)
{
for (size_t I=0; I < ARRAYSIZE(hInternalClipboard); ++I)
{
if (uInternalClipboardFormat[I] != 0xFFFF && uInternalClipboardFormat[I] == uFormat)
{
return hInternalClipboard[I];
}
}
}
return (HANDLE)nullptr;
}
return GetClipboardData(uFormat);
}
...
hClipData=GetData(CF_HDROP);
if (hClipData)
{
LPDROPFILES Files=reinterpret_cast<LPDROPFILES>(GlobalLock(hClipData));
if (Files)
{
LPCSTR StartA=reinterpret_cast<LPCSTR>(Files)+Files->pFiles;
LPCWSTR Start=reinterpret_cast<LPCWSTR>(StartA);
string strClipText;
if(Files->fWide)
{
while(*Start)
{
size_t l1=strClipText.GetLength();
strClipText+=Start;
Start+=strClipText.GetLength()-l1;
Start++;
if(*Start)
{
strClipText+=L"\r\n";
}
}
}
else
{
while(*StartA)
{
size_t l1=strClipText.GetLength();
strClipText+=StartA;
StartA+=strClipText.GetLength()-l1;
StartA++;
if(*StartA)
{
strClipText+=L"\r\n";
}
}
}
if(!strClipText.IsEmpty())
{
ClipText=reinterpret_cast<LPWSTR>(xf_malloc((strClipText.GetLength()+1)*sizeof(WCHAR)));
wcscpy(ClipText, strClipText);
}
GlobalUnlock(hClipData);
}
}
...
Спросим у автора темы, может ли он научить программу вычленять из кучи хлама нужное? »
Ээээ... А я думал, что программистам из MS было просто лень, а оказывается они мастера накидать кучу хлама! Среди которого трудно найти что-то нужное, да? :yes:
Может завяжем уже с упражнениями в остроумии? Блокнот не должен воспроизводить фильмы в HD качестве, к Блокноту вообще никаких претензий. Претензии к тому программисту, который делал копирование данных в буфер обмена при нажатии Ctrl+C из Explorer'а. Могли бы еще добавить и простой текстовый список файлов, было бы удобнее. Но не подумали/поленились/решили что оно никому не надо...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC