Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.15;
Скачать: CL | DM;

Вниз

Управление SysListView32 другого приложения   Найти похожие ветки 

 
blacksus   (2008-03-26 07:35) [0]

Доброго времени суток всем! Такая проблема, пытаюсь программно кликнуть по колонке в ListView проводника. Почему-то сообщение не срабатывает, кто сможет помочь хоть чем заранее спасибо!


function GetListViewHandle: THandle; //функция работает только на XP
begin
 Result := FindWindow("CabinetWClass", PAnsiChar(Form1.Edit1.Text)); // в edit1.text заранее вписать заголовок окна проводника
 if Result = 0 then
   raise Exception.Create("Не найден CabinetWClass");
 Result := FindWindowEx(Result, 0, "SHELLDLL_DefView", nil);
 if Result = 0 then
   raise Exception.Create("Не найден SHELLDLL_DefView");
 Result := FindWindowEx(Result, 0, "DUIViewWndClassName", nil);
 if Result = 0 then
   raise Exception.Create("Не найден DUIViewWndClassName");
 Result := FindWindowEx(Result, 0, "DirectUIHWND", nil);
 if Result = 0 then
   raise Exception.Create("Не найден DirectUIHWND");
 Result := FindWindowEx(Result, 0, "CtrlNotifySink", nil);
 if Result = 0 then
   raise Exception.Create("Не найден CtrlNotifySink");
 Result := FindWindowEx(Result, 0, "SysListView32", nil);
 if Result = 0 then
   raise Exception.Create("Не найден SysListView32");
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 _temp: PNMLISTVIEW;
 temp: TNMLISTVIEW;
 pid: longint;
 proc, Wind: HWND;
 null: cardinal;
begin
 Wind := GetListViewHandle;
 SendMessage(Wind, 4238, 1, 0); //установка вида "таблица"
 GetWindowThreadProcessId(Wind, @pid);
 proc := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or
                     PROCESS_VM_WRITE or PROCESS_QUERY_INFORMATION, FALSE, pid);
 try
   _temp := VirtualAllocEx(proc, nil, SizeOf(TNMLISTVIEW), MEM_COMMIT, PAGE_READWRITE);
   null := 0;
   FillChar(temp, SizeOf(temp), 0);
   temp.iItem := -1;
   temp.iSubItem := 1;
   WriteProcessMemory(proc, _temp, @temp, SizeOf(TNMLISTVIEW), null);
   SendMessage(Wind, WM_NOTIFY, LVN_COLUMNCLICK, lParam(_Temp)); //!!!вот это сообщение не срабатывает!!!
 finally
   VirtualFreeEx(proc, _temp, 0, MEM_RELEASE);
 end;
end;


 
han_malign ©   (2008-03-26 09:47) [1]

WM_NOTIFY - шлется контролом родительскому окну...


 
han_malign ©   (2008-03-26 09:53) [2]

к тому же заполняется NMHDR и wParam - отнюдь не LVN_COLUMNCLICK - а идентификатор контрола


 
blacksus   (2008-03-26 11:31) [3]

Тогда у меня 2 вопроса:
1. Реально ли вообще послать сообщение для клика из моего приложения родительскому окну, или это не сработает?
2. Непонятно, зачем тогда вообще существует LVN_COLUMNCLICK?


 
Leonid Troyanovsky ©   (2008-03-28 22:51) [4]


> blacksus   (26.03.08 11:31) [3]

> 2. Непонятно, зачем тогда вообще существует LVN_COLUMNCLICK?

Notifies a list-view control"s parent window that a column was clicked.

Можно даже уяснить, что этот парент есть некоторое окно проводника.

--
КRegards, LVT.


 
blacksus   (2008-03-29 11:21) [5]

Большое спасибо. Тем не менее проблема все еще висит. Может кто подскажет, что я не правильно в этом коде:

var
 _temp: PNMHDR;
 temp: TNMHDR;
begin
 Wind := GetListViewHandle;
 GetWindowThreadProcessId(Wind, @pid);
 proc := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or
                     PROCESS_VM_WRITE or PROCESS_QUERY_INFORMATION, FALSE, pid);
 _temp := VirtualAllocEx(proc, nil, SizeOf(TNMHDR), MEM_COMMIT, PAGE_READWRITE);
 null := 0;
 temp.hwndFrom := GetListViewHandle;
 temp.idFrom := 0;
 Wind := GetListViewOwnerHandle;
 temp.code := LVN_COLUMNCLICK;
 WriteProcessMemory(proc, _temp, @temp, SizeOf(TNMHDR), null);
 SendMessage(Wind, WM_NOTIFY, wParam(0), lParam(_Temp));



Страницы: 1 вся ветка

Текущий архив: 2009.03.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
15-1231582957
saNat
2009-01-10 13:22
2009.03.15
Требуется помощь в настройке Internet-шлюза


2-1232983616
Мишаняя
2009-01-26 18:26
2009.03.15
Открыть в проводнике


15-1231620194
Hpb
2009-01-10 23:43
2009.03.15
Какие есть компоненты для оптического распознавания текста?


15-1231919578
Анна
2009-01-14 10:52
2009.03.15
Отсутствие палитры компонентов в Delphi7


10-1153497317
TStas
2006-07-21 19:55
2009.03.15
Как добраться до колонтитула в Ворде?