Войти

Показать полную графическую версию : Можно ли на Delphi открыть папку, так как это делается в, (.bat) скрипте.


ufooo
31-05-2015, 17:02
Можно ли на Delphi открыть папку, так как это делается в, (.bat) скрипте.
Пример (Delphi) скрипта;
Uses ShellApi;
ShellExecute(Handle, 'explore', 'C:\WINDOWS\System32', nil, nil, SW_RESTORE);

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

ufooo
31-05-2015, 18:09
но в слове 'explore' нет ошибки? »
Вообще-то вместо (Open) лучше ставить (Explore).

K.A.V.
31-05-2015, 19:23
Я пишу не на 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);


Вообще-то вместо (Open) лучше ставить (Explore) »
Разница в этих параметрах в том, что не то чтобы "что-то лучше", а в том, что при указании open - откроется папка без списка дерева папок, а при указании explore - со списком дерева

Iska
31-05-2015, 20:07
но в слове 'explore' нет ошибки? »
«open», «explore», «print» — это канонические глаголы («Canonical Verbs (https://msdn.microsoft.com/en-us/library/windows/desktop/cc144101%28v=vs.85%29.aspx#canonical)»).

opel431
04-06-2015, 18:38
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.

Iska
04-06-2015, 19:14
opel431, тэг [code] (http://forum.oszone.net/misc.php?do=bbcode#code) забыли.

opel431
04-06-2015, 20:32
opel431, тэг [code] забыли. »
С раскрывающимся текстом компактней но, ... исправил.

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

ufooo
20-06-2015, 08:19
...

Iska
20-06-2015, 10:00
сделал сразу в тот же день по своему. »
Не стоит черпать бульон вилкой.

ufooo
20-06-2015, 17:59
...

opel431
20-06-2015, 19:25
Those who live in glass houses should not throw stones at others »
1. С такой позицией (не в плане хореографии), Вам вряд ли захотят помогать еще раз.
2. И "хрустальные замки" рушатся - http://www.gunsmoker.ru/2015/01/never-use-ShellExecute.html
3. В Вашем варианте решения, наверное нет смысла выносить все в глобальные переменные.

Iska
20-06-2015, 20:11
2. И "хрустальные замки" рушатся - http://www.gunsmoker.ru/2015/01/neve...llExecute.html »
opel431, занятненько ;).

ufooo
21-06-2015, 00:24
...




© OSzone.net 2001-2012