Вопрос № 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 того, кто хочет закрыть, все равно непонятно :-/ В общем, на этот вопрос я реально ответа не знаю - только идеи =)
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)
Ответ отправил: 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)
Отвечает: Татьяна
Здравствуйте, Дмитрий Александрович!
Я так поняла, вопрос в том, как обратиться к дочернему окну панели
Все дочерние элементы можно получить через свойство 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 сервера не известен, но известен порт, как осуществить поиск сервера клиенту?
Спасибо.
Отвечает: Решетник Д
Здравствуйте, Сергей Николаевич!
2. Я думаю, что нужно просто всем посылать определенное сообещение (пинг), и если кто-то ответил - он сервер.
--------- Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 10.07.2006, 21:43
Отвечает: Physicist
Здравствуйте, Сергей Николаевич!
Если вы используете класс TTcpServer, то IP-адрес получается из свойства RemoteHost этого класса.
Если вы используете WinAPI, то адрес возвращается функцией accept
var QuerySocket:TSocket;
From:TSockAddrIn;
FromSize:integer;
ClientIP:string;