Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Then begin. Form1.TrivClient.Get('Screen.dat', 'Screen.bmp');




Try

Form1.TrivClient.Get('Screen.dat', 'Screen.bmp');

 

if fileexists('Screen.bmp')

thenFrame71.Image1.Picture.LoadFromFile('Screen.bmp');

Except

end;

end;

 

<…>

 

end;

Копируем у Сервера файл Screen.dat и переименовываем в Screen.bmp - Form1.TrivClient.Get('Screen.dat', 'Screen.bmp'); После чего, убедившись, что он существует отображаем его:

 

if fileexists('Screen.bmp')

then Frame71.Image1.Picture.LoadFromFile('Screen.bmp');

Except

end;

«Управление дисководом»

 

 

Для того, чтобы помочь человеку, сидящему за удалённым компьютером, в выборе последующего действия необходимого Вам для объяснения ему чего - либо, в проект была добавлена функция выдвигания и задвигания лотка CD-ROM – a.

При выборе данной функции в Клиенте, появляется диалог управления лотком. На котором располагаются кнопки «Выдвинуть» и «Задвинуть».

Процедура OnClick кнопки «Выдвинуть»:

 

Form1.Send('$F003');

Серверу посылается команда на выдвижение лотка, и он её обрабатывает:

 

if copy(n, 1,5) = '$F003'

then CDROMControl(true);

 

Процедура OnClick кнопки «Задвинуть»:

Form1.Send('$F004');

Обработка Сервером:

 

ifcopy(n, 1,5) = '$F004'

thenCDROMControl(false);

 

Процедура CDROMControl() является импортированной из библиотекиcdrom.dll:

 

procedure CDROMControl(Show : Boolean);

external 'cdrom.dll';

 

Использование DLLв проекте связанно с тем, что чтобы не загружать проектом виртуальную память.

Cdrom.dll, текст библиотеки:

 

library cdrom;

 

Uses

MMSystem,

Forms;

 

procedure CDROMControl(Show : Boolean);

Begin

if Show

then mciSendString('Set cdaudio door open wait', nil, 0, Application.handle)

else mciSendString('Set cdaudio door closed wait', nil, 0, Application.handle)

end;

 

exports CDROMControl;

 

Begin

End.

Если в параметре Show указано значение true, то с помощью процедуры mciSendString() выдвинуть лоток, в противном случае, т.е. false, задвинуть лоток.

 

exports CDROMControl; - экспортируем процедуру CDROMControl(), делая её общедоступной.

 

«Работа с процессами»

Мой проект включает в себя работу с запущенными процессами и программами на удалённом компьютере через локальную сеть. При запуске этой функции отображается фрейм на котором расположена панель с компонентом TListView. В колонке «Приложения» отображаются все запущенные процессы и программы на У.К. (Удалённый Компьютер), а в колонке «Процесс ID» их ID.

Принцип работы: Клиент посылает команду на получения списка процессов, Сервер её обрабатывает, сохраняет в List(TStringList) список всех процессов а в List2 список их ID. Затем их поочерёдно отсылает.

 

Функция GetProcesses()(получение сервером списка процессов и их ID):

 

procedure GetProcesses;

Var

Snap: Integer;

Pe32: TProcessEntry32;

St : string;

Begin

List.Clear;

List2.Clear;

Snap := CreateToolhelp32Snapshot(SE_PRIVILEGE_ENABLED, 0);

Pe32.dwSize := SizeOf(TProcessEntry32);

Process32First(Snap, Pe32);

Repeat

Str(pe32.th32ProcessID, St);

 

List.Add(Trim(pe32.szExeFile));

List2.Add(St)

until not Process32Next(Snap, Pe32);

List.Add('@Pcss');

DM.Send;

Sleep(500);

List2.Add('@PcssID');

Sleep(500);

DM.Send2;

end;

 

Функция Kill() позволяет завершать любой процесс:

 

procedure Kill(PID: Cardinal);

Var

Token, Process: LongWord;

SeDebugNameValue: Int64;

TPriv: TOKEN_PRIVILEGES;

ReturnLength: Cardinal;

Begin

OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);

LookupPrivilegeValue(nil, 'SeDebugPrivilege', SeDebugNameValue);

TPriv.PrivilegeCount := 1;

TPriv.Privileges[0].Luid := SeDebugNameValue;

TPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(Token, False, TPriv, SizeOf(TPriv), TPriv, ReturnLength);

Process := OpenProcess(TOKEN_ASSIGN_PRIMARY, False, PID);

TerminateProcess(Process, INVALID_HANDLE_VALUE);

CloseHandle(Process);

TPriv.Privileges[0].Attributes := 0;

AdjustTokenPrivileges(Token, False, TPriv, SizeOf(TPriv), TPriv, ReturnLength);

end;

 

Обработка отчёта:

if n = '@Pcss'


Поделиться:

Дата добавления: 2015-08-05; просмотров: 45; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты