IP Config собственными руками

Xakep, номер #045, стр. 045-060-3


Ты спрашивал

<???> Как запустить другую программу из Delphi?

Н: Для начала в раздел uses нужно ручками прописать имя модуля shellapi. После этого по событию кнопки (или другому событию, которым ты хочешь запустить стороннюю программу) нужно написать код:

ShellExecute(Handle, nil, 'c:\program_name.exe', '','c:\', SW_SHOW);

Как видишь, у этой функции есть аж 6 параметров:

1. Главное окно. Здесь мы указываем Handle - окно своей программы, но можно и nil.

2. Указатель на строку, которая говорит, что надо делать. Если ты хочешь запустить программу, то рекомендую устанавливать nil. Возможны варианты: open (для открытия программы), print (для распечатки документов) или explore (для просмотра директории).

3. Полный путь или просто имя запускаемого файла. Желательно указывать полный путь.

4. Параметры, которые надо передать в программу.

5. Директория по умолчанию, в которой должна работать программа.

6. Команда отображения. Команд очень много, но чаще всего используется SW_SHOW для нормального отображения.

Чтобы загрузить страничку в IE можно написать так:

ShellExecute(Handle, nil, 'http://www.xakep.ru', '','', SW_SHOW);

Чтобы создать письмо кому-нибудь, пишем так:

ShellExecute(Handle, nil, 'MailTo:smirnandr@mail.ru', '','', SW_SHOW);

Листинг программы

procedure TSystemInfoForm.GetIPInfo;

var

FixedInfoSize, Err:DWORD;

pFixedInfo:PFIXED_INFO;

pAddrStr:PIP_ADDR_STRING;

begin

FixedInfoSize:=0;

Err:=GetNetworkParams(nil, FixedInfoSize);

if (Err<>0) and (Err<>ERROR_BUFFER_OVERFLOW) then

begin

HostNameLabel.Caption:='Error';

exit;

end;

pFixedInfo:=PFIXED_INFO(GlobalAlloc(GPTR, FixedInfoSize));

GetNetworkParams(pFixedInfo, FixedInfoSize);

HostNameLabel.Caption:=StrPas(pFixedInfo.HostName);

DNSListBox.Items.Clear;

DNSListBox.Items.Add(StrPas(pFixedInfo.DnsServerList.IpAddress.S));

pAddrStr:=pFixedInfo.DnsServerList.Next;

while (pAddrStr<>nil) do

begin

DNSListBox.Items.Add(StrPas(pAddrStr.IpAddress.S));

pAddrStr:=pAddrStr.Next;

end;

case pFixedInfo.NodeType of

1: NodeTypeLabel.Caption:='Broadcast';

2: NodeTypeLabel.Caption:='Peer to peer';

4: NodeTypeLabel.Caption:='Mixed';

8: NodeTypeLabel.Caption:='Hybrid';

end;

NetBIOSScopeLabel.Caption:=pFixedInfo.ScopeId;

if pFixedInfo.EnableRouting>0 then

IPRoutingLabel.Caption:='Yes'

else

IPRoutingLabel.Caption:='No';

if pFixedInfo.EnableProxy>0 then

WINSProxyLabel.Caption:='Yes'

else

WINSProxyLabel.Caption:='No';

if pFixedInfo.EnableDns>0 then

NetBIOSResolutionLabel.Caption:='Yes'

else

NetBIOSResolutionLabel.Caption:='No';

end;

Назад на стр. 045-060-2  Содержание