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,[])
}
Этот топик читают: Гость
Ответов: 499
Рейтинг: 1
|
|||
у элемента EnumProcess есть метод doFindID. только чем получить ID текущей копии программы? это ведь не Handle у MainForm. и "CurrentID=Идентификатор текущего процесса|3|int" не помогает.
|
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
подсказка не совсем верная видимо: CurrentID это ID текущего найденного процесса после вызова метода doEnum
|
|||
карма: 27 |
|
Ответов: 499
Рейтинг: 1
|
|||
вот в чем и вопрос. я могу найти процесс по имени, а если их несколько копий запущено?
получе на CurrentID несколько ID по количеству копий, который из них будет принадлежать текущей программе? |
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
HikeR, можно попробовать:
|
|||
карма: 19 |
|
Ответов: 499
Рейтинг: 1
|
|||
Леонид, вроде как не то. в Edit-е получается число с 5-7 знаками, а pid-ы процеесов макс. 4-х значные.
|
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
HikeR, знающие люди говорят, что это адрес ячейки ОЗУ, с которой начинается отведённое ей пространство (сам-то я не знаю), но в HiAsm-е его можно использовать
|
|||
карма: 19 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Леонид писал(а): знающие люди говорят, что это адрес ячейки ОЗУАдрес скорее соответствует hInstance, а PID - он и в Африке PID: code_1335.txt |
|||
карма: 1 |
| ||
файлы: 1 | code_1335.txt [645B] [275] |
Ответов: 9906
Рейтинг: 351
|
|||
"в Африке" - значит одинаковый везде в винде (не вдаваясь в серверность оси), и не зависит от контекста процесса.
Адрес ячейки - имеет смеет смысл только в контексте конкретного процесса (у каждого процесса свое виртуальное 4Г-пространство ентих адресов) Хэндл виндячий - вроде бы (руку на отсечение не дам) оффсет в LDT |
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Galkov писал(а): Хэндл виндячий - вроде бы (руку на отсечение не дам) оффсет в LDTА какой смысл? LDT это подмножество сегментов GDT, а в винде от силы десяток дескрипторов. Это скорее оффсет в таблице указателей на системные объекты ядра (для каждого процесса - своя таблица) |
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
tsdima писал(а): Это скорее оффсет в таблице указателей на системные объекты ядра"Указатель" в реальное пространство, вроде и называется дескриптором. Ну типа - 8-ми байтный |
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Дескриптор грузится в сегментный регистр, а оффсет в обычный. А поскольку в винде плоская модель памяти, а не сегментированная, то в основном используется пара дескрипторов для ядра (код и данные), посредством которых ты можешь адресоваться ко всем 4Гб, и пара для приложений, с границей 2Гб, таким образом приложения не имеют доступа к ядру. Разная физическая память на тех-же адресах для разных процессов организуется использованием страничной организации памяти.
|
|||
карма: 1 |
|
11