:: Visual Foxpro, Foxpro for DOS
Список форм
dfr
Автор

Сообщений: 245
Откуда: Барнаул
Дата регистрации: 29.07.2005
Как, если можно, получить список всех форм в скомпилированном приложении в Runtime? Т.е. там где нет файлов проекта.
В запущенном приложении.
Ratings: 0 negative/0 positive
Re: Список форм
PuMa

Сообщений: 145
Откуда: Комсомольск-на-А
Дата регистрации: 19.04.2006
У меня перед компиляцией приложения автоматически создается таблица со списком всех форм и включается в приложение (Include). В Runtime соответственно работаю с этой таблицей.
Ratings: 0 negative/0 positive
Re: Список форм
PaulWist

Сообщений: 14501
Дата регистрации: 01.04.2004
FOR x = 1 TO _SCREEN.FormCount
?_SCREEN.Forms(x).Caption
ENDFOR

PS Упс, прочитал внимательнее вопрос, ткнул пальцем в небо.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 02.06.22 08:26
Ratings: 0 negative/0 positive
Re: Список форм
leonid

Сообщений: 3180
Откуда: Рига
Дата регистрации: 03.02.2006
Declare Integer GetProcessHeaps in Win32API Integer, String @
Declare Integer HeapWalk in Win32API Integer, String @
Declare Integer IsBadReadPtr in Win32API Integer, Integer
local lcPROCESS_HEAP_ENTRY, lnHeapHandle, lnRez, lnMemPosition, lnMemSize, lnHeapCnt, lcHeapBuffer
lcHeapBuffer = ""
lnRez = GetProcessHeaps(0, @lcHeapBuffer)
lcHeapBuffer = repl(chr(0), lnRez*4)
lnRez = GetProcessHeaps(lnRez, @lcHeapBuffer)
local llFound, lnHeapWalkRez, lnReadable, lcBody
llFound=.f.
for i = 1 to lnRez
lnHeapHandle = str2dword(substr(lcHeapBuffer,i*4-3,4))
lcPROCESS_HEAP_ENTRY = ;
repl(chr(0),4) + ; && lpData
repl(chr(0),4) + ; && cbData
chr(0) + ; && cbOverhead
chr(0) + ; && iRegionIndex
chr(1) + chr(0) + ; && wFlags //PROCESS_HEAP_REGION
repl(chr(0),8) + ; && Block
repl(chr(0),16) && Region
do while .t.
lnHeapWalkRez = HeapWalk(lnHeapHandle, @lcPROCESS_HEAP_ENTRY)
if lnHeapWalkRez = 0
exit
endif
lnMemPosition = str2dword(left(lcPROCESS_HEAP_ENTRY,4))
lnMemSize = str2dword(substr(lcPROCESS_HEAP_ENTRY,5,4))
lnReadable = IsBadReadPtr(lnMemPosition, lnMemSize)
if lnReadable = 0
lcBody=repl(chr(0), lnMemSize)
Declare RtlMoveMemory in Win32API String @, Integer, Integer
RtlMoveMemory(@lcBody, lnMemPosition, lnMemSize)
if left(lcBody,4) = chr(0x0F)+chr(0x40)+chr(0x00)+chr(0x00) ;
and lower(sys(16,0)) $ lcBody
llFound=.t.
exit
endif
endif
enddo
if llFound
exit
endif
next
local lnSelect
lnSelect=select(0)
local laFiles1(1), laFiles2(1), lnFilesCnt1, lnFilesCnt2, lnFilesCnt3
local lcFilename1, lcFilename2, lcExtension1, lcExtension2
lcBody=substr(left(lcBody,at(lower(sys(16,0)),lcBody)-1),9)
word_num(lcBody, chr(0), @laFiles1)
create cursor _files (name C(254))
lnFilesCnt1=alen(laFiles1,1)
lnFilesCnt2=0
for i=1 to lnFilesCnt1
if !"\" $ laFiles1(i)
lnFilesCnt2=lnFilesCnt2+1
dimension laFiles2(lnFilesCnt2)
laFiles2(lnFilesCnt2)=laFiles1(i)
endif
next
lnFilesCnt3=0
for i=1 to lnFilesCnt2
lcExtension = justext(laFiles2(i))
if lcExtension == "scx"
lnFilesCnt3=lnFilesCnt3+1
insert into _files values (laFiles2(i))
endif
next
select _files
browse
FUNCTION str2dword
lparameter m.st1
local m.st2,m.wrd
if len(m.st1)<4
m.st2=padl(m.st1,4,chr(0))
else
m.st2=left(m.st1,4)
endif
m.wrd=0
Declare RtlMoveMemory in Win32API Integer @wrd, String @st1, Integer cnt
RtlMoveMemory(@m.wrd, @m.st1, 4)
Return m.wrd
Function word_num
lparameter m.txt, m.razd, ar1
if len(m.razd)=0
return 0
endif
local m.cn1, m.cn2, m.st1, m.txt2, m.ln, m.i
m.cn1=occurs(m.razd,m.txt)
if m.cn1=0
if empty(m.txt)
return 0
else
dimension ar1(1)
ar1(1)=m.txt
return 1
endif
else
m.cn2=0
m.txt2=m.razd+m.txt+m.razd
m.ln=len(m.razd)
for m.i=1 to m.cn1+1
m.st1=substr(m.txt2,at(m.razd,m.txt2,m.i)+m.ln,at(m.razd,m.txt2,m.i+1)-at(m.razd,m.txt2,m.i)-m.ln)
m.st1=allt(m.st1)
if !empty(m.st1)
m.cn2=m.cn2+1
dimension ar1(m.cn2)
ar1(m.cn2)=m.st1
endif
next
return m.cn2
endif
Ratings: 0 negative/3 positive
Re: Список форм
Taran

Сообщений: 13586
Откуда: Красноярск
Дата регистрации: 16.01.2008
Восхищен, поражен, испуган.
Список файлов выдернуть из процесса может быть вдруг и появится потребность раз в тыщу лет одному из мильена программистов.
Тут спасибо.

А вот ...
Вроде всё знал, а теперь хоть заново садись букварь читать.
Лет 20 не использую файлы .SCX в принципе.
А самое главное, не могу понять зачем нужно иметь список всех имеющихся форм.
Ratings: 0 negative/0 positive
Re: Список форм
leonid

Сообщений: 3180
Откуда: Рига
Дата регистрации: 03.02.2006
Taran
Список файлов выдернуть из процесса может быть вдруг и появится потребность раз в тыщу лет одному из мильена программистов.

Ну, почему же? Это ведь первая часть процесса декомпиляции защищенного Рефоксом екзешника. Кстати, на последних версиях Рефокса это вроде не работает.
Ratings: 0 negative/0 positive
Re: Список форм
Taran

Сообщений: 13586
Откуда: Красноярск
Дата регистрации: 16.01.2008
Да, Леонид, я так и думал... ;)
Довольно долго использовал твой Defox, полезная вещь.
(Особенно когда заказчик просит максимально защитить программу от декомпиляции)...

К сожалению, в последних версия OS пришлось отказаться.
Ratings: 0 negative/0 positive
Re: Список форм
dfr
Автор

Сообщений: 245
Откуда: Барнаул
Дата регистрации: 29.07.2005
leonid, благодарю!
Ratings: 0 negative/0 positive
Re: Список форм
dfr
Автор

Сообщений: 245
Откуда: Барнаул
Дата регистрации: 29.07.2005
Только стало еще хуже ))

Периодически (редко) вношу изменения в проект у заказчика. После очередной компиляции в EXE у него появились ошибки, точно как написано было не помню, про отсутствие формы.
У меня в проекте проверил - норм, в EXE - с ошибкой. Форму вручную удалил, добавил в проект, ошибка пропала. Но осадок остался.

Такая ситуация впервые за многие годы. Может Fox, может Windows и т.д.

Подумал что можно как-то придумать проверять все формы и др. модули До и После. Сделал сейчас выгрузку всех форм из PJX в DBF-ку, далее из EXE запустил этот код, сравнил построчно с DBF - одной формы нет в EXE (код не выдает ее), но она вызывается норм и нет ошибки... )
Ratings: 0 negative/0 positive
Re: Список форм
ssa

Сообщений: 12951
Откуда: Москва
Дата регистрации: 23.03.2005
dfr
Сделал сейчас выгрузку всех форм из PJX в DBF-ку
Интересно, зачем? Зачем гонять из одной dbf в другую?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Список форм
dfr
Автор

Сообщений: 245
Откуда: Барнаул
Дата регистрации: 29.07.2005
Что б PJX не гонять ) Да это мелочи.
Причину ошибку "нехватки" формы узрел, моя невнимательность. Сравнение работает отлично.

Причина случайного невключения форм в EXE при компиляции пока непонятна.
Ratings: 0 negative/0 positive
Re: Список форм
VeterVFP

Сообщений: 408
Откуда: Москва
Дата регистрации: 26.12.2006
dfr
Причина случайного невключения форм в EXE при компиляции пока непонятна.
Так может банально "Exclude" в Project Manager на этой форме нажал (перечеркнутый круг перед названием формы)?
Ratings: 0 negative/0 positive
Re: Список форм
sphinx

Сообщений: 30760
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
VeterVFP
dfr
Причина случайного невключения форм в EXE при компиляции пока непонятна.
Так может банально "Exclude" в Project Manager на этой форме нажал (перечеркнутый круг перед названием формы)?

+1

;)


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Список форм
sphinx

Сообщений: 30760
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Да я бы мог (хотя...) - кину СТАРЫЕ проекты, вот там приседаний. Ну кому скучно, и денег не заплатят, а просто интересно - договоримся. Обрисую задачу, найдите решение. И таких МОРЕ.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Список форм
sphinx

Сообщений: 30760
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Я про FPD 2.6 больше, но были (пересобрал на 9.0) и на 6.0. Задостали, нет там поиска по проекту. А мне нать. Не люблю приседать, ленив уже стал. ;)


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Список форм
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
sphinx
Не люблю приседать, ленив уже стал.

Цитата:
Не могу стоять, когда другие работают - пойду, полежу...
Ratings: 0 negative/0 positive
Re: Список форм
of63

Сообщений: 24629
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() Ленонид по винде сказал как, что-то сделать, это нештатное решение, но оно подвигает к смене "щор"...
Ratings: 0 negative/0 positive
Re: Список форм
sphinx

Сообщений: 30760
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Simple777
sphinx
Не люблю приседать, ленив уже стал.

Цитата:
Не могу стоять, когда другие работают - пойду, полежу...

Я как ПиВа - все сделаю, а потом и лежать могу. Доскребитесь.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Список форм
sphinx

Сообщений: 30760
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
dfr
Что б PJX не гонять ) Да это мелочи.
Причину ошибку "нехватки" формы узрел, моя невнимательность. Сравнение работает отлично.

Причина случайного невключения форм в EXE при компиляции пока непонятна.

Дружище, Сергей Алексеевич не стебется (да и своих знаем по году регистрации и по никам). Он сухо ПРАВИЛЬНЫЕ вопросы задает. А мы порой балагуры. На него зла не держи, непродуктивно. И не нужно.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Список форм
dfr
Автор

Сообщений: 245
Откуда: Барнаул
Дата регистрации: 29.07.2005
Да без обид, все по делу.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 15 (Гостей: 15)

© 2000-2023 Fox Club 
Яндекс.Метрика