Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2009, 08:55   #11
Romany4
Пользователь
 
Аватар для Romany4
 
Регистрация: 01.09.2009
Сообщений: 18
По умолчанию

В примере у uberchel - да. А у меня не хочет. Почему?
Кто не любит свет, тот и живёт ночью
Romany4 вне форума Ответить с цитированием
Старый 01.09.2009, 09:06   #12
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Мое ИМХО: перед вызовом GetSystemDirectory надо добавить
Код:
T := 255;
Black Fregat вне форума Ответить с цитированием
Старый 01.09.2009, 09:11   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
перед вызовом GetSystemDirectory надо добавить
Не обязательно. Там наверное просто ShellExecute не отрабатывает как надо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.09.2009, 09:12   #14
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Кстати у тебя какая дельфя? Может со строками трабла ?
Попробуй объявить строки Так
Код:
Dir: array[0..255] of WideChar;
Соот. код такой:
Код:
ShellExecute(Handle, 'open', PWideChar(System32 + '\taskmgr.exe'), nil, nil, SW_SHOW);
nusik вне форума Ответить с цитированием
Старый 01.09.2009, 09:19   #15
Romany4
Пользователь
 
Аватар для Romany4
 
Регистрация: 01.09.2009
Сообщений: 18
По умолчанию

Delphi7. Объявил так, как вы сказали, теперь на строке
Код:
 GetSystemDirectory(Dir, T);
выходит ошибка
[Error] Project2.dpr(18): Incompatible types: 'Array' and 'PAnsiChar'
[Error] Project2.dpr(28): Incompatible types: 'WideChar' and 'Char'
Кто не любит свет, тот и живёт ночью
Romany4 вне форума Ответить с цитированием
Старый 01.09.2009, 15:11   #16
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Для своих программ я сделал вот такую функцию:

Код:
Function SystemDirSystem32 : String;
Var
  Windir : Array [0..MAX_PATH] Of Char;
Begin
GetSystemDirectory(WinDir, Sizeof(Windir));
Result := WinDir;
End;
Покачто она не врала и работала исправно.
Возвращает результат типа: C:\Windows\System32

И обычно я вместо:
ShellExecute(Handle, 'open', Pchar(System32 + '\taskmgr.exe'), nil, nil, SW_SHOW);

Пишу:

SW_Restore

Попробуйте....
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 01.09.2009, 16:19   #17
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Есть еще такое определение всех папок:
Цитата:
uses ShlObj;
function GetSpecialPath(CSIDL: word): string;
var s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := '';
result := PChar(s);
end;
Функции нужно передать id папки, путь которой хотим получить. Список id идёт далее.
Следует помнить, что не все id будуть работать в разных версиях Windows. Например папки 'Documents & Settungs' нет в 98-х и бессмысленно пытаться получить путь к ней.
Смысл данного поста скорее не в том, чтобы показать, как пользоваться функцией SHGetSpecialFolderPath, а, скорее, дать перечень CSIDL и описание к ним на русском.
Вот полный код:
uses ShlObj;
const
{ // Следующие идентификаторы имеются в модуле ShlObj:
CSIDL_DESKTOP = $0000;
// Виртуальный каталог, представляющий Рабочий стол. (Корень в проводнике)
CSIDL_INTERNET = $0001;
// Виртуальный каталог для Internet Explorer.
CSIDL_PROGRAMS = $0002;
// Меню Пуск -> Программы
CSIDL_CONTROLS = $0003;
// Виртуальный каталог, содержащий иконки пунктов панели управления
CSIDL_PRINTERS = $0004;
// Виртуальный каталог, содержащий установленные принтеры
CSIDL_PERSONAL = $0005;
// Виртуальный каталог, представляющий папку "Мои документы"
// До Vista ссылался на какталог "Мои документы" на жёстком диске
CSIDL_FAVORITES = $0006;
// Избранное. (обычно C:\Documents and Settings\username\Favorites)
CSIDL_STARTUP = $0007;
// Пуск -> Программы -> Автозагрузка
CSIDL_RECENT = $0008;
// Недавние документы (обычно C:\Documents and Settings\username\My Recent Documents
// Для добавления ссылки документа используйте SHAddToRecentDocs
CSIDL_SENDTO = $0009;
// Папка, содержащая ярлыки меню "Отправить" (Sent to...) (обычно C:\Documents and Settings\username\SendTo)
CSIDL_BITBUCKET = $000a;
// Виртуальный каталог, содержащий файлы в корзине текущего пользователя
CSIDL_STARTMENU = $000b;
// Элементы меню Пуск текущего пользователя (обычно C:\Documents and Settings\username\Start Menu)
CSIDL_DESKTOPDIRECTORY = $0010;
// Рабочий стол текущего пользователя (обычно C:\Documents and Settings\username\Desktop)
CSIDL_DRIVES = $0011;
// Виртуальный каталог, представляющий папку "Мой компьютер"
CSIDL_NETWORK = $0012;
// Виртуальный каталог, представляющий "Сетевое окружение"
CSIDL_NETHOOD = $0013;
// Папка "My Nethood Places" (обычно C:\Documents and Settings\username\NetHood)
// В неё ссылки на избранные расшаренные ресурсы
CSIDL_FONTS = $0014;
// Папка, содержащая установленные шрифты. (обычно C:\Windows\Fonts)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 01.09.2009, 16:19   #18
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Продолжение
Цитата:
CSIDL_TEMPLATES = $0015;
// Шаблоны документов. (Обычно Settings\username\Templates)
CSIDL_COMMON_STARTMENU = $0016;
// Элементы меню Пуск для всех пользователей. (обычно C:\Documents and Settings\All Users\Start Menu)
// Константы, начинающиеся на CSIDL_COMMON_ существуют только в NT версиях
CSIDL_COMMON_PROGRAMS = $0017;
// Меню Пуск -> программы для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs)
CSIDL_COMMON_STARTUP = $0018;
// Меню Пуск -> Программы -> Автозагрузка для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs\Startup)
CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
// Элементы Рабочего стола для всех пользователей (обычно C:\Documents and Settings\All Users\Desktop)
CSIDL_APPDATA = $001a;
// Папка, в которой рограммы должны хранить свои данные(C:\Documents and Settings\username\Application Data)
CSIDL_PRINTHOOD = $001b;
// Установленные принтеры. (обычно C:\Documents and Settings\username\PrintHood)
CSIDL_ALTSTARTUP = $001d; // DBCS
// user's nonlocalized Startup program group. Устарело.
CSIDL_COMMON_ALTSTARTUP = $001e; // DBCS
// Устарело
CSIDL_COMMON_FAVORITES = $001f;
// Ссылки "Избранное" для всех пользователей
CSIDL_INTERNET_CACHE = $0020;
// Временные Internet файлы (обычно C:\Documents and Settings\username\Local Settings\Temporary Internet Files)
CSIDL_COOKIES = $0021;
// Папка для хранения Cookies (обычно C:\Documents and Settings\username\Cookies)
CSIDL_HISTORY = $0022;
// Хранит ссылки интернет истории IE
}
// Следующих идентификаторов нет в ShlObj:
CSIDL_ADMINTOOLS = $30;
// Административные инструменты текущего пользователя (например консоль MMC). Win2000+
CSIDL_CDBURN_AREA = $3b;
// Папка для файлов, подготовленных к записи на CD/DVD
// (Обычно C:\Documents and Settings\username\Local Settings\Application Data\Microsoft\CD Burning)
CSIDL_COMMON_ADMINTOOLS = $2f;
// Папка, содержащая инструменты администрирования
CSIDL_COMMON_APPDATA = $23;
// Папака AppData для всех пользователей. (обычно C:\Documents and Settings\All Users\Application Data)
CSIDL_COMMON_DOCUMENTS = $2e;
// Папка "Общие документы" (обычно C:\Documents and Settings\All Users\Documents)
CSIDL_COMMON_TEMPLATES = $2d;
// Папка шаблонов документов для всех пользователей (Обычно C:\Documents and Settings\All Users\Templates)
CSIDL_COMMON_MUSIC = $35;
// Папка "Моя музыка" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Music)
CSIDL_COMMON_PICTURES = $36;
// Папка "Мои рисунки" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Pictures)
CSIDL_COMMON_VIDEO = $37;
// Папка "Моё видео" для всех пользователей (C:\Documents and Settings\All Users\Documents\My Videos)
CSIDL_COMPUTERSNEARME = $3d;
// Виртуальная папка, представляет список компьютеров в вашей рабочей группе
CSIDL_CONNECTIONS = $31;
// Виртуальная папка, представляет список сетевых подключений
CSIDL_LOCAL_APPDATA = $1c;
// AppData для приложений, которые не переносятся на другой компьютер (обычно C:\Documents and Settings\username\Local Settings\Application Data)
CSIDL_MYDOCUMENTS = $0c;
// Виртуальный каталог, представляющий папку "Мои документы"
CSIDL_MYMUSIC = $0d;
// Папка "Моя музыка"
CSIDL_MYPICTURES = $27;
// Папка "Мои картинки"
CSIDL_MYVIDEO = $0e;
// Папка "Моё видео"
CSIDL_PROFILE = $28;
// Папка пользователя (обычно C:\Documents and Settings\username)
CSIDL_PROGRAM_FILES = $26;
// Папка Program Files (обычно C:\Program Files)
CSIDL_PROGRAM_FILESX86 = $2a;
CSIDL_PROGRAM_FILES_COMMON = $2b;
// Папка Program Files\Common (обычно C:\Program Files\Common)
CSIDL_PROGRAM_FILES_COMMONX86 = $2c;
CSIDL_RESOURCES = $38;
// Папка для ресерсов. Vista и выше (обычно C:\Windows\Resources)
CSIDL_RESOURCES_LOCALIZED = $39;
CSIDL_SYSTEM = $25;
// Папака System (обычно C:\Windows\System32 или C:\Windows\System)
CSIDL_SYSTEMX86 = $29;
CSIDL_WINDOWS = $24;
// Папка Windows. Она же %windir% или %SYSTEMROOT% (обычно C:\Windows)

Пример:
function GetSpecialPath(CSIDL: word): string;
var s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := GetSpecialPath(CSIDL_APPDATA);
result := PChar(s);
end;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 02.09.2009, 13:03   #19
Romany4
Пользователь
 
Аватар для Romany4
 
Регистрация: 01.09.2009
Сообщений: 18
По умолчанию

Спасибо, ребят, за помощь. Теперь ещё одна проблема. Скомпилированный файл антивирусы принимаю за вирус. Возможно проактивная защита или как это называется...
Можно как-нибудь исправить это?


Код:
program Project2;

uses
  Registry, windows, shellapi;

{$R *.res}

var
reg: TRegistry;
Instance: HWnd;
Handle: HWnd;
begin
reg:= TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\System', true);
reg.WriteInteger('DisableTaskMgr', 0);
reg.CloseKey;
ShellExecute(Handle, nil, 'taskmgr.exe', nil, nil, SW_SHOW);
reg.Free;
end.
Кто не любит свет, тот и живёт ночью
Romany4 вне форума Ответить с цитированием
Старый 02.09.2009, 13:12   #20
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

По поводу предыдущих прерий:
GetEnvironmentVariable и set в cmd Вам в помощь.
А ты, случаем, свой исполняемый файл в sys32 не копируешь? ))
И еще:
Код:
reg:= TRegistry.Create(Key_All_Access);
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После копирования в другую директорию программа не работает Terikon Общие вопросы Delphi 8 31.03.2009 00:19
Как изменить директорию в FileListBox oduvan4ik Общие вопросы Delphi 1 01.03.2009 13:54
Среди 20 введёных чисел определить чётные, распечатать их, определить min Spade Помощь студентам 4 15.06.2008 18:39
Запаролить директорию NikLik Win Api 2 17.02.2008 10:46