Вверх ↑
Этот топик читают: Гость
Ответов: 6
Рейтинг: 0
#1: 2020-10-21 13:24:35 ЛС | профиль | цитата
Пытаюсь получит текст строки из LISTBOX схема уходит в рунтайм.


Add(ListBox,6998449,504,28)
{
Left=5
Top=335
Width=610
Height=355
Font=[MS Sans Serif,12,1,0,1]
Strings=#10:Строка 1 .|11:Строка 2 ..|12:Строка 3 ...|13:Строка 4 ....|
Point(Index)
Point(doSelect)
Point(onSelect)
Point(Handle)
Point(PHandle)
}
Add(SendMessage,14145821,532,161)
{
Message=13
Point(Message)
link(onSend,987624:doText,[])
link(Handle,6490718:Var2,[])
link(WParam,8551881:Var,[(545,122)(551,122)])
link(Message,3945192:Var,[(559,138)(568,138)])
}
Add(GlobalVar,3945192,562,101)
{
Name="LB_GETCOUNT: Integer = $18B;"
Data=Integer(395)
}
Add(GlobalVar,8551881,545,80)
{
Name="1"
Data=Integer(1)
}
Add(Button,1406896,343,161)
{
Left=205
Top=20
Width=130
Caption="Количество Стр"
link(onClick,11948046:doEvent1,[])
}
Add(Edit,987624,664,161)
{
Left=340
Top=20
Width=590
}
Add(Hub,11948046,476,161)
{
link(onEvent1,14145821:doSendMessage,[])
}
Add(SendMessage,4830632,469,497)
{
Message=13
Point(Message)
link(onSend,16133515:doText,[])
link(Handle,6490718:Var1,[(475,117)])
link(WParam,11175836:Var,[(482,460)(481,460)])
link(Message,9920424:Var,[(496,474)(505,474)])
}
Add(GlobalVar,9920424,499,437)
{
Name="LB_SETCURSEL: Integer = $186;"
Data=Integer(392)
}
Add(GlobalVar,11175836,475,409)
{
Name="1"
Data=Integer(1)
}
Add(Button,12995872,343,497)
{
Left=205
Top=70
Width=130
Caption="Выбранная Стр"
link(onClick,3930054:doEvent1,[])
}
Add(Edit,16133515,601,497)
{
Left=340
Top=70
Width=590
}
Add(Hub,3930054,413,497)
{
link(onEvent1,4830632:doSendMessage,[])
}
Add(GetDataEx,1803166,532,98)
{
link(Data,11171630:Var2,[])
}
Add(GetDataEx,6490718,532,112)
{
link(Data,1803166:Var2,[])
}
Add(SendMessage,6927793,518,301)
{
Message=13
Point(Message)
link(onSend,14013958:doText,[])
link(Handle,1803166:Var1,[(524,103)])
link(WParam,1038386:Var,[(531,262)(537,262)])
link(Message,4230707:Var,[(545,278)(554,278)])
}
Add(GlobalVar,4230707,548,241)
{
Name="LB_SELECTSTRING: Integer = $18C;"
Data=Integer(390)
}
Add(GlobalVar,1038386,531,220)
{
Name="2"
Data=Integer(2)
}
Add(Button,12937074,343,301)
{
Left=205
Top=45
Width=130
Caption="Выбрать Стр"
link(onClick,1211021:doEvent1,[])
}
Add(Edit,14013958,650,301)
{
Left=340
Top=45
Width=590
}
Add(Hub,1211021,462,301)
{
link(onEvent1,6927793:doSendMessage,[])
}
Add(SendMessage,11971428,385,798)
{
Message=13
Point(Message)
link(onSend,2203774:doText,[])
link(Handle,11171630:Var1,[(391,89)])
link(WParam,8594871:Var,[(398,761)(411,761)])
link(Message,14111385:Var,[(412,775)(421,775)])
}
Add(GlobalVar,14111385,415,738)
{
Name=" LB_GETTEXT: Integer = $189;"
Data=Integer(393)
}
Add(GlobalVar,8594871,405,710)
{
Name="1"
Data=Integer(1)
}
Add(Button,7299247,266,798)
{
Left=205
Top=120
Width=130
Caption="Текс Стр"
link(onClick,8662094:doEvent1,[])
}
Add(Edit,2203774,517,798)
{
Left=340
Top=120
Width=590
}
Add(Hub,8662094,329,798)
{
link(onEvent1,11971428:doSendMessage,[])
}
Add(GetDataEx,11171630,532,84)
{
link(Data,5279890:Var2,[])
}
Add(SendMessage,5442742,462,644)
{
Message=13
Point(Message)
link(onSend,7180028:doText,[])
link(Handle,5279890:Var1,[(468,75)])
link(WParam,5456717:Var,[(475,607)(474,607)])
link(Message,5907470:Var,[(489,621)(498,621)])
}
Add(GlobalVar,5907470,492,584)
{
Name="LB_GETTEXTLEN: Integer = $18A;"
Data=Integer(394)
}
Add(GlobalVar,5456717,468,556)
{
Name="3"
Data=Integer(3)
}
Add(Button,6898713,343,644)
{
Left=205
Top=95
Width=130
Caption="Длинс Стр"
link(onClick,2095071:doEvent1,[])
}
Add(Edit,7180028,594,644)
{
Left=340
Top=95
Width=590
}
Add(Hub,2095071,406,644)
{
link(onEvent1,5442742:doSendMessage,[])
}
Add(GetDataEx,5279890,532,70)
{
link(Data,6998449:Handle,[])
}


Winapi Брал тут http://docwiki.embarcadero.com/Libraries/XE2/en/Winapi.Messages
карма: 0

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#2: 2020-10-21 13:44:10 ЛС | профиль | цитата
Вот такой кусок схемы надо воткнуть от кнопки до Edit

Часть Схемы


Add(Button,7299247,224,966)
{
Left=25
Top=115
Width=130
Caption="Текс Стр"
link(onClick,5834539:doData,[])
}
Add(Edit,2203774,595,973)
{
Left=160
Top=115
Width=590
}
Add(SendMessage,15421399,434,980)
{
Point(Message)
link(onSend,13414976:doGet,[])
link(WParam,8594871:Var,[(447,922)(405,922)])
link(LParam,14189995:Memory,[(454,964)(510,964)])
link(Message,14111385:Var,[])
}
Add(MemoryStream,14189995,490,917)
{
Point(Memory)
Point(doSize)
}
Add(DataToFile,13414976,490,973)
{
Type=6
link(onGet,2203774:doText,[])
link(Stream,14189995:Stream,[])
}
Add(Hub,8233292,378,966)
{
OutCount=3
link(onEvent1,14189995:doClear,[(420,972)(420,930)])
link(onEvent2,14189995:doSize,[(426,979)(426,937)])
link(onEvent3,15421399:doSendMessage,[])
}
Add(GlobalVar,14111385,455,882)
{
Name=" LB_GETTEXT: Integer = $189;"
Data=Integer(393)
}
Add(DoData,5834539,308,966)
{
Data=Integer(100000)
link(onEventData,8233292:doEvent1,[])
}
Add(GlobalVar,8594871,399,882)
{
Name="1"
Data=Integer(1)
}
карма: 22

0
Ответов: 4628
Рейтинг: 749
#3: 2020-10-21 13:47:14 ЛС | профиль | цитата
LParam в сообщении LB_GETTEXT должен указывать на предварительно подготовленный буфер достаточной длины, в который будет помещена строка.

Add(GlobalVar,8594871,469,882)
{
Name="1"
Data=Integer(1)
}
Add(MainForm,2953706,21,105)
{
Width=680
Height=523
Position=1
}
Add(ListBox,6998449,581,189)
{
Left=20
Top=190
Width=610
Height=265
Font=[MS Sans Serif,12,1,0,1]
Strings=#10:Строка 1 .|11:Строка 2 ..|12:Строка 3 ...|13:Строка 4 ....|
Point(Index)
Point(doSelect)
Point(onSelect)
Point(Handle)
Point(PHandle)
}
Add(SendMessage,14145821,609,322)
{
Message=13
Point(Message)
link(onSend,987624:doText,[])
link(Handle,6490718:Var2,[])
link(WParam,8551881:Var,[(622,283)(622,283)])
link(Message,3945192:Var,[(636,299)(643,299)])
}
Add(GlobalVar,3945192,637,259)
{
Name="LB_GETCOUNT: Integer = $18B;"
Data=Integer(395)
}
Add(GlobalVar,8551881,616,238)
{
Name="1"
Data=Integer(1)
}
Add(Button,1406896,420,322)
{
Left=25
Top=20
Width=130
Caption="Количество Стр"
link(onClick,11948046:doEvent1,[])
}
Add(Edit,987624,735,322)
{
Left=160
Top=20
Width=100
}
Add(Hub,11948046,553,322)
{
link(onEvent1,14145821:doSendMessage,[])
}
Add(SendMessage,4830632,546,658)
{
Message=13
Point(Message)
link(onSend,16133515:doText,[])
link(Handle,6490718:Var1,[(552,278)])
link(WParam,11175836:Var,[(559,621)(552,621)])
link(Message,9920424:Var,[(573,635)(580,635)])
}
Add(GlobalVar,9920424,574,595)
{
Name="LB_SETCURSEL: Integer = $186;"
Data=Integer(392)
}
Add(GlobalVar,11175836,546,567)
{
Name="1"
Data=Integer(1)
}
Add(Button,12995872,420,658)
{
Left=25
Top=70
Width=130
Caption="Выбранная Стр"
link(onClick,3930054:doEvent1,[])
}
Add(Edit,16133515,672,658)
{
Left=160
Top=70
Width=100
}
Add(Hub,3930054,490,658)
{
link(onEvent1,4830632:doSendMessage,[])
}
Add(GetDataEx,1803166,609,259)
{
link(Data,11171630:Var2,[])
}
Add(GetDataEx,6490718,609,273)
{
link(Data,1803166:Var2,[])
}
Add(SendMessage,6927793,595,462)
{
Message=13
Point(Message)
link(onSend,14013958:doText,[])
link(Handle,1803166:Var1,[(601,264)])
link(WParam,1038386:Var,[(608,423)(608,423)])
link(Message,4230707:Var,[(622,439)(629,439)])
}
Add(GlobalVar,4230707,623,399)
{
Name="LB_SELECTSTRING: Integer = $18C;"
Data=Integer(390)
}
Add(GlobalVar,1038386,602,378)
{
Name="2"
Data=Integer(2)
}
Add(Button,12937074,420,462)
{
Left=25
Top=45
Width=130
Caption="Выбрать Стр"
link(onClick,1211021:doEvent1,[])
}
Add(Edit,14013958,721,462)
{
Left=160
Top=45
Width=100
}
Add(Hub,1211021,539,462)
{
link(onEvent1,6927793:doSendMessage,[])
}
Add(SendMessage,11971428,462,1064)
{
Message=13
Point(Message)
link(onSend,15087738:doEvent1,[])
link(Handle,11171630:Var1,[(468,250)])
link(WParam,8594871:Var,[])
link(LParam,4569105:Memory,[(482,1038)(748,1038)])
link(Message,14111385:Var,[])
}
Add(GlobalVar,14111385,483,973)
{
Name="LB_GETTEXT: Integer = $189;"
Data=Integer(393)
}
Add(Button,7299247,252,1057)
{
Left=25
Top=120
Width=130
Caption="Текс Стр"
link(onClick,8662094:doEvent1,[])
}
Add(Edit,2203774,784,1071)
{
Left=160
Top=120
Width=100
}
Add(Hub,8662094,315,1057)
{
link(onEvent1,13475432:doEvent1,[(405,1063)(405,1007)])
link(onEvent2,11971428:doSendMessage,[])
}
Add(GetDataEx,11171630,609,245)
{
link(Data,5279890:Var2,[])
}
Add(SendMessage,5442742,539,805)
{
Message=13
Point(Message)
link(onSend,7180028:doText,[])
link(Handle,5279890:Var1,[(545,236)])
link(WParam,5456717:Var,[(552,768)(545,768)])
link(Message,5907470:Var,[(566,782)(573,782)])
}
Add(GlobalVar,5907470,567,742)
{
Name="LB_GETTEXTLEN: Integer = $18A;"
Data=Integer(394)
}
Add(GlobalVar,5456717,539,714)
{
Name="3"
Data=Integer(3)
}
Add(Button,6898713,420,805)
{
Left=25
Top=95
Width=130
Caption="Длинс Стр"
link(onClick,2095071:doEvent1,[])
}
Add(Edit,7180028,665,805)
{
Left=160
Top=95
Width=100
}
Add(Hub,2095071,483,805)
{
link(onEvent1,5442742:doSendMessage,[])
}
Add(GetDataEx,5279890,609,231)
{
link(Data,6998449:Handle,[])
}
Add(MemoryStream,4569105,728,987)
{
Point(Memory)
Point(doSize)
}
Add(DoData,10559745,665,1001)
{
@Hint=#65:Должен быть установлен в размер, достаточный для помещения строки|15:(LB_GETTEXTLEN)|
Data=Integer(100)
link(onEventData,4569105:doSize,[])
AddHint(-87,-87,198,39,@Hint)
}
Add(Hub,15087738,518,1064)
{
link(onEvent1,13475432:doEvent2,[(560,1070)(560,1014)])
link(onEvent2,2521060:doConvert,[])
}
Add(InfoTip,12068297,567,1043)
{
Info=#16:Подгонка размера|
Width=148
Height=18
}
Add(Hub,13475432,588,1001)
{
InCount=2
OutCount=1
link(onEvent1,10559745:doData,[])
}
Add(StreamConvertor,2521060,728,1071)
{
Mode=6
Point(Data)
link(onResult,2203774:doText,[])
link(Data,4569105:Stream,[])
}
карма: 26

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#4: 2020-10-21 14:17:12 ЛС | профиль | цитата
Netspirit, а что будет, если в твоей схеме повторно считать другую строку, которая короче? Кто память очищать-то будет, автоочистка не работает через нижнюю точку? Или пофиг, тк там строка с нулевым символом в конце?

Редактировалось 2 раз(а), последний 2020-10-21 15:16:54
карма: 22

0
Ответов: 4628
Рейтинг: 749
#5: 2020-10-21 15:33:56 ЛС | профиль | цитата
Другая строка запишется в начало буфера, перезаписав всё что там было. Последующая установка размера подгонит впритык. Можно использовать LB_GETTEXTLEN для более точной установки размера.
В целом твой вариант требует меньше перевыделений памяти, так что более оптимальный. Можно ещё улучшить, если установить один раз заведомо больший размер, а затем после чтения сбрасывать Position вместо doClear.
карма: 26

0
Ответов: 6
Рейтинг: 0
#6: 2020-10-21 16:55:20 ЛС | профиль | цитата
Благодарю! Вопрос исчерпан.
карма: 0

0
Ответов: 5227
Рейтинг: 587
#7: 2020-10-21 20:12:02 ЛС | профиль | цитата
А исчерпан он просто тем что из чужих листбоксов просто так данные не спереть

p.s вот как вас только не разоводят а Вы всё в гуру играете
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 6
Рейтинг: 0
#8: 2021-01-18 13:53:35 ЛС | профиль | цитата
Теперь прошу помощи в получение текста (списка всех строк) из SysListView32 через сообщение окну.

свою попытку в виде схемы прикладываю.

Add(RichEdit,16572225,875,518)
{
Left=110
Top=265
Width=495
Height=390
ScrollBars=3
}
Add(SendMessage,6134360,518,511)
{
Message=13
Point(Message)
link(onSend,13525776:doEvent1,[])
link(Handle,14549411:Handle,[(524,355)(489,355)])
link(WParam,13550116:Text,[])
link(LParam,15444758:Memory,[(538,489)(804,489)])
link(Message,11481584:Text,[(545,353)(580,353)])
}
Add(Hub,2009082,420,504)
{
InCount=2
OutCount=3
link(onEvent1,12294358:doEvent1,[(461,510)(461,454)])
link(onEvent2,6134360:doSendMessage,[])
}
Add(MemoryStream,15444758,784,434)
{
Point(Memory)
Point(doSize)
}
Add(DoData,1388538,679,448)
{
@Hint=#65:Должен быть установлен в размер, достаточный для помещения строки|15:(LB_GETTEXTLEN)|
Data=Integer(9999)
link(onEventData,15444758:doSize,[])
AddHint(30,-87,198,39,@Hint)
}
Add(Hub,13525776,574,511)
{
OutCount=4
link(onEvent1,12294358:doEvent2,[(616,517)(616,461)])
link(onEvent2,9924775:doConvert,[])
link(onEvent3,15444758:doClear,[(673,531)(673,447)])
link(onEvent4,7232723:doText,[(609,538)(609,545)])
}
Add(InfoTip,14219184,623,490)
{
Info=#16:Подгонка размера|
Width=148
Height=25
}
Add(Hub,12294358,644,448)
{
InCount=2
OutCount=1
link(onEvent1,1388538:doData,[])
}
Add(StreamConvertor,9924775,784,518)
{
Mode=6
Point(Data)
link(onResult,16572225:doAdd,[])
link(Data,15444758:Stream,[])
}
Add(Edit,11481584,574,245)
{
Left=210
Top=240
Text="4100"
}
Add(Edit,7232723,630,539)
{
Left=340
Top=240
Width=110
}
Add(Edit,13550116,525,245)
{
Left=155
Top=240
Text="1"
}
Add(Memory,15289948,469,182)
{
Default=String(Edit1;ediT2;edit3)
}
Add(Timer,2630583,322,245)
{
Interval=10
AutoStop=10
link(onTimer,14549411:doAdd,[])
}
Add(Button,8681122,364,504)
{
Left=265
Top=240
link(onClick,2009082:doEvent1,[])
}
Add(StrList,5951154,763,245)
{
Strings=#21:1000 4096 LVM_FIRST|26:1000 4096 LVM_GETBKCOLOR|26:1001 4097 LVM_SETBKCOLOR|28:1002 4098 LVM_GETIMAGELIST|28:1003 4099 LVM_SETIMAGELIST|28:1004 4100 LVM_GETITEMCOUNT|24:1005 4101 LVM_GETITEMA|24:1006 4102 LVM_SETITEMA|27:1007 4103 LVM_INSERTITEMA|26:1008 4104 LVM_DELETEITEM|30:1009 4105 LVM_DELETEALLITEMS|31:100a 4106 LVM_GETCALLBACKMASK|31:100b 4107 LVM_SETCALLBACKMASK|27:100c 4108 LVM_GETNEXTITEM|25:100d 4109 LVM_FINDITEMA|27:100e 4110 LVM_GETITEMRECT|31:100f 4111 LVM_SETITEMPOSITION|31:1010 4112 LVM_GETITEMPOSITION|31:1011 4113 LVM_GETSTRINGWIDTHA|23:1012 4114 LVM_HITTEST|29:1013 4115 LVM_ENSUREVISIBLE|22:1014 4116 LVM_SCROLL|27:1015 4117 LVM_REDRAWITEMS|23:1016 4118 LVM_ARRANGE|26:1017 4119 LVM_EDITLABELA|30:1018 4120 LVM_GETEDITCONTROL|26:1019 4121 LVM_GETCOLUMNA|26:101a 4122 LVM_SETCOLUMNA|29:101b 4123 LVM_INSERTCOLUMNA|28:101c 4124 LVM_DELETECOLUMN|30:101d 4125 LVM_GETCOLUMNWIDTH|30:101e 4126 LVM_SETCOLUMNWIDTH|25:101f 4127 LVM_GETHEADER|31:1021 4129 LVM_CREATEDRAGIMAGE|27:1022 4130 LVM_GETVIEWRECT|28:1023 4131 LVM_GETTEXTCOLOR|28:1024 4132 LVM_SETTEXTCOLOR|30:1025 4133 LVM_GETTEXTBKCOLOR|30:1026 4134 LVM_SETTEXTBKCOLOR|27:1027 4135 LVM_GETTOPINDEX|31:1028 4136 LVM_GETCOUNTPERPAGE|25:1029 4137 LVM_GETORIGIN|22:102a 4138 LVM_UPDATE|28:102b 4139 LVM_SETITEMSTATE|28:102c 4140 LVM_GETITEMSTATE|28:102d 4141 LVM_GETITEMTEXTA|28:102e 4142 LVM_SETITEMTEXTA|28:102f 4143 LVM_SETITEMCOUNT|25:1030 4144 LVM_SORTITEMS|33:1031 4145 LVM_SETITEMPOSITION32|32:1032 4146 LVM_GETSELECTEDCOUNT|30:1033 4147 LVM_GETITEMSPACING|33:1034 4148 LVM_GETISEARCHSTRINGA|30:1035 4149 LVM_SETICONSPACING|40:1036 4150 LVM_SETEXTENDEDLISTVIEWSTYLE|40:1037 4151 LVM_GETEXTENDEDLISTVIEWSTYLE|30:1038 4152 LVM_GETSUBITEMRECT|30:1039 4153 LVM_SUBITEMHITTEST|35:103a 4154 LVM_SETCOLUMNORDERARRAY|35:103b 4155 LVM_GETCOLUMNORDERARRAY|26:103c 4156 LVM_SETHOTITEM|26:103d 4157 LVM_GETHOTITEM|28:103e 4158 LVM_SETHOTCURSOR|28:103f 4159 LVM_GETHOTCURSOR|35:1040 4160 LVM_APPROXIMATEVIEWRECT|28:1041 4161 LVM_SETWORKAREAS|32:1042 4162 LVM_GETSELECTIONMARK|32:1043 4163 LVM_SETSELECTIONMARK|27:1044 4164 LVM_SETBKIMAGEA|27:1045 4165 LVM_GETBKIMAGEA|28:1046 4166 LVM_GETWORKAREAS|28:1047 4167 LVM_SETHOVERTIME|28:1048 4168 LVM_GETHOVERTIME|36:1049 4169 LVM_GETNUMBEROFWORKAREAS|27:104a 4170 LVM_SETTOOLTIPS|24:104b 4171 LVM_GETITEMW|24:104c 4172 LVM_SETITEMW|27:104d 4173 LVM_INSERTITEMW|27:104e 4174 LVM_GETTOOLTIPS|25:1053 4179 LVM_FINDITEMW|31:1057 4183 LVM_GETSTRINGWIDTHW|26:105f 4191 LVM_GETCOLUMNW|26:1060 4192 LVM_SETCOLUMNW|29:1061 4193 LVM_INSERTCOLUMNW|28:1073 4211 LVM_GETITEMTEXTW|28:1074 4212 LVM_SETITEMTEXTW|33:1075 4213 LVM_GETISEARCHSTRINGW|26:1076 4214 LVM_EDITLABELW|27:108b 4235 LVM_GETBKIMAGEW|33:108c 4236 LVM_SETSELECTEDCOLUMN|28:108d 4237 LVM_SETTILEWIDTH|23:108e 4238 LVM_SETVIEW|23:108f 4239 LVM_GETVIEW|27:1091 4241 LVM_INSERTGROUP|28:1093 4243 LVM_SETGROUPINFO|28:1095 4245 LVM_GETGROUPINFO|27:1096 4246 LVM_REMOVEGROUP|25:1097 4247 LVM_MOVEGROUP|31:109a 4250 LVM_MOVEITEMTOGROUP|31:109b 4251 LVM_SETGROUPMETRICS|31:109c 4252 LVM_GETGROUPMETRICS|31:109d 4253 LVM_ENABLEGROUPVIEW|26:109e 4254 LVM_SORTGROUPS|33:109f 4255 LVM_INSERTGROUPSORTED|31:10a0 4256 LVM_REMOVEALLGROUPS|24:10a1 4257 LVM_HASGROUP|31:10a2 4258 LVM_SETTILEVIEWINFO|31:10a3 4259 LVM_GETTILEVIEWINFO|27:10a4 4260 LVM_SETTILEINFO|27:10a5 4261 LVM_GETTILEINFO|29:10a6 4262 LVM_SETINSERTMARK|29:10a7 4263 LVM_GETINSERTMARK|33:10a8 4264 LVM_INSERTMARKHITTEST|33:10a9 4265 LVM_GETINSERTMARKRECT|34:10aa 4266 LVM_SETINSERTMARKCOLOR|34:10ab 4267 LVM_GETINSERTMARKCOLOR|26:10ad 4269 LVM_SETINFOTIP|33:10ae 4270 LVM_GETSELECTEDCOLUMN|34:10af 4271 LVM_ISGROUPVIEWENABLED|31:10b0 4272 LVM_GETOUTLINECOLOR|31:10b1 4273 LVM_SETOUTLINECOLOR|31:10b3 4275 LVM_CANCELEDITLABEL|28:10b4 4276 LVM_MAPINDEXTOID|28:10b5 4277 LVM_MAPIDTOINDEX|29:10b6 4278 LVM_ISITEMVISIBLE|
}
Add(InfoTip,6935600,665,196)
{
Info=#33:Список Команд Окну SysListView32|
Width=260
Height=123
}
Add(StringTable,14549411,469,245)
{
Left=110
Top=15
Width=490
Height=215
Point(Handle)
link(Str,15289948:Value,[])
}

карма: 0

0
Ответов: 783
Рейтинг: 168
#9: 2021-01-19 22:01:25 ЛС | профиль | цитата
Psaho писал(а):
прошу помощи в получение текста (списка всех строк) из SysListView32 через сообщение окну

Это не так просто сделать как кажется. На форуме выкладывали примеры как получить данные из SysListView32. Вот один из примеров.
Add(MainForm,2953706,28,77)
{
Width=519
Height=612
link(onCreate,11029555:doFor,[])
}
Add(RichEdit,16572225,294,175)
{
Top=504
Width=503
Height=69
Align=4
ModeSp=1
ScrollBars=3
}
Add(Hub,2009082,175,154)
{
link(onEvent1,8093015:doGetListViewHeader,[])
link(onEvent2,8093015:doGetListViewRow,[])
}
Add(Memory,15289948,133,35)
{
Default=String(Edit1;ediT2;edit3)
}
Add(StringTable,14549411,189,91)
{
Width=503
Height=215
Align=2
Columns=#1:1|1:2|1:3|1:4|1:5|
Point(Handle)
}
Add(InlineCode,8093015,203,154)
{
WorkPoints=#19:doGetListViewHeader|16:doGetListViewRow|
EventPoints=#8:onHeader|5:onRow|
DataPoints=#8:inHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,windows,Share,Debug;|0:|5:const|27: HDM_FIRST = $1200;|27: LVM_FIRST = $1000;|36: LVM_GETHEADER = LVM_FIRST + 31;|35: HDM_GETITEMCOUNT = HDM_FIRST + 0;|27: HDI_TEXT = $0002;|27: HDF_STRING = $4000;|2: |35: LVM_GETITEMCOUNT = LVM_FIRST + 4;|1: |4:type|19: HD_ITEM = record|19: Mask: Cardinal;|17: cxy: Integer;|23: pszText: PAnsiChar;|17: hbm: HBITMAP;|24: cchTextMax: Integer;|17: fmt: Integer;|19: lParam: LPARAM;|22: iImage: Integer; |22: iOrder: Integer; |7: end; |2: |4:type|18: LV_ITEM = record|15: mask: UINT;|19: iItem: Integer;|22: iSubItem: Integer;|16: state: UINT;|20: stateMask: UINT;|23: pszText: PAnsiChar;|24: cchTextMax: Integer;|20: iImage: Integer;|19: lParam: LPARAM;|21: iIndent: Integer;|8: end; |1: |0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|25: onHeader:THI_Event;|22: onRow:THI_Event;|25: inHandle:THI_Event;|3: |50: procedure GetListViewHeader(ALVHandle: HWND);|47: procedure GetListViewRow(ALVHandle: HWND);|59: procedure doGetListViewHeader(var dt:TData; idx:word);|56: procedure doGetListViewRow(var dt:TData; idx:word);|5: end;|0:|14:implementation|0:|46:function ListView_GetHeader(hwnd: HWND): HWND;|5:begin|51: Result := SendMessage(hwnd, LVM_GETHEADER, 0, 0);|4:end;|0:|52:function Header_GetItemCount(Header: HWnd): Integer;|5:begin|56: Result := SendMessage(Header, HDM_GETITEMCOUNT, 0, 0);|4:end;|0:|79:function Header_GetItem(Header: HWnd; Index: Integer; var Item: HD_ITEM): Bool;|5:begin|76: Result := Bool( SendMessage(Header, HDM_GETITEM, Index, Longint(@Item)) );|4:end;|0:|52:function ListView_GetItemCount(hWnd: HWND): Integer;|5:begin|54: Result := SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);|4:end;|0:|42:procedure THiAsmClass.doGetListViewHeader;|18:var hwnd:Cardinal;|5:begin|35: hwnd := ReadInteger(dt,inHandle);|24: if hwnd = 0 then exit;|26: GetListViewHeader(hwnd);|4:end;|0:|39:procedure THiAsmClass.doGetListViewRow;|18:var hwnd:Cardinal;|5:begin|35: hwnd := ReadInteger(dt,inHandle);|24: if hwnd = 0 then exit;|23: GetListViewRow(hwnd);|4:end;|0:|57:procedure THiAsmClass.GetListViewHeader(ALVHandle: HWND);|6:const |49: cchTextMax=148; // максимальная длина заголовка|5:var |20: hProcess: THandle;|21: dwProcessID: DWORD;|18: dwWriten: DWORD;|17: dwCount: DWORD;|17: pszText: PChar;|22: svText: ShortString;|18: HDItem: HD_ITEM;|20: pHDItem: ^HD_ITEM;|29: i, j, nTextLength: Integer;|17: lvHeader: HWND;|14: stmp:string;|5:begin|0:|38: // Получаем хендл заголовка ListView|44: lvHeader := ListView_GetHeader(ALVHandle);|0:|35: // Получаем количество заголовков|43: dwCount := Header_GetItemCount(lvHeader);|27: if dwCount = 0 then Exit;|0:|25: // Получаем ID процесса|19: dwProcessID := 0;|51: GetWindowThreadProcessId(lvHeader, @dwProcessID);|0:|25: if dwProcessID = 0 then|28: ExitProcess(GetLastError);|0:|22: // Открываем процесс|16: hProcess := 0;|65: hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);|22: if hProcess = 0 then|28: ExitProcess(GetLastError);|0:|48: // Выделяем в нем память под текстовый буффер |54: pszText := VirtualAllocEx(hProcess, nil, cchTextMax,|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|48: // Выделяем в нем память под структуру HDITEM|59: pHDItem := VirtualAllocEx(hProcess, nil, SizeOf(HD_ITEM),|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|0:|24: // Заполняем структуру|39: ZeroMemory(@HDItem, SizeOf(HD_ITEM));|26: HDItem.mask := HDI_TEXT;|28: HDItem.pszText := pszText;|34: HDItem.cchTextMax := cchTextMax;|0:|45: // Заполняем информацию о каждом заголовке.|30: for i := 0 to dwCount - 1 do|7: begin|0:|41: // Пишем в память удалённого процесса|57: if not WriteProcessMemory(hProcess, pHDItem, @HDItem,|57: SizeOf(HD_ITEM), dwWriten) then Exit;|0:|30: // Получаем итем заголовка|60: SendMessage(lvHeader, HDM_GETITEM, i, Longint(pHDItem));|0:|23: // Читаем заголовки|36: ZeroMemory(@svText, cchTextMax);|66: if not ReadProcessMemory(hProcess, HDItem.pszText, @svText[1],|54: cchTextMax, dwWriten) then Exit;|22: |30: // Выодим их из переменной|44: _hi_onEvent(onHeader,PChar(@svText[1]));|6: end;|0:|34: // Освобождаем выделенную память|51: VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);|51: VirtualFreeEx(hProcess, pHDItem, 0, MEM_RELEASE);|0:|33: // Закрываем описатель процесса|24: CloseHandle(hProcess);|4:end;|0:|0:|54:procedure THiAsmClass.GetListViewRow(ALVHandle: HWND);|5:const|17: cchTextMax=255;|3:var|20: hProcess: THandle;|21: dwProcessID: DWORD;|18: dwWriten: DWORD;|32: LVItemCount, dwCount: Integer;|29: i, j, nTextLength: Integer;|20: pLVItem: ^LV_ITEM;|18: LVItem: LV_ITEM;|17: pszText: PChar;|22: svText: ShortString;|14: sTmp:string;|17: lvHeader: HWND;|5:begin|29: if ALVHandle = 0 then Exit;|30: // Получаем количество строк|52: LVItemCount := ListView_GetItemCount(ALVHandle); |38: // Получаем хендл заголовка ListView|44: lvHeader := ListView_GetHeader(ALVHandle);|35: // Получаем количество заголовков|44: dwCount := Header_GetItemCount(lvHeader); |2: |62: // Получаем ID процесса, которому принадлежит найденное окно|19: dwProcessID := 0;|52: GetWindowThreadProcessId(ALVHandle, @dwProcessID);|24: if dwProcessID = 0 then|28: ExitProcess(GetLastError);|22: // Открываем процесс|16: hProcess := 0;|65: hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);|22: if hProcess = 0 then|28: ExitProcess(GetLastError);|47: // Выделяем в нем память под текстовый буффер|54: pszText := VirtualAllocEx(hProcess, nil, cchTextMax,|72: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|47: // Выделяем в нем память под структуру LVITEM|59: pLVItem := VirtualAllocEx(hProcess, nil, SizeOf(LV_ITEM),|81: MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|0:|24: // Заполняем структуру|39: ZeroMemory(@LVItem, SizeOf(LV_ITEM));|27: LVItem.mask := LVIF_TEXT;|28: LVItem.pszText := pszText;|34: LVItem.cchTextMax := cchTextMax;|0:|21: // Считываем строки|34: for i := 0 to LVItemCount - 1 do|7: begin|25: LVItem.iSubItem := 0;|44: // Пишем ее в память удаленного процесса|57: if not WriteProcessMemory(hProcess, pLVItem, @LVItem,|54: SizeOf(LV_ITEM), dwWriten) then Exit;|58: nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT,|52: i, Integer(pLVItem));|23: // Читаем результат|36: ZeroMemory(@svText, cchTextMax);|59: ReadProcessMemory(hProcess, LVItem.pszText, @svText[1],|46: nTextLength, dwWriten);|4: |35: sTmp := ''; |42: sTmp := PChar(@svText[1]); |0:|22: //Считываем столбцы|31: for j := 1 to dwCount - 1 do|9: begin|27: LVItem.iSubItem := j;|46: // Пишем ее в память удаленного процесса|59: if not WriteProcessMemory(hProcess, pLVItem, @LVItem,|69: SizeOf(LV_ITEM), dwWriten) then Exit;|60: nTextLength := SendMessage(ALVHandle, LVM_GETITEMTEXT,|54: i, Integer(pLVItem));|25: // Читаем результат|38: ZeroMemory(@svText, cchTextMax);|49: ReadProcessMemory(hProcess, LVItem.pszText,|59: @svText[1], nTextLength, dwWriten);|26: // добавляем столбцы|45: sTmp := sTmp + ';' + PChar(@svText[1]);|8: end;|29: _hi_onEvent(onRow, sTmp);|6: end;|0:|40: // Освобождаем ранее выделенную память|51: VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);|51: VirtualFreeEx(hProcess, pLVItem, 0, MEM_RELEASE);|33: // Закрываем описатель процесса|24: CloseHandle(hProcess);|4:end;|0:|4:end.|
link(onHeader,2614112:doAddColumn,[])
link(onRow,954867:doEvent1,[])
link(inHandle,14549411:Handle,[])
}
Add(For,11029555,77,91)
{
Start=1
End=100
link(onEvent,10677756:doString,[])
}
Add(FormatStr,10677756,126,91)
{
Mask="%1;%2"
link(onFString,14549411:doAdd,[])
link(Str2,15289948:Value,[])
}
Add(Button,8681122,126,154)
{
Top=215
Width=503
Align=2
link(onClick,2009082:doEvent1,[])
}
Add(Hub,954867,259,161)
{
link(onEvent1,2614112:doAdd,[(284,167)(284,139)])
link(onEvent2,16572225:doAdd,[(284,174)(284,181)])
}
Add(StringTable,2614112,294,133)
{
Top=235
Width=503
Height=269
Align=5
Columns=#1:1|1:2|1:3|1:4|1:5|
Point(Handle)
Point(doAddColumn)
}


Также выкладываю пример того, как можно получить эти данные зная только текст заголовка окна.
https://forum.hiasm.com/getfile/39205
Документация к ManagedWinapi.dll http://mwinapi.sourceforge.net/doc/index.html

Схема проверялась только на Window10(powershell-5.1)

Редактировалось 2 раз(а), последний 2021-01-20 08:32:44
карма: 15

0
файлы: 1read SysListView32.zip [46.5KB] [436]
Ответов: 6
Рейтинг: 0
#10: 2021-01-20 09:07:16 ЛС | профиль | цитата
Gunta писал(а):

Огромнейшее спасибо ! пример отлично справляется с моими нуждами.

Редактировалось 1 раз(а), последний 2021-01-20 09:07:56
карма: 0

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