Форум: "WinAPI";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];
ВнизКак создать MS-DOS ярлык и указать размер окна (размер шрифта). Найти похожие ветки
← →
DDS (2003-10-24 10:16) [0]Как создать MS-DOS ярлык и указать размер окна (размер шрифта).
← →
[lamer]Barmaglot (2003-10-24 13:29) [1]IShellLink?
← →
DDS (2003-10-24 22:17) [2]А какие параметры, можо по конкретней?
← →
diMAN (2003-10-27 08:46) [3]Вот, лови фрагмент:
// Создаем .lnk файл
Unknown := CreateComObject(CLSID_ShellLink);
NewLink := Unknown as IShellLink;
NewLink.SetPath(PChar(ApplicationName));
if CommandLine <> "" then NewLink.SetArguments(PChar(CommandLine));
NewLink.SetDescription("Клиент СЕ-2");
NewLink.SetWorkingDirectory(PChar(ExtractFilePath(ApplicationName)));
NewLink.SetShowCmd(SW_SHOWMAXIMIZED);
NewLink.SetHotkey(0);
NewLink.SetIconLocation(PChar(ParamStr(0)), 0);
DataList := Unknown as IShellLinkDataList;
Result := DataList.CopyDataBlock(NT_CONSOLE_PROPS_SIG, Pointer(NTConsoleProps));
if Result = 0
then begin
DataList.RemoveDataBlock(NT_CONSOLE_PROPS_SIG);
end
else begin
New(NTConsoleProps);
ZeroMemory(NTConsoleProps, SizeOf(TNTConsoleProps));
end;
with NTConsoleProps^ do
begin
dbh.cbSize := SizeOf(TNTConsoleProps);
dbh.dwSignature := NT_CONSOLE_PROPS_SIG;
wFillAttribute := $0007;
wPopupFillAttribute := $00f5;
dwScreenBufferSize.X := 80;
dwScreenBufferSize.Y := 25;
dwWindowSize.X := 80;
dwWindowSize.Y := 25;
dwWindowOrigin.X := 0;
dwWindowOrigin.Y := 0;
nFont := 0;
nInputBufferSize := 0;
dwFontSize.X := 10;
dwFontSize.Y := 18;
uFontFamily := 0;
uFontWeight := 0;
GDIObject := GetStockObject(OEM_FIXED_FONT);
GetObject(GDIObject, SizeOf(LogFont), @LogFont);
StringToWideChar(logFont.lfFaceName, PWideChar(@FaceName), 34);
uCursorSize := 2;
bFullScreen := False;
bQuickEdit := False;
bInsertMode := True;
bAutoPosition := False;
uHistoryBufferSize := 50;
uNumberOfHistoryBuffers := 4;
bHistoryNoDup := False;
ColorTable[0] := 0;
ColorTable[1] := $00800000;
ColorTable[2] := $00008000;
ColorTable[3] := $00808000;
ColorTable[4] := $00000080;
ColorTable[5] := $00800080;
ColorTable[6] := $00008080;
ColorTable[7] := $00c0c0c0;
ColorTable[8] := $00808080;
ColorTable[9] := $00ff0000;
ColorTable[10] := $0000ff00;
ColorTable[11] := $00ffff00;
ColorTable[12] := $000000ff;
ColorTable[13] := $00ff00ff;
ColorTable[14] := $0000ffff;
ColorTable[15] := $00ffffff;
end;
DataList.AddDataBlock(Pointer(NTConsoleProps));
PersistFile := Unknown as IPersistFile;
GetTempPath(MAX_PATH, FilePath);
PersistFile.Save(PWideChar(WideString(FilePath + ChangeFileExt(ExtractFileName(ParamStr(0)), ".lnk"))), False);
Dispose(NTConsoleProps);
← →
Woolen (2003-10-27 18:03) [4]DDS
Что такое "MS-DOS ярлык"? По отдельности знаю, вместе не встречал. А-а-а, понял. Делай что-то типа этого:
A := TStringList.Create;
A.Append(полное имя файла, для которого делаешь ярлык);
A.SaveToFile(твой ярлык.bat);
A.Free;
← →
DDS (2003-10-28 22:50) [5]Woolen Я имел в виду PIF.
← →
DDS (2003-10-29 19:22) [6]У меня проблемма, что за типы такие:
IShellLinkDataList, TNTConsoleProps, GDIObject.
Главный тип IShellLink естественно есть, а вот IShellLinkDataList
нигде нет в стандартных модулях.
А на счет TNTConsoleProps. У меня стоит WinXP, хотя она и
есть NT в своем роде, но что прога будет работать только на WinNT/XP/2000.
Если да, то как бы сделать и для Win9x/Me.
Подскажите пожалуйста где достать модули с этими типами, а то ни черта не работает.
← →
diMAN (2003-10-29 20:28) [7]Вот, лови полностью рабочая программа, только если нужно укажи путь к своей иконке и параметры те, которые тебе нужны. А насчёт работы под Win9x/Me, работать будет везде, где есть интерфейс IShellLinkDataList, а по заявлению Microsoft он имеется везде, где есть shell32.dll version 4.71 or later. Т.е. если у тебя нету, просто поставь IE поновее, а он за собой и shell32.dll "притянет".
program CreateShortcut;
{$APPTYPE CONSOLE}
uses
SysUtils, ShlObj, ComObj, ActiveX, Windows, ShlObjAdditional;
var
Unknown : IUnknown;
NewLink : IShellLink;
DataList : IShellLinkDataList;
PersistFile : IPersistFile;
NTConsoleProps : PNTConsoleProps;
Result : HRESULT;
begin
CoInitialize(nil);
Unknown := CreateComObject(CLSID_ShellLink);
NewLink := Unknown as IShellLink;
NewLink.SetPath(PChar(ParamStr(0)));
NewLink.SetArguments(PChar("parameters"));
NewLink.SetDescription(PChar(ExtractFileName(ParamStr(0))));
NewLink.SetWorkingDirectory(PChar(ExtractFilePath(ParamStr(0))));
NewLink.SetShowCmd(SW_SHOWMAXIMIZED);
NewLink.SetHotkey(0);
NewLink.SetIconLocation(PChar(ExtractFilePath(ParamStr(0)) + "phone.ico"), 0);
DataList := Unknown as IShellLinkDataList;
Result := DataList.CopyDataBlock(NT_CONSOLE_PROPS_SIG, Pointer(NTConsoleProps));
if Result = 0
then begin
DataList.RemoveDataBlock(NT_CONSOLE_PROPS_SIG);
end
else begin
New(NTConsoleProps);
ZeroMemory(NTConsoleProps, SizeOf(TNTConsoleProps));
end;
with NTConsoleProps^ do
begin
dbh.cbSize := SizeOf(TNTConsoleProps);
dbh.dwSignature := NT_CONSOLE_PROPS_SIG;
wFillAttribute := $0007;
wPopupFillAttribute := $00f5;
dwScreenBufferSize.X := 80;
dwScreenBufferSize.Y := 25;
dwWindowSize.X := 80;
dwWindowSize.Y := 25;
dwWindowOrigin.X := 0;
dwWindowOrigin.Y := 0;
nFont := 0;
nInputBufferSize := 0;
dwFontSize.X := 10;
dwFontSize.Y := 18;
uFontFamily := 0;
uFontWeight := 0;
StringToWideChar("Terminal", PWideChar(@FaceName), 34);
uCursorSize := 2;
bFullScreen := False;
bQuickEdit := True;
bInsertMode := False;
bAutoPosition := False;
uHistoryBufferSize := 50;
uNumberOfHistoryBuffers := 4;
bHistoryNoDup := False;
ColorTable[0] := 0;
ColorTable[1] := $00800000;
ColorTable[2] := $00008000;
ColorTable[3] := $00808000;
ColorTable[4] := $00000080;
ColorTable[5] := $00800080;
ColorTable[6] := $00008080;
ColorTable[7] := $00c0c0c0;
ColorTable[8] := $00808080;
ColorTable[9] := $00ff0000;
ColorTable[10] := $0000ff00;
ColorTable[11] := $00ffff00;
ColorTable[12] := $000000ff;
ColorTable[13] := $00ff00ff;
ColorTable[14] := $0000ffff;
ColorTable[15] := $00ffffff;
end;
Result := DataList.AddDataBlock(Pointer(NTConsoleProps));
PersistFile := Unknown as IPersistFile;
PersistFile.Save(PWideChar(WideString(ChangeFileExt(ParamStr(0), ".lnk"))), False);
Dispose(NTConsoleProps);
CoUninitialize;
end.
URL ftp://delphi-jedi.org/api/ShlObjAdditional.zip
и ещё
URL ftp://delphi-jedi.org/api/win32api.zip - здесь куча структур и констант, которые активно используются в WinApi, но многие из которых не описаны в Delphi.
P.S. Кстати, если тебе нужно запустить программу DOS, то не обязательно это делать через ярлык, многие параметры консольного окна можно установить и из своей программы.
← →
Woolen (2003-10-30 11:27) [8]
> Я имел в виду PIF.
А тебе в данный момент все рассказывают про lnk. Народ, ему pif нужен, если кто знает, разъясните!!!!!!!!!!!!!!! Я не знаю, честно говоря... Когда этот формат активно использовался, я букварь про первую Delphi читал.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c