| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1399 人关注过本帖
标题:关于setwindowlong的一个小问题!!
只看楼主 加入收藏
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
 问题点数:0 回复次数:7 
关于setwindowlong的一个小问题!!
请问为什么用下面用法,不能出现预期效果:
SetWindowLong GetDesktopWindow(),GWL_WNDPROC,AddressOf WndProc

本意是想获取桌面窗体的句柄,做个简单的钩子,没想到没效果。。。这是为什么???

[此贴子已经被作者于2007-8-25 9:31:59编辑过]

搜索更多相关主题的帖子: 效果 句柄 AddressOf GWL WNDPROC 
2007-08-24 18:54
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 

吓,怎么没人来冒泡下。。。

自己UP一个~~~~


偶学编程,也许本身就是一个错。。。
2007-08-25 09:22
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
你之前说SetWindowPos

完整的代码呢?

快上课了……
2007-08-25 10:19
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 

昨天打字的时候没太注意,今早一起来看才发现打错了,马上改了过来

这只是一个试验代码:
form1中:
Private Sub Command1_Click()
oldProc = SetWindowLong(GetDesktopWindow(), GWL_WNDPROC, AddressOf WinProc)
End Sub

Private Sub Command2_Click()
SetWindowLong GetDesktopWindow(), GWL_WNDPROC, oldProc
End Sub

Private Sub Command3_Click()
Text1.Text = Flag
End Sub

Private Sub Form_Load()
Flag = True
End Sub

模块中:
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long

Public Const GWL_WNDPROC = (-4)

Public Flag As Boolean
Public oldProc As Long

Public Function WinProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Flag = False
WinProc = CallWindowProc(oldProc, hWnd, Msg, wParam, lParam)
End Function

本意是向桌面发出信息后,改变Flag的取值,没想到Flag的值都没变!


偶学编程,也许本身就是一个错。。。
2007-08-25 12:33
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
oldProc返回值是0……

觉得可能是桌面的特殊性?

快上课了……
2007-08-25 12:53
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
我也是这么猜的,不过找不到任何资料~~~~~`

偶学编程,也许本身就是一个错。。。
2007-08-25 13:00
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
以下是引用slore在2007-8-25 12:53:16的发言:
oldProc返回值是0……

觉得可能是桌面的特殊性?

代表调用失败


VB QQ群:47715789
2007-08-25 14:02
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
难道是说桌面窗口的消息处理函数不能被更改???

偶学编程,也许本身就是一个错。。。
2007-08-25 17:12
快速回复:关于setwindowlong的一个小问题!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012178 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved