Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Можно ли на Delphi открыть папку, так как это делается в, (.bat) скрипте.

Ответить
Настройки темы
Delphi - Можно ли на Delphi открыть папку, так как это делается в, (.bat) скрипте.

Пользователь


Сообщения: 109
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: ufooo
Дата: 21-06-2015
Можно ли на Delphi открыть папку, так как это делается в, (.bat) скрипте.
Пример (Delphi) скрипта;
Код: Выделить весь код
Uses ShellApi;
ShellExecute(Handle, 'explore', 'C:\WINDOWS\System32', nil, nil, SW_RESTORE);

Отправлено: 17:02, 31-05-2015

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4461
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


ufooo, я думаю самое простое, это написать, да проверить взаимозаменяемость.
Я не силен в WinApi, но в слове 'explore' нет ошибки?
Код: Выделить весь код
ShellExecute(Handle, 'explore', 'C:\WINDOWS\System32', nil, nil, SW_RESTORE);

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 17:43, 31-05-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 109
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата lxa85:
но в слове 'explore' нет ошибки? »
Вообще-то вместо (Open) лучше ставить (Explore).

Отправлено: 18:09, 31-05-2015 | #3


Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Я пишу не на delphi, поэтому сделаете по аналогии, думаю смысл поймёте, сначала получите значение SystemRoot через GetEnvironmentVariable, затем склеите полученное значение с остальным путём и передадите в ShellExecute

Код: Выделить весь код
	char path[MAX_PATH], buf[MAX_PATH];
	
	GetEnvironmentVariable("SystemRoot", buf, MAX_PATH);
	sprintf_s(path, "%s\\System32\\Drivers\\etc", buf);
	ShellExecute(NULL, "open", path, NULL, NULL, SW_SHOWNORMAL);
Цитата ufooo:
Вообще-то вместо (Open) лучше ставить (Explore) »
Разница в этих параметрах в том, что не то чтобы "что-то лучше", а в том, что при указании open - откроется папка без списка дерева папок, а при указании explore - со списком дерева

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:23, 31-05-2015 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата lxa85:
но в слове 'explore' нет ошибки? »
«open», «explore», «print» — это канонические глаголы («Canonical Verbs»).
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:07, 31-05-2015 | #5


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Если не используете JCL библиотеку, то можно на ее примере, так

Код: Выделить весь код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShlObj, ShellAPI;

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ ---------------------------------------------------------------------------------------------
  Функция: IsDirectory
  Входные параметры: const FileName: string
  Результат: Boolean - является ли указанный файл каталогом
  ------------------------------------------------------------------------------------------- }
function IsDirectory(const FileName: string): Boolean;
var
  R: DWORD;
begin
  R := GetFileAttributes(PChar(FileName));
  Result := (R <> DWORD(-1)) and ((R and FILE_ATTRIBUTE_DIRECTORY) <> 0);
end;

{ ---------------------------------------------------------------------------------------------
  Функция: OpenFolder  требует ShlObj, ShellAPI
  Входные параметры: const Path: string; Parent: THandle; Explore: Boolean
  Результат: Boolean - открыть проводник с указанной папкой в качестве корневой
  ------------------------------------------------------------------------------------------- }
function OpenFolder(const Path: string; Parent: THandle;
  Explore: Boolean): Boolean;
var
  Sei: TShellExecuteInfo;
begin
  Result := False;
  if IsDirectory(Path) then
  begin
    FillChar(Sei, SizeOf(Sei), #0);
    with Sei do
    begin
      cbSize := SizeOf(Sei);
      Wnd := Parent;
      if Explore then
        lpVerb := 'explore'
      else
        lpVerb := 'open';
      lpFile := PChar(Path);
      nShow := SW_SHOWNORMAL;
    end;
    // директива контролирует типы значений указателя @, а также совместимость типов указателя
    {$TYPEDADDRESS ON}
    Result := ShellExecuteEx(@Sei);
    {$IFNDEF TYPEDADDRESS_ON}
    {$TYPEDADDRESS OFF}
    {$ENDIF ~TYPEDADDRESS_ON}
  end;
end;

{Использование}
procedure TForm1.btn1Click(Sender: TObject);
begin
 OpenFolder('c:\Windows', 0, True);

// или с обработкой
{ 
if OpenFolder('c:\Windows', 0, True) then
     // обработка условия
}  
 end;

end.

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 05-06-2015 в 04:08.


Отправлено: 18:38, 04-06-2015 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


opel431, тэг [code] забыли.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:14, 04-06-2015 | #7


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Цитата Iska:
opel431, тэг [code] забыли. »
С раскрывающимся текстом компактней но, ... исправил.

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 20:32, 04-06-2015 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата opel431:
С раскрывающимся текстом компактней »
Верно. Значит, потом обрамить тэг «code» тэгом «spoiler». Я тоже так часто делаю.

Отправлено: 22:55, 04-06-2015 | #9


Пользователь


Сообщения: 109
Благодарности: 2

Профиль | Отправить PM | Цитировать


...

Последний раз редактировалось ufooo, 10-03-2016 в 21:19.


Отправлено: 08:19, 20-06-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Можно ли на Delphi открыть папку, так как это делается в, (.bat) скрипте.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Можно ли корень системной библиотеки переопределить на папку? Sevilho Microsoft Windows 7 0 20-09-2013 15:00
Можно ли запустить Окно DOS приложения в скрипте? leprecon AutoIt 1 28-09-2009 23:05
[решено] Можно ли как-нибудь обрабатывать фатальные ошибки в скрипте? evg64 AutoIt 5 16-09-2009 22:58
Delphi - Открыть сетевую папку на другом компе с помощью Delphi 7 Srednas Программирование и базы данных 3 03-06-2008 15:41
SMS c интернет сайтов как это делается? big Мобильные ОС, смартфоны и планшеты 3 29-10-2003 13:45




 
Переход