Вверх ↑
Этот топик читают: Гость
Ответов: 2415
Рейтинг: 691
#16: 2025-05-12 21:27:10 ЛС | профиль | цитата
Gunta, нет это не как не связано с типом данных:

Add(MainForm,14047676,343,147)
{
Width=576
Height=475
Point(onMouseWheel)
Point(Handle)
link(onActivate,1098179:doData,[(387,153)(387,195)(331,195)(331,237)])
link(onCreate,4438343:doEnum,[])
link(onMouseWheel,3842519:doEvent1,[(425,174)(425,286)])
}
Add(WinEnum,4438343,504,161)
{
link(onFindWindow,16417546:doStrCatDlm,[])
}
Add(Image,12279222,749,280)
{
Top=125
Width=560
Height=286
Align=5
}
Add(Hub,3842519,539,280)
{
link(onEvent1,8026749:doEvent,[])
link(onEvent2,11512912:doEvent,[(585,293)(585,356)])
}
Add(Label,11295395,791,350)
{
Top=411
Width=560
Height=25
Align=4
Font=[MS Sans Serif,12,0,0,1]
AutoSize=1
Alignment=2
}
Add(MathParse,11071173,700,350)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,8651668:doStrCat,[])
}
Add(StrCat,8651668,742,350)
{
Str1="Timer: "
link(onStrCat,11295395:doText,[])
}
Add(ListBox,12831490,616,161)
{
Width=560
Height=125
Align=2
Font=[MS Sans Serif,12,0,0,1]
DataType=1
link(onClick,3412572:doSplit,[])
}
Add(ScreenShort,6248627,700,280)
{
link(onCapture,12279222:doLoad,[])
link(Handle,5053317:Var,[])
}
Add(StrCatDelim,16417546,567,161)
{
Delimiter="|"
link(onStrCatDlm,12831490:doAdd,[])
link(Str2,4438343:Handle,[(580,134)(440,134)(440,205)(510,205)])
}
Add(Debug,8026749,602,280)
{
WEName="1"
VDName=""
link(onEvent,6248627:doCapture,[])
}
Add(Debug,11512912,616,350)
{
WEName="2"
VDName=""
link(onEvent,11071173:doCalc,[])
}
Add(DoData,1098179,343,231)
{
link(Data,1435506:Var,[])
}
Add(Debug,1435506,343,196)
{
WEName=""
VDName="realHandle"
link(Data,14047676:Handle,[])
}
Add(Debug,5053317,700,224)
{
WEName=""
VDName="handle"
link(Data,4985132:Var,[])
}
Add(ConvertorEx,4985132,700,168)
{
Mode=1
}
Add(MultiStrData,3412572,658,168)
{
Char="|"
From=1
Count=1
link(onPart1,4985132:doConvert,[])
}
карма: 11

0
Ответов: 897
Рейтинг: 190
#17: 2025-05-12 21:31:47 ЛС | профиль | цитата
sla8a, а так уже одинаковый и вроде не зависает

Add(MainForm,14047676,91,112)
{
Width=576
Height=475
Point(onMouseWheel)
Point(Handle)
link(onActivate,1098179:doData,[(135,118)(135,160)(79,160)(79,202)])
link(onCreate,1905618:doDeferredEvent,[])
link(onMouseWheel,3842519:doEvent1,[(173,139)(173,251)])
}
Add(WinEnum,4438343,252,126)
{
link(onFindWindow,16417546:doStrCatDlm,[])
}
Add(Image,12279222,497,245)
{
Top=125
Width=560
Height=286
Align=5
}
Add(Hub,3842519,287,245)
{
link(onEvent1,8026749:doEvent,[])
link(onEvent2,11512912:doEvent,[(333,258)(333,321)])
}
Add(Label,11295395,539,315)
{
Top=411
Width=560
Height=25
Align=4
Font=[MS Sans Serif,12,0,0,1]
AutoSize=1
Alignment=2
}
Add(MathParse,11071173,448,315)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,8651668:doStrCat,[])
}
Add(StrCat,8651668,490,315)
{
Str1="Timer: "
link(onStrCat,11295395:doText,[])
}
Add(ListBox,12831490,364,126)
{
Width=560
Height=125
Align=2
Font=[MS Sans Serif,12,0,0,1]
DataType=1
link(onClick,3412572:doSplit,[])
}
Add(ScreenShort,6248627,448,245)
{
link(onCapture,12279222:doLoad,[])
link(Handle,5053317:Var,[])
}
Add(StrCatDelim,16417546,315,126)
{
Delimiter="|"
link(onStrCatDlm,12831490:doAdd,[])
link(Str2,4438343:Handle,[(328,99)(188,99)(188,170)(258,170)])
}
Add(Debug,8026749,350,245)
{
WEName="1"
VDName=""
link(onEvent,6248627:doCapture,[])
}
Add(Debug,11512912,364,315)
{
WEName="2"
VDName=""
link(onEvent,11071173:doCalc,[])
}
Add(DoData,1098179,91,196)
{
link(Data,1435506:Var,[])
}
Add(Debug,1435506,91,161)
{
WEName=""
VDName="realHandle"
link(Data,14047676:Handle,[])
}
Add(Debug,5053317,448,189)
{
WEName=""
VDName="handle"
link(Data,4985132:Var,[])
}
Add(ConvertorEx,4985132,448,133)
{
Mode=1
}
Add(MultiStrData,3412572,406,133)
{
Char="|"
From=1
Count=1
link(onPart1,4985132:doConvert,[])
}
Add(DeferredEvent,1905618,196,126)
{
Delay=1000
link(onDeferredEvent,4438343:doEnum,[])
}


Редактировалось 1 раз(а), последний 2025-05-12 21:32:54
карма: 18

0
Ответов: 2415
Рейтинг: 691
#18: 2025-05-12 21:37:41 ЛС | профиль | цитата
Gunta, это уже ближе! Но у меня WinEnum выдает две Form с "правильным" Handle и с "неправильным". С "правильным" все работает без вылетов. У тебя тоже два Form выдает?

Редактировалось 1 раз(а), последний 2025-05-12 21:41:30
карма: 11

0
Ответов: 897
Рейтинг: 190
#19: 2025-05-12 21:41:32 ЛС | профиль | цитата
sla8a писал(а):
Но у меня WinEnum выдает две Form с "правильным" Handle и с "неправильным". С "правильным" все работает без вылетов. У тебя тоже два Form выдает?

У меня тоже и обрати внимание на размер второй формы

Редактировалось 2 раз(а), последний 2025-05-12 21:42:36
карма: 18

0
Ответов: 2415
Рейтинг: 691
#20: 2025-05-12 21:56:28 ЛС | профиль | цитата
Как по мне так WinEnum выдает не "правильные" данные. Form не одна из тех доступ к Handle которой может уронить программу. У меня в списке выданных WinEnum есть еще пару которые роняют сразу же. А с реальными окнами проблем нет. Нужна доработка doEnum у WinEnum.
карма: 11

0
Ответов: 897
Рейтинг: 190
#21: 2025-05-12 21:58:44 ЛС | профиль | цитата
Принудительно увеличил размер второй формы и удивился ещё больше
Чёрное это она
карма: 18

0
Ответов: 1129
Рейтинг: 80
#22: 2025-05-12 22:05:23 ЛС | профиль | цитата
Gunta писал(а):
Чёрное это она

Консоль прячется, шпионит втихаря

С 0-вой высотой скрин не делает. Увеличил размеры, переключился, пошли скрины, снова уменьшил до 0 и таймер остановился.

Редактировалось 1 раз(а), последний 2025-05-12 22:08:30
карма: 2

0
Ответов: 2415
Рейтинг: 691
#23: 2025-05-12 22:14:20 ЛС | профиль | цитата
Ну вот к примеру проверка на ширину и высоту отсекает почти все:
Add(MainForm,14047676,322,91)
{
Width=836
Height=651
Point(onMouseWheel)
Point(Handle)
link(onActivate,1098179:doData,[(366,97)(366,139)(310,139)(310,181)])
link(onCreate,1905618:doDeferredEvent,[])
link(onMouseWheel,3842519:doEvent1,[(404,118)(404,230)])
}
Add(WinEnum,4438343,490,105)
{
link(onFindWindow,1598951:doEvent1,[])
}
Add(Image,12279222,931,224)
{
Top=320
Width=820
Height=267
Align=5
}
Add(Hub,3842519,665,224)
{
link(onEvent1,8026749:doEvent,[])
link(onEvent2,11512912:doEvent,[(711,237)(711,300)])
}
Add(Label,11295395,973,294)
{
Top=587
Width=820
Height=25
Align=4
Font=[MS Sans Serif,12,0,0,1]
AutoSize=1
Alignment=2
}
Add(MathParse,11071173,882,294)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,8651668:doStrCat,[])
}
Add(StrCat,8651668,924,294)
{
Str1="Timer: "
link(onStrCat,11295395:doText,[])
}
Add(ListBox,12831490,798,168)
{
Width=820
Height=320
Align=2
Font=[MS Sans Serif,12,0,0,1]
DataType=1
link(onClick,3412572:doSplit,[])
}
Add(ScreenShort,6248627,882,224)
{
link(onCapture,12279222:doLoad,[])
link(Handle,4985132:Var,[])
}
Add(StrCatDelim,16417546,749,168)
{
Delimiter="|"
link(onStrCatDlm,12831490:doAdd,[])
link(Str1,3399869:Value,[])
link(Str2,8984529:Var3,[(762,74)])
}
Add(Debug,8026749,784,224)
{
WEName="1"
VDName=""
link(onEvent,6248627:doCapture,[])
}
Add(Debug,11512912,798,294)
{
WEName="2"
VDName=""
link(onEvent,11071173:doCalc,[])
}
Add(ConvertorEx,4985132,882,175)
{
Mode=1
}
Add(MultiStrData,3412572,840,175)
{
Char="|"
From=1
Count=1
link(onPart1,4985132:doConvert,[])
}
Add(DeferredEvent,1905618,427,105)
{
Delay=1000
link(onDeferredEvent,4438343:doEnum,[])
}
Add(WinInfo,12732599,616,112)
{
Point(Width)
Point(Height)
link(Handle,8984529:Var2,[])
}
Add(Hub,1598951,567,105)
{
OutCount=3
link(onEvent1,3399869:doValue,[])
link(onEvent2,12732599:doWinInfo,[])
link(onEvent3,12030415:doOperation,[(605,125)(605,174)])
}
Add(If_else,4720971,679,168)
{
Type=5
Op2=Integer(0)
link(onTrue,16417546:doStrCatDlm,[])
AddHint(5,-27,21,13,Op2)
}
Add(Math,12030415,630,168)
{
link(onResult,4720971:doCompare,[])
link(Op1,12732599:Width,[])
link(Op2,12732599:Height,[])
}
Add(Debug,1435506,322,140)
{
WEName=""
VDName="realHandle"
link(Data,14047676:Handle,[])
}
Add(DoData,1098179,322,175)
{
link(Data,1435506:Var,[])
}
Add(Memory,3399869,749,105)
{
}
Add(GetDataEx,8984529,616,69)
{
Angle=3
link(Data,4438343:Handle,[(535,74)(535,149)(496,149)])
}
Второй Form живучий гад
Нужно сделать нормальную проверку в doEnum и всего. Если сегодня не осилю и кто другой не починит, то завтра посмотрю на свежую голову.

Редактировалось 2 раз(а), последний 2025-05-12 22:15:48
карма: 11

0
Ответов: 1129
Рейтинг: 80
#24: 2025-05-12 22:26:19 ЛС | профиль | цитата
sla8a писал(а):
отсекает почти все:


Поскольку ширина такая же как и у основной формы.
Нужно и ширину и высоту > 0
карма: 2

0
Ответов: 897
Рейтинг: 190
#25: 2025-05-12 22:41:11 ЛС | профиль | цитата
У программ созданных в HiAsm
Свойство Caption одинаковое у обеих форм
Но Class name у скрытой формы - obj_App
карма: 18

0
Ответов: 2415
Рейтинг: 691
#26: 2025-05-12 22:41:53 ЛС | профиль | цитата
tom-it, точно! Совсем голова уже перед сном не соображает. Вот тестовая схема:
Add(MainForm,14047676,511,105)
{
Width=836
Height=651
Point(onMouseWheel)
Point(Handle)
link(onCreate,1905618:doDeferredEvent,[])
link(onMouseWheel,3842519:doEvent1,[(551,132)(551,244)])
}
Add(WinEnum,4438343,602,119)
{
link(onFindWindow,1598951:doEvent1,[])
}
Add(Image,12279222,987,238)
{
Top=320
Width=820
Height=267
Align=5
}
Add(Hub,3842519,742,238)
{
link(onEvent1,6248627:doCapture,[])
link(onEvent2,11071173:doCalc,[(788,251)(788,314)])
}
Add(Label,11295395,1029,308)
{
Top=587
Width=820
Height=25
Align=4
Font=[MS Sans Serif,12,0,0,1]
AutoSize=1
Alignment=2
}
Add(MathParse,11071173,938,308)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,8651668:doStrCat,[])
}
Add(StrCat,8651668,980,308)
{
Str1="Timer: "
link(onStrCat,11295395:doText,[])
}
Add(ListBox,12831490,854,189)
{
Width=820
Height=320
Align=2
Font=[MS Sans Serif,12,0,0,1]
DataType=1
link(onClick,3412572:doSplit,[])
}
Add(ScreenShort,6248627,938,238)
{
link(onCapture,12279222:doLoad,[])
link(Handle,4985132:Var,[])
}
Add(StrCatDelim,16417546,805,189)
{
Delimiter="|"
link(onStrCatDlm,12831490:doAdd,[])
link(Str1,3399869:Value,[])
link(Str2,8984529:Var3,[(818,88)])
}
Add(ConvertorEx,4985132,938,196)
{
Mode=1
}
Add(MultiStrData,3412572,896,196)
{
Char="|"
From=1
Count=1
link(onPart1,4985132:doConvert,[])
}
Add(DeferredEvent,1905618,560,119)
{
Delay=1000
link(onDeferredEvent,4438343:doEnum,[])
}
Add(WinInfo,12732599,693,126)
{
Point(Width)
Point(Height)
link(Handle,8984529:Var2,[])
}
Add(Hub,1598951,644,119)
{
OutCount=3
link(onEvent1,3399869:doValue,[])
link(onEvent2,12732599:doWinInfo,[])
link(onEvent3,4720971:doCompare,[(679,139)(679,188)])
}
Add(If_else,4720971,707,182)
{
Op2=Integer(0)
link(onFalse,7675737:doCompare,[(747,195)(747,188)])
link(Op1,12732599:Width,[])
AddHint(-3,36,21,13,Op2)
}
Add(Memory,3399869,805,119)
{
}
Add(GetDataEx,8984529,693,83)
{
Angle=3
link(Data,4438343:Handle,[(637,88)(637,163)(608,163)])
}
Add(If_else,7675737,756,182)
{
Op2=Integer(0)
link(onFalse,16417546:doStrCatDlm,[])
link(Op1,12732599:Height,[(762,170)(720,170)])
AddHint(-3,36,21,13,Op2)
}
У меня не вылетает ни на одно из выданных таким способе окне. Хотя даже так выдает больше окон чем есть. У меня на рабочем столе 5, а выдает 11.
Наверно правильнее будет добавить еще одно свойство WinEnum которое будет отсекать окна которых нет на рабочем столе, как раз для таких случаев. Да и чтоб совместимость сохранилась.

3042, таймер то не причем:
Add(MainForm,14047676,511,105)
{
Width=836
Height=651
link(onCreate,1905618:doDeferredEvent,[])
}
Add(WinEnum,4438343,602,119)
{
link(onFindWindow,1598951:doEvent1,[])
}
Add(Image,12279222,987,238)
{
Top=320
Width=820
Height=267
Align=5
}
Add(Hub,3842519,889,238)
{
link(onEvent1,6248627:doCapture,[])
link(onEvent2,11071173:doCalc,[(921,251)(921,314)])
}
Add(Label,11295395,1029,308)
{
Top=587
Width=820
Height=25
Align=4
Font=[MS Sans Serif,12,0,0,1]
AutoSize=1
Alignment=2
}
Add(MathParse,11071173,938,308)
{
DataCount=0
MathStr="%0 + 1"
link(onResult,8651668:doStrCat,[])
}
Add(StrCat,8651668,980,308)
{
Str1="Timer: "
link(onStrCat,11295395:doText,[])
}
Add(ListBox,12831490,854,189)
{
Width=820
Height=320
Align=2
Font=[MS Sans Serif,12,0,0,1]
DataType=1
link(onClick,3412572:doSplit,[])
}
Add(ScreenShort,6248627,938,238)
{
link(onCapture,12279222:doLoad,[])
link(Handle,4985132:Var,[])
}
Add(StrCatDelim,16417546,805,189)
{
Delimiter="|"
link(onStrCatDlm,12831490:doAdd,[])
link(Str1,3399869:Value,[])
link(Str2,8984529:Var3,[(818,88)])
}
Add(ConvertorEx,4985132,938,196)
{
Mode=1
}
Add(MultiStrData,3412572,896,196)
{
Char="|"
From=1
Count=1
link(onPart1,4985132:doConvert,[])
}
Add(DeferredEvent,1905618,560,119)
{
Delay=1000
link(onDeferredEvent,4438343:doEnum,[])
}
Add(WinInfo,12732599,693,126)
{
Point(Width)
Point(Height)
link(Handle,8984529:Var2,[])
}
Add(Hub,1598951,644,119)
{
OutCount=3
link(onEvent1,3399869:doValue,[])
link(onEvent2,12732599:doWinInfo,[])
link(onEvent3,4720971:doCompare,[(679,139)(679,188)])
}
Add(If_else,4720971,707,182)
{
Op2=Integer(0)
link(onFalse,7675737:doCompare,[(747,195)(747,188)])
link(Op1,12732599:Width,[])
AddHint(-3,36,21,13,Op2)
}
Add(Memory,3399869,805,119)
{
}
Add(GetDataEx,8984529,693,83)
{
Angle=3
link(Data,4438343:Handle,[(637,88)(637,163)(608,163)])
}
Add(If_else,7675737,756,182)
{
Op2=Integer(0)
link(onFalse,16417546:doStrCatDlm,[])
link(Op1,12732599:Height,[(762,170)(720,170)])
AddHint(-3,36,21,13,Op2)
}
Add(Timer,15710297,840,238)
{
Interval=300
link(onTimer,3842519:doEvent1,[])
}

Редактировалось 2 раз(а), последний 2025-05-12 22:47:28
карма: 11

1
Голосовали:3042
Ответов: 1129
Рейтинг: 80
#27: 2025-05-13 05:48:02 ЛС | профиль | цитата
sla8a писал(а):
Наверно правильнее будет добавить еще одно свойство WinEnum которое будет отсекать окна которых нет на рабочем столе, как раз для таких случаев.

Мало-ли для чего может понадобится такое окно. Взаимодействие посредством SendMesagge, к примеру.
А вот в ScreenShort нет проверки. Мол, уважаемая BitBlt скопируй-ка мне супер скрин толщиной менее 1 пикселя
procedure THIScreenShort._work_doCapture;
...

GetWindowRect(wnd,r); // А ведь прямоугольник то бракованный
//Bmp := NewBitmap(r.Right-r.Left,r.Bottom-r.Top);
Bmp := NewDIBBitmap(r.Right-r.Left, r.Bottom-r.Top, pf32bit);
end;
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,DC,0,0,SRCCOPY);
....
карма: 2

0
Ответов: 1946
Рейтинг: 174
#28: 2025-05-13 06:18:29 ЛС | профиль | цитата
tom-it, так тут речь про свойство шла, т.е. можно будет выбрать, выдавать ли такие невидимые окна. Хотя в WinEnum уже есть такое свойство (VisibleOnly), но оно, видимо, работает не полностью.

sla8a, если так, то буду очень рад. А то я уж думал, что придётся искать замену таймеру

Редактировалось 1 раз(а), последний 2025-05-13 06:20:00
карма: 9
0
Ответов: 1129
Рейтинг: 80
#29: 2025-05-13 06:26:42 ЛС | профиль | цитата
3042 писал(а):
так тут речь про свойство шла

Так я и не возражаю.
Так, мысли в слух. Что помимо доработки WinEnum необходимо еще и ScreenShort поправить.
Кто-ж его знает какой уровень бурности фантазии будет в последующих пользователей. Было нормальное окно, а потом чет в бошку перемкнуло и спрятали окно посредством нулевой толщины. Все, BitBlt уже нечего копировать

--- Добавлено в 2025-05-13 06:34:22

3042 писал(а):
Хотя в WinEnum уже есть такое свойство (VisibleOnly), но оно, видимо, работает не полностью.

Если посмотреть свойства этой формы каким-то сканером окон, то окно видимое. Только толщина равна 0.
Так что к VisibleOnly нет претензий

Редактировалось 2 раз(а), последний 2025-05-13 06:44:38
карма: 2

0
Ответов: 897
Рейтинг: 190
#30: 2025-05-13 06:50:46 ЛС | профиль | цитата
Есть ещё окна, у которых высота и ширина нормальные, но они находятся за пределами экрана и их как бы не видно. Плюс окна размером с один пиксель.
карма: 18

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