Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 533
от 15.07.2006, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 362, Экспертов: 67
В номере:Вопросов: 5, Ответов: 10


Вопрос № 48669: Здравствуйте, госода Эксперты! У меня два вопроса: 1) Нашел в Интернете, что скрыть процесс программы в Диспетчере Задач можно с помощью функции RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'kernel32.dll'. Вызы...
Вопрос № 48676: Здравствуйте Как удалить например 10-ю строку в RichEdit ...
Вопрос № 48689: Добрый день! У меня к Вам вопрос как можно сохранить текстовый фаил в кодировке doc или в кодировке windows можно было выбирать вариант. желательно пример реализации. спасибо. с/у Ера ...
Вопрос № 48739: Добрый вечер, Мудрейшие! Предположим, что на форма лежит Panel. На панели лежит Image. Все это создается в runtime и у image явно указывается parent:=Panel1. Создаю процедуру: Procedure TForm1.resizem(Sender:TImage); Begin Send...
Вопрос № 48749: Здравствуйте, пишу сетевую программу на Dilphi 6 сервер-клиен,хотел узнать: 1. Например на сервер от клиента пришло текстовое сообщение, как определить ip адрес клиента? 2. Предположим, что ip сервера не известен, но известен порт, как осущес...

Вопрос № 48.669
Здравствуйте, госода Эксперты! У меня два вопроса:
1) Нашел в Интернете, что скрыть процесс программы в Диспетчере Задач можно с помощью функции RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'kernel32.dll'. Вызываю ее в FormCreate --- RegisterServiceProcess(GetCurrentProcessID, 0), но прога вылетает с ошибкой "Точка входа в процедуру ... не найдена в библиотеке DLL kernel32.dll". В чем проблема?
2) Как можно отловить запущенный процесс (чужую работающую программу) и завершить ее? Использую PostMessage(FindWindow(nil, 'Заголовок окна'), WM_QUIT, 0, 0), но в ней нужно знать заголовок окна. Мне, вообще-то, нужно вырубать процесс Unlocker`a, а у него в заголовке прописана еще и версия, например, у меня "Unlocker 1.7.9". Но ведь у юзера может быть и другая версия. Что делать в таком случае?
3) Как узнать, с помощью какой программы (как Unlocker) завершают твою , и соответственно, ее вырубить (чужую, конечно)?
Заранее спасибо!
Отправлен: 10.07.2006, 01:46
Вопрос задал: Neiroman (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Neiroman!
1) В Windows NT (в т.ч. Windows 2K, XP, 2K3) нету функции RegisterServiceProcess.
На форумах предлагается смотреть MSDN (October 2000+) -> Platform SDK -> Base Services -> DLLs, Processes, and Threads -> Services.
Взято отсюда: "http://www.sources.ru/NonCGI/Forum2/HTML/000197.html"
Если информации из msdn не хватит или будет непонятно, попробуйте поискать в инете по запросу: "RegisterServiceProcess(GetCurrentProcessID, 0) nt"

2) См. приложение

3) Обрабатывать сообщения типа WM_QUIT. Может быть, там еще WM_CLOSE или что-дь типа того есть - надо все обрабатывать. Список ищите в msdn/инете. Впрочем, я не силен в WinAPI.
Еще можно попробовать в From.OnCloseQuery написать CanClose := False... но как получить ProcessID того, кто хочет закрыть, все равно непонятно :-/ В общем, на этот вопрос я реально ответа не знаю - только идеи =)

Приложение:

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 10.07.2006, 02:17

Отвечает: Physicist
Здравствуйте, Neiroman!

1) Функция RegisterServiceProcess есть только в Win9x, в любой NT-версии ее просто нет в kernel32.

2) Попробуйте функцию
BOOL EnumWindows(
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);
которая для каждого top-level окна вызывает lpEnumFunc вида
BOOL CALLBACK EnumWindowsProc(
HWND hwnd,
LPARAM lParam
);

3) Сам хотел бы узнать. Возможно, используются "вирусные" технологии - проптчивание в памяти каждой запущенной программы для перехвата вызовов SendMessage/PostMessage.
Ответ отправил: Physicist (статус: 4-ый класс)
Ответ отправлен: 10.07.2006, 09:21

Отвечает: Решетник Д
Здравствуйте, Neiroman!
1. Как уже сказали эксперты в НТ нет такой функции. На эту тему есть статья в Делфи Ворлде - www.delphiworld.narod.ru
статья называется "Ныкаем программу от Ctrl Alt Del в WinXP".
2. Лучше один раз запомнить КЛАСС окна, чем постоянно искать заголовок.
int GetClassName(

HWND hWnd, // handle of window
LPTSTR lpClassName, // address of buffer for class name
int nMaxCount // size of buffer, in characters
);
Класс - один из параметров FindWindow.
---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 10.07.2006, 10:49


Вопрос № 48.676
Здравствуйте

Как удалить например 10-ю строку в RichEdit
Отправлен: 10.07.2006, 04:22
Вопрос задал: source (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Coupler
Здравствуйте, source!
Удаление десятой строки:
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Delete(9);
end;
Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 10.07.2006, 05:14

Отвечает: Physicist
Здравствуйте, source!

Попробуйте так:
numline:=10;
LineBegin:=RichEdit1.Perform(EM_LINEINDEX,numline-1,0);
LineEnd:=RichEdit1.Perform(EM_LINEINDEX,numline,0);
RichEdit1.Perform(EM_SETSEL,LineBegin,LineEnd);
RichEdit1.Perform(EM_REPLACESEL,TRUE,PChar(''));
Ответ отправил: Physicist (статус: 4-ый класс)
Ответ отправлен: 10.07.2006, 09:33


Вопрос № 48.689
Добрый день! У меня к Вам вопрос как можно сохранить текстовый фаил в кодировке doc или в кодировке windows можно было выбирать вариант. желательно пример реализации. спасибо. с/у Ера
Отправлен: 10.07.2006, 10:50
Вопрос задал: ERA (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Антонов Никита Вячеславович
Здравствуйте, ERA!
Для этого существуют две функции: CharToOem и OemToChar (неожиданные названия, не правда ли? ;) )

CharToOem - кодирует текст в dos из Windows

OemToChar - наоборот

В качестве первого параметра обоих функций используется текст, который надо перекодировать, в качестве второго - переменная, куда нужно запихнуть перекодированрный текст. Оба параметра имеют тип PChar .

В атаче пример перекодировки виндосовского значения из Form1.Edit1 в дос, и запись его в Form1.Edit2 . Если вам нужрно перекодировать файл - то считывайте текст из файла и подставляйте в 'эти функции.

Приложение:

---------
Прежде чем идти к цели, подумай, стоит ли она того

Ответ отправил: Антонов Никита Вячеславович (статус: 2-ой класс)
Ответ отправлен: 10.07.2006, 11:44
Оценка за ответ: 5
Комментарий оценки:
спасибо


Вопрос № 48.739
Добрый вечер, Мудрейшие!
Предположим, что на форма лежит Panel. На панели лежит Image. Все это создается в runtime и у image явно указывается parent:=Panel1.
Создаю процедуру:
Procedure TForm1.resizem(Sender:TImage);
Begin
Sender.Parent.Width:=150;
End;
Это работает.
Как мне сделать процедуру ...(Sender:TPanel);
В теле которой можно было бы обратиться к "дочернему" объекту панели (TImage)

Приложение:

Отправлен: 10.07.2006, 17:53
Вопрос задал: Дмитрий Александрович (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Татьяна
Здравствуйте, Дмитрий Александрович!
Я так поняла, вопрос в том, как обратиться к дочернему окну панели
Все дочерние элементы можно получить через свойство Controls

for i := 0 to panel1.ControlCount-1 do
if Panel1.Controls[i] is TImage then ....

Если я неправильно поняла вопрос - извините :)
Удачи


---------
Возможно все. И ничего возможно тоже.
Ответ отправила: Татьяна (статус: Студент)
Ответ отправлен: 10.07.2006, 18:46

Отвечает: Coven
Здравствуйте, Дмитрий Александрович!
Обращение к объектам:
with Sender as TPanel do
begin
end;
то же самое для TImage
и процедура: Procedure TForm1.resizem(Sender:TObject);
Ответ отправил: Coven (статус: 1-ый класс)
Ответ отправлен: 11.07.2006, 09:25


Вопрос № 48.749
Здравствуйте, пишу сетевую программу на Dilphi 6 сервер-клиен,хотел узнать:
1. Например на сервер от клиента пришло текстовое сообщение, как определить ip адрес клиента?
2. Предположим, что ip сервера не известен, но известен порт, как осуществить поиск сервера клиенту?
Спасибо.
Отправлен: 10.07.2006, 20:35
Вопрос задал: Сергей Николаевич (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Решетник Д
Здравствуйте, Сергей Николаевич!
2. Я думаю, что нужно просто всем посылать определенное сообещение (пинг), и если кто-то ответил - он сервер.
---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 10.07.2006, 21:43

Отвечает: Physicist
Здравствуйте, Сергей Николаевич!

Если вы используете класс TTcpServer, то IP-адрес получается из свойства RemoteHost этого класса.
Если вы используете WinAPI, то адрес возвращается функцией accept

var QuerySocket:TSocket;
From:TSockAddrIn;
FromSize:integer;
ClientIP:string;

...
FromSize:=SizeOf(From);
QuerySocket:=accept(ServerSocket,@From,@FromSize);
ClientIP:=inet_ntoa(From.sin_addr);
Ответ отправил: Physicist (статус: 4-ый класс)
Ответ отправлен: 10.07.2006, 21:43


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное