Показать полную графическую версию : [решено] Открытие папки с помощью кнопки
NickDang
07-01-2012, 19:38
Как открыть папку с помощью кнопки buton1 например. Папка находиться C:\Documents and Settings\Admin\Рабочий стол\Новая папка.
что значит "открыть папку"
ээххххх (http://www.autopark.ru/ASBProgrammerGuide/WSHEXEC.HTM)
NickDang
07-01-2012, 21:27
Тоесть при нажатии кнопки выскакивало окно windows explorer а с направлением C:\Documents and Settings\Admin\Рабочий стол\Новая папка
А чем функция SelectDirectory не устраивает?
SelectDirectory эт диалоговое окно если верить описанию. Шел же "по нажатию на кнопку откроет в эксплорере папку которую ему задаст программист т.е. его C:\Documents and Settings\Admin\Рабочий стол\Новая папка"
NickDang
08-01-2012, 11:45
Beyound, Можете написать, как правильно вводить где и что?
NickDang, так :
procedure TForm1.btn1Click(Sender: TObject);
begin
ShellExecute(Self.Handle,'explore','C:\Documents and Settings\Admin\Рабочий стол\Новая папка',nil,nil,SW_SHOWNORMAL);
end;
в uses добавить
ShellApi
А если у меня система не на С:, учётка не Admin, система не локазирована на русский и Vista или Windows7 ?
Жёсткая привязка в данном случае - не правильный подход.
Любезный
08-01-2012, 16:52
ИМХО, каков вопрос - таков ответ.
А то, что задано постом выше - это уже второй вопрос. Хотя сказано правильно.
NickDang
08-01-2012, 17:27
LilLoco, Спасибо! то что надо)
---
Любезный, извини, в delphi я новичок )
Но это не правильно в любом случае, уж лучше тогда определять программно учётку пользователя и\или рабочий стол. Для скриптов AVZ писали определение рабочего стола через реестр, код нашёл в инете, принцип такой же. При запуске читаем ветку реестра
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Foldersключ Desktop. Получаете истинное значение ключа, сохраняете его в переменную и используете как угодно
...
...
uses Registry;
...
function GetDesktopDir:String;
var reg:TRegistry;
begin
Result:='';
reg:=TRegistry.Create(KEY_READ);
try
reg.RootKey:=HKEY_CURRENT_USER;
if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False) then
Result:=reg.ReadString('Desktop');
reg.CloseKey;
finally
reg.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(GetDesktopDir);
end;
...
Ещё нашёл такой, но с делфи знаком поверхностно, так что если что - не обессудьте. :)
uses
SHFolder;
var
path: array [0 .. MAX_PATH] of char;
begin
SUCCEEDED(SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, 0, @path[0]));
end;
P.S. Проверяйте перед открытием наличие папки "Новая папка", иначе если её не будет...
Любезный
08-01-2012, 23:59
При запуске читаем ветку реестра »
Ээээ! Так делать не надо.
http://www.transl-gunsmoker.ru/2008/12/shell-folders.html
Любезный, Да-да-да, вспомнил, читал когда-то, спасибо за напоминание. :yes: В любом случае узнавать местоположение учётки, программно проще и надёжнее чем жёстко прописывать путь без проверки даже существования папки.
Drongo, эм. вот так как ты советуешь делать точно ненадо. надо решать поставленную задачу а не придумывать себе работу. я согласен с тобой что "а если не локализована, а если все перемещено и т.д." но такой задачи нет. а то так можно начать - а если все в досе, а если надо рисовать свое окно а не експлорера, а если винда 95 и все вообще плохо.
Beyound, надо сразу учиться делать правильно, чтобы не было потом мучительно больно.
надо решать поставленную задачу а не придумывать себе работу »Из-за таких криворуких программистов, потом у юзеров головная боль и плевки в монитор с упоминанием разработчика приложения. :biggrin:
P.S. Я своё мнение высказал, дальше как хотите, лень-матушка или ограниченность ума позволяет делать так как хочеЦЦа.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.