Page 4 of 4

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 04 Dec 2020, 00:21
by rakesha002
just me wrote:
03 Dec 2020, 04:16
3. some times the gui (which is another process) ...
LV_EX functions are not designed to work with controls in other processes. All functions using structures like LVITEM need to allocate memory in the address space of the other process to work properly.
hi,
just me, thanks for the clarification, i understood most of what you said, which is almost impossible
but ExtListView lib "Cyruz" seems to get item text, gave me hope, i thought same way i could set text (LVM_SETITEMTEXT) ....?

"Text := ExtListView_GetItemText(this.JLV, A_Index - 1, nCol)"

if possible may be some one could help me writing "LVM_SETITEMTEXT" function. i can't do it on my own (consider me as noob in LVITEM and dll calls), please help me
thanks in advance.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 04 Dec 2020, 04:15
by just me
I'll check what I can do for you. But since it's not related to LV_EX open a new thread in 'Ask For Help', please.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 04 Dec 2020, 05:39
by rakesha002
hi,
just me

"I'll check what I can do for you."
thank you for trying

"But since it's not related to LV_EX open a new thread in 'Ask For Help',"
i'll wait till the next update from you and then ill ask for help.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 04 Dec 2020, 05:54
by just me
Open a new thread please.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 13 Feb 2021, 10:44
by hasantr
Clicking on the group title selects all rows in the group. Can't we set it to Expand or collapse the group instead?
Clicking on the group title expands or collapses the open group.
Any idea.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 13 Feb 2021, 12:17
by just me
It might be feasible if you monitor the list view's notifications (WM_NOTIFY) and use the LV_EX_Group(Get/Set)State() functions. Maybe you need to subclass the control.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 27 Nov 2021, 17:26
by dd900
Is it possible to change the header text of an existing group?
and
Is there a way to get the number of items in a group?

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 28 Nov 2021, 06:05
by just me
There are LVM_GETGROUPINFO and LVM_SETGROUPINFO messages which might be used to get/set the information.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 02 Dec 2021, 19:48
by dd900
just me wrote:
28 Nov 2021, 06:05
There are LVM_GETGROUPINFO and LVM_SETGROUPINFO messages which might be used to get/set the information.
Changing the Header was pretty straight forward

Code: Select all

LV_GroupSetHeader(HLV, gId, sHeader)
{
    ; LVGF_HEADER := 0x1
    ; LVM_SETGROUPINFO := 0x1093
    
    LVG_Size := (A_PtrSize * 6) + (17 * 4)
    , VarSetCapacity(LVG, LVG_Size, 0)      ; struct LVGROUP
    , NumPut(LVG_Size, LVG, 0, "UInt")       ; cbSize
    , NumPut(0x1, LVG, 4, "UInt")            ; Mask
    , NumPut(&sHeader, LVG, 8, "Ptr")       ; pszHeader
    SendMessage, 0x1093, % gId, % &LVG, , % "ahk_id " . HLV
}
I am unsure of how to get UINT cItems; using LVM_GETGROUPINFO
Assuming 64bit I calculated the offset to be 108 is this correct?

Code: Select all

typedef struct tagLVGROUP {		;Offset
  UINT   cbSize;				0
  UINT   mask;					4
  LPWSTR pszHeader;				8
  int    cchHeader;				16
  LPWSTR pszFooter;				20
  int    cchFooter;				28
  int    iGroupId;				36
  UINT   stateMask;				40
  UINT   state;					44
  UINT   uAlign;				48
  LPWSTR pszSubtitle;			52
  UINT   cchSubtitle;			56
  LPWSTR pszTask;				60
  UINT   cchTask;				64
  LPWSTR pszDescriptionTop;		68
  UINT   cchDescriptionTop;		72
  LPWSTR pszDescriptionBottom;	76
  UINT   cchDescriptionBottom;	80
  int    iTitleImage;			88
  int    iExtendedImage;		96
  int    iFirstItem;			104
  UINT   cItems;				108
  LPWSTR pszSubsetTitle;		112
  UINT   cchSubsetTitle;		116
} LVGROUP, *PLVGROUP;
At this point Im stuck. This does not work

Code: Select all

LV_GetGroupItems(HLV, gId)
{
    ; LVM_GETGROUPINFO := 0x1095
    ; LVGF_ITEMS := 0x4000
    
    Static cItemsOffset := (A_PtrSize * 6) + (15 * 4)
    
    LVG_Size := (A_PtrSize * 6) + (17 * 4)
    , VarSetCapacity(LVG, LVG_Size, 0)            ; struct LVGROUP
    , NumPut(LVG_Size, LVG, 0, "UInt")            ; cbSize
    , NumPut(0x4000, LVG, 4, "UInt")           ; Mask
    SendMessage, 0x1095, % gId, % &LVG, , % "ahk_id " . HLV
    return NumGet(LGV, cItemsOffset, "UInt")
}

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 03 Dec 2021, 05:44
by just me
@dd900,

you need to consider the 64-bit default alignment. 64-bit pointers must start at an offset which is a multiple of 8 by default. So the following might be correct:

Code: Select all

typedef struct tagLVGROUP                 Type     Off32    Off64
{
    UINT    cbSize;                       UInt     0        0
    UINT    mask;                         UInt     4        4
    LPWSTR  pszHeader;                    Ptr      8        8
    int     cchHeader;                    Int      12       16
                                          *P64              20  (4)
    LPWSTR  pszFooter;                    Ptr      16       24
    int     cchFooter;                    Int      20       32
    int     iGroupId;                     Int      24       36
    UINT    stateMask;                    UInt     28       40
    UINT    state;                        UInt     32       44
    UINT    uAlign;                       UInt     36       48
                                          *P64              52  (4)
    LPWSTR  pszSubtitle;                  Ptr      40       56
    UINT    cchSubtitle;                  UInt     44       64
                                          *P64              68  (4)
    LPWSTR  pszTask;                      Ptr      48       72
    UINT    cchTask;                      UInt     52       80
                                          *P64              52  (4)
    LPWSTR  pszDescriptionTop;            Ptr      56       88
    UINT    cchDescriptionTop;            UInt     60       96
                                          *P64              100 (4)
    LPWSTR  pszDescriptionBottom;         Ptr      64       104
    UINT    cchDescriptionBottom;         UInt     68       112
    int     iTitleImage;                  Int      72       116
    int     iExtendedImage;               Int      76       120
    int     iFirstItem;                   Int      80       124          // Read only
    UINT    cItems;                       UInt     84       128          // Read only
                                          *P64              132 (4)
    LPWSTR  pszSubsetTitle;               Ptr      88       136          // NULL if group is not subset
    UINT    cchSubsetTitle;               UInt     92       144
                                          *P64              148 (4)

                                                   96       152
} LVGROUP, *PLVGROUP;

*P64: 64-bit padding

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 28 Dec 2021, 15:34
by dd900
@just me

Thanks for the help. Here are the two working functions

Code: Select all

LV_GetGroupItemsCount(HLV, gId)
{
    static LVM_GETGROUPINFO := 0x1095
         , LVGF_ITEMS := 0x4000
    
    cItemsOffset := A_PtrSize = 8 ? 128 : 84
    , LVG_Size := A_PtrSize = 8 ? 152 : 96
    , VarSetCapacity(LVGROUP, LVG_Size, 0)
    , NumPut(LVG_Size, LVGROUP, 0, "UInt")
    , NumPut(LVGF_ITEMS, LVGROUP, 4, "UInt")
    SendMessage, % LVM_GETGROUPINFO, % gId, % &LVGROUP,, % "ahk_id " HLV
    return NumGet(LVGROUP, cItemsOffset, "UInt")
}

Code: Select all

LV_GroupSetHeader(HLV, gId, sHeader)
{
    static LVGF_HEADER := 0x1
         , LVM_SETGROUPINFO := 0x1093
    
    LVG_Size := A_PtrSize = 8 ? 152 : 96
    , VarSetCapacity(LVGROUP, LVG_Size, 0)      ; struct LVGROUP
    , NumPut(LVG_Size, LVGROUP, 0, "UInt")       ; cbSize
    , NumPut(LVGF_HEADER, LVGROUP, 4, "UInt")            ; Mask
    , NumPut(&sHeader, LVGROUP, 8, "Ptr")       ; pszHeader
    SendMessage, LVM_SETGROUPINFO, % gId, % &LVGROUP,, % "ahk_id " HLV
}

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 27 Jan 2023, 09:57
by CyberKlabauter
Do you have any plans to update the lib to v2? It is such a great basic lib.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 27 Jan 2023, 10:53
by just me
@CyberKlabauter,

you'll find many of the functions in ListViewExtensions written for AHK v2.0-beta.1. I didn't try as yet whether all is running well with AHK v2.0.0+.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 28 Jan 2023, 08:35
by CyberKlabauter
you'll find many of the functions in ListViewExtensions written for AHK v2.0-beta.1. I didn't try as yet whether all is running well with AHK v2.0.0+.
[Mod edit: Fixed quote tags.]

Thanks for the hint! I missed this. I think I will start converting my script and see how far I get.

Re: [LIB] LV_EX - update on 2016-04-28

Posted: 11 Feb 2024, 11:06
by lmstearn
Wrong thread, sorry.