SysListView32 запись значений в чужом окне - C#
Формулировка задачи:
Здравствуйте! Ребята помогите пожалуйста с реализацией записи значений в колонки SysListView32 который находится в окне чужой программы. Перечитал много чего - перегуглил, переяндоксил и МСДНил однако рабочей реалиазии не добился, так что прошу меня в выше указанные вещи не отпровлять, а помочь примером именно на c# или пенками в нужную сторону с примерами ))).
Для чего надо:
на работе у коллег очень много однотипного ручного ввода причём дублирующего в нескольких программах, меня попросили написать программу которая этот бы самый ввод автоматизировала.Что есть:
упешно получаем дескрипторы нужных окон, контролов и заполняем их, жамкаем клавиши и т.д. (в не активном окне). Каких-либо проблем с получением дескриптора нужного SysListView32 нет.В чём нужна помощь:
После большой кучи операций ввода в сторонней программе появляется окно с SysListView32 в котором имеется 4 колонки и в которые в обязательном порядке нужно внести значения. Вот тут я и встал полностью, пробывал и через посылку сообщений, пробывал копашится в памяти но безуспешно. К своему стыду какой либо боле менее вразумительный код представить вам не могу поэтому прошу дать примерчик как записывать значения в колонки стороннего ListView и если не затруднит как считывать значения именно на c#.PS
с языком c# знаком всего менее месяца, ранее писал на паскале и PHP, приходится изучать и адаптироваться на лету, возможности сменить среду разработки нет из-за сурового отдела безопасности. Всех откликнувшихся заранее благодарю.Решение задачи: «SysListView32 запись значений в чужом окне»
textual
Листинг программы
procedure AddSomeString(AHandle:THandle); var vItem: TLVItemW; vPointer,vPointerText:Pointer; vNumberOfBytesRead,vProcessId: DWORD; vProcess: THandle; vBuffer: array[0..255] of Char; begin GetWindowThreadProcessId(AHandle, @vProcessId); vProcess := OpenProcess(PROCESS_ALL_ACCESS, False, vProcessId); vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); vPointerText := VirtualAllocEx(vProcess, nil,256,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE); vBuffer:='АСЕЕВА УЛ., 6'; with vItem do begin mask := LVIF_TEXT; iItem := 0; iSubItem := 0; cchTextMax := SizeOf(vBuffer); pszText := vPointerText; end; WriteProcessMemory(vProcess, vPointerText, @vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead); WriteProcessMemory(vProcess, vPointer, @vItem, SizeOf(TLVItemW), vNumberOfBytesRead); SendMessage(AHandle, LVM_INSERTITEM, 0, lparam(vPointer)); SendMessage(AHandle, LVM_SETITEMTEXT, wParam(i), lparam(vPointer)); VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE); VirtualFreeEx(vProcess, vPointerText, 0, MEM_RELEASE); CloseHandle(vProcess); end;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д