Главная страница
    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.007 c
14-86505
Агент Смит [8]
2003-12-03 14:53
2003.12.26
---|Ветка была без названия|---


3-86317
ivan01234
2003-12-01 23:12
2003.12.26
А ERWin Кто-нибудь знает?


1-86339
Makhanev A.S.
2003-12-12 20:20
2003.12.26
Насколько точен TTimer?


14-86543
Думкин
2003-12-03 06:07
2003.12.26
С днем рождения! 3 декаабря.


1-86368
BlackTiger
2003-12-15 14:31
2003.12.26
Косячише Delphi? MDI-приложение и Charset(!)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский