关于SendMessage向listview发送消息,改变图标排列方式的问题。

时间:2021-10-04 19:45:15
由于某种原因,我需要向“我的电脑”窗口中发送SendMessage消息,动态改变文件夹视图的“缩略图”“平铺”“图标”“列表”“详细信息”的状态。

现在已经准确的得到了我的电脑窗口的hwnd,只差如何发送消息改变视图模式了。
搜索了下网路上的资料,使用:SendMessage hWindow, WM_COMMAND, List, 0后没有任何反应...(意料之中)

再次搜索了网上,找到几篇有用的资料,无奈不会VC。。。看不懂。。。高手们请帮忙啦!非常感谢!

参考资料:
http://www.vckbase.com/document/viewdoc/?id=1023#cppqa1
当然,在 Windows 中总是有办法的。当我第一次看你的问题时,我想那很容易。只要在 WM_INITDIALOG 消息处理函数中获取列表视图

http://203.208.37.104/search?q=cache:LenWPrdBvWgJ:www.codeproject.com/KB/dialog/FileDialogExtender.aspx+vb+0x702b&hl=zh-CN&ct=clnk&cd=2&gl=cn&st_usg=ALhdy2_KMfeD8LvZ43LaJjcrIQd5ZMnUSQ
老外的FileDialogExtender

6 个解决方案

#1


去网上查查LISTVIEW 里消息的常数值

#2


查了。没有需要的资料。。。。或许是我搜索的不到位?

#3


刚才我试了一下.

用C#里面伴水的方法,我改为VB后试了一下.

效果不理想.

只是 list 属性可以.其它的都不理想.


Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long


Private  const  GWL_STYLE = -16

Private  const  LVS_ICON = 0
Private  const  LVS_REPORT = 1
Private  const  LVS_SMALLICON = 2
Private  const  LVS_LIST = 3
Private  const  LVS_TYPEMASK = 3

private Styles as long 


Private Sub Command1_Click()
  styles = GetWindowLong(handle, GWL_STYLE) 'handle 是 我的电脑 里面 那个 List 的句柄,不是窗口的句柄
    Styles = styles and LVS_TYPEMASK
    styles = styles or LVS_ICON
    SetWindowLong handle, GWL_STYLE, styles
End Sub

#4


引用 3 楼 fvflove 的回复:
刚才我试了一下. 

用C#里面伴水的方法,我改为VB后试了一下. 

效果不理想. 

只是 list 属性可以.其它的都不理想. 


VB code
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long)…


所有图标消失

#5


引用楼主 immsky 的帖子:
 
搜索了下网路上的资料,使用:SendMessage hWindow, WM_COMMAND, List, 0后没有任何反应...(意料之中) 


你的hWindow是什么窗口的句柄,list的值又是什么?

通常而言,应该这样:
hWindow=FindWindow(vbNullString, "我的电脑")

SendMessage hWindow, WM_COMMAND, &H702B, 0'List

Command ID (WPARAM)            List View Mode 
&H7029                          Icons 
&H702B                          List 
&H702C                          Details 
&H702D                          Thumbnails 
&H702E                          Tiles 


#6


接到你的求助,msdn有例子,参照一下呢
    Styles = styles and LVS_TYPEMASK
    styles = styles or LVS_ICON
这样不可以的。
应该按位& 或者 取反

#1


去网上查查LISTVIEW 里消息的常数值

#2


查了。没有需要的资料。。。。或许是我搜索的不到位?

#3


刚才我试了一下.

用C#里面伴水的方法,我改为VB后试了一下.

效果不理想.

只是 list 属性可以.其它的都不理想.


Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long


Private  const  GWL_STYLE = -16

Private  const  LVS_ICON = 0
Private  const  LVS_REPORT = 1
Private  const  LVS_SMALLICON = 2
Private  const  LVS_LIST = 3
Private  const  LVS_TYPEMASK = 3

private Styles as long 


Private Sub Command1_Click()
  styles = GetWindowLong(handle, GWL_STYLE) 'handle 是 我的电脑 里面 那个 List 的句柄,不是窗口的句柄
    Styles = styles and LVS_TYPEMASK
    styles = styles or LVS_ICON
    SetWindowLong handle, GWL_STYLE, styles
End Sub

#4


引用 3 楼 fvflove 的回复:
刚才我试了一下. 

用C#里面伴水的方法,我改为VB后试了一下. 

效果不理想. 

只是 list 属性可以.其它的都不理想. 


VB code
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long)…


所有图标消失

#5


引用楼主 immsky 的帖子:
 
搜索了下网路上的资料,使用:SendMessage hWindow, WM_COMMAND, List, 0后没有任何反应...(意料之中) 


你的hWindow是什么窗口的句柄,list的值又是什么?

通常而言,应该这样:
hWindow=FindWindow(vbNullString, "我的电脑")

SendMessage hWindow, WM_COMMAND, &H702B, 0'List

Command ID (WPARAM)            List View Mode 
&H7029                          Icons 
&H702B                          List 
&H702C                          Details 
&H702D                          Thumbnails 
&H702E                          Tiles 


#6


接到你的求助,msdn有例子,参照一下呢
    Styles = styles and LVS_TYPEMASK
    styles = styles or LVS_ICON
这样不可以的。
应该按位& 或者 取反