Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-86357
Sirruf
2003-12-12 12:58
2003.12.26
Поиграемся с формами?


1-86391
GreySerg
2003-12-15 12:49
2003.12.26
Есть ли в Delphi стандартные функции разбора HTML текста ?


8-86459
JohnJ
2003-08-27 23:01
2003.12.26
Определение координат на DXDraw


1-86427
Vitalik
2003-12-14 00:31
2003.12.26
Скрытый файл


1-86380
Lexxxx
2003-12-15 10:08
2003.12.26
Кол-во дней в месяце





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский