习习,我也刚搞出来,准备进来给大家报喜,没想到pipi抢到前头了..<br>我的做法和pipi基本一致,共大家参考:<br><br>var hparent,hlist:hwnd;<br> Info: TLVFindInfo;<br> Index: Integer;<br>begin<br> hparent:=getparent(odlg.handle);<br> hlist:=findwindowex(hparent,0,'SHELLDLL_DefView',nil);<br> hlist:=findwindowex(hlist,0,'SysListView32',nil);<br><br> with Info do<br> begin<br> flags := LVFI_STRING or 0 or LVFI_WRAP;<br> psz := PChar('res.zip');<br> end;<br> Index := ListView_FindItem(hlist, 0, Info);<br><br> windows.setfocus(hlist); //给他设置焦点<br> ListView_EnsureVisible(Hlist, index div 5,false); //强制visible<br> ListView_SetItemState(Hlist, Index, LVIS_SELECTED+LVIS_FOCUSED, LVIS_SELECTED+LVIS_FOCUSED);<br><br> caption:=inttostr(index);<br>end;<br><br>不过现在还有几点疑问:<br>1.ListView_EnsureVisible(Hlist, index div 5,false); //强制visible<br> 这句话,必须把index div 5才有效,我猜是因为那个listview每列显示5行的缘故,<br> 那么我如何判断每列显示6,7...行的情况?<br> (不过这个问题如果困难就算了,因为好像opendialog初始化都是5行的
)<br><br>2.如果当前windows资源管理器设置"隐藏已知文件类型后缀名",那么"xxx.exe"<br> 在opendialog里面显示的是"xxx",这样用find就找不到了,请问怎样处理这种情况?