Вверх ↑
Этот топик читают: Гость
Ответов: 499
Рейтинг: 1
#1: 2007-04-18 22:41:06 ЛС | профиль | цитата
у элемента EnumProcess есть метод doFindID. только чем получить ID текущей копии программы? это ведь не Handle у MainForm. и "CurrentID=Идентификатор текущего процесса|3|int" не помогает.
Add(MainForm,11662697,28,147)
{
Left=20
Top=105
link(onCreate,16761339:doData,[])
}
Add(EnumProcess,14046868,112,112)
{
Point(onFind)
link(onFind,2527999:doChangeValue,[(156,125)(156,118)])
}
Add(LED,2527999,168,112)
{
Left=190
Top=120
}
Add(DoData,16761339,112,182)
{
link(onEventData,14046868:doFindID,[(154,188)(154,163)(102,163)(102,125)])
link(Data,14046868:CurrentID,[])
}
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2007-04-19 13:50:04 ЛС | профиль | цитата
подсказка не совсем верная видимо: CurrentID это ID текущего найденного процесса после вызова метода doEnum
карма: 27
0
Ответов: 499
Рейтинг: 1
#3: 2007-04-20 21:14:13 ЛС | профиль | цитата
вот в чем и вопрос. я могу найти процесс по имени, а если их несколько копий запущено?
получе на CurrentID несколько ID по количеству копий, который из них будет принадлежать текущей программе?
карма: 0

0
Ответов: 8926
Рейтинг: 823
#4: 2007-04-20 21:55:07 ЛС | профиль | цитата
HikeR, можно попробовать:
Add(KeyHook,7798340,147,77)
{
link(onKeyDown,7462152:doText,[(189,83)(189,117)(137,117)(137,132)])
}
Add(Edit,7462152,147,126)
{
Left=125
Top=115
Width=140
link(Str,7798340:Handle,[])
}
Add(Label,14329375,196,126)
{
Left=130
Top=95
Width=135
Caption="ID активной формы"
AutoSize=1
Alignment=2
}
карма: 19

0
Ответов: 499
Рейтинг: 1
#5: 2007-04-20 22:37:37 ЛС | профиль | цитата
Леонид, вроде как не то. в Edit-е получается число с 5-7 знаками, а pid-ы процеесов макс. 4-х значные.
карма: 0

0
Ответов: 8926
Рейтинг: 823
#6: 2007-04-20 22:47:57 ЛС | профиль | цитата
HikeR, знающие люди говорят, что это адрес ячейки ОЗУ, с которой начинается отведённое ей пространство (сам-то я не знаю), но в HiAsm-е его можно использовать
карма: 19

0
Ответов: 2125
Рейтинг: 159
#7: 2007-04-21 19:55:58 ЛС | профиль | цитата
Леонид писал(а):
знающие люди говорят, что это адрес ячейки ОЗУ

Адрес скорее соответствует hInstance, а PID - он и в Африке PID:
code_1335.txt
карма: 1

0
файлы: 1code_1335.txt [645B] [275]
Ответов: 9906
Рейтинг: 351
#8: 2007-04-21 20:10:53 ЛС | профиль | цитата
"в Африке" - значит одинаковый везде в винде (не вдаваясь в серверность оси), и не зависит от контекста процесса.

Адрес ячейки - имеет смеет смысл только в контексте конкретного процесса (у каждого процесса свое виртуальное 4Г-пространство ентих адресов)

Хэндл виндячий - вроде бы (руку на отсечение не дам) оффсет в LDT
карма: 9

0
Ответов: 2125
Рейтинг: 159
#9: 2007-04-21 21:17:24 ЛС | профиль | цитата
Galkov писал(а):
Хэндл виндячий - вроде бы (руку на отсечение не дам) оффсет в LDT

А какой смысл? LDT это подмножество сегментов GDT, а в винде от силы десяток дескрипторов. Это скорее оффсет в таблице указателей на системные объекты ядра (для каждого процесса - своя таблица)
карма: 1

0
Ответов: 9906
Рейтинг: 351
#10: 2007-04-21 21:47:30 ЛС | профиль | цитата
tsdima писал(а):
Это скорее оффсет в таблице указателей на системные объекты ядра

"Указатель" в реальное пространство, вроде и называется дескриптором.
Ну типа - 8-ми байтный
карма: 9

0
Ответов: 2125
Рейтинг: 159
#11: 2007-04-21 23:10:43 ЛС | профиль | цитата
Дескриптор грузится в сегментный регистр, а оффсет в обычный. А поскольку в винде плоская модель памяти, а не сегментированная, то в основном используется пара дескрипторов для ядра (код и данные), посредством которых ты можешь адресоваться ко всем 4Гб, и пара для приложений, с границей 2Гб, таким образом приложения не имеют доступа к ядру. Разная физическая память на тех-же адресах для разных процессов организуется использованием страничной организации памяти.
карма: 1

0
11
Сообщение
...
Прикрепленные файлы
(файлы не залиты)