GetWindowLong()和SetWindowLong()的问题,VB打印控制问题和禁止右键功能?

GetWindowLong()和SetWindowLong()的问题



1、GetWindowLong()和SetWindowLong()的问题

我给你举个例子8 函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。   函数原型:LONG GetWindowLong(HWND hWnd,int nlndex);   参数:   hWnd:窗口句柄及间接给出的窗口所属的窗口类。   nlndex:指定要检索的基于0的的偏移量。有效值的范围从0到窗口额外内存空间的字节数,最小为4。例如,若指定了12位或多于12位的窗体类的额外存储空间,则应设为第3个32位整数的索引位8。要获得任意其他值,指定下列值之1:   GWL_EXSTYLE;获得扩展窗口风格。   GWL_STYLE:获得窗口风格。   GWL_WNDPROC:获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用GWL_WNDPROC函数调用窗口过程。   GWL_HINSTANCE:获得应用事例的句柄。   GWL_HWNDPAAENT:如果父窗口存在,获得父窗口句柄。   GWL_ID:获得窗口标识。   GWL_USERDATA:获得与窗口有关的32位值。每1个窗口均有1个与这个窗口相关的给用户使用的32位的数据。具体用途自定义。   在hWnd参数标识了1个对话框时也可用下列值:   DWL_DLGPROC:获得对话框过程的地址,或1个代表对话框过程的地址的句柄。必须使用函数CallWindowProc来调用对话框过程。   DWL_MSGRESULT:获得在对话框过程中1个消息处理的返回值。   DWL_USER:获得应用程序私有的额外信息,例如1个句柄或指针。   返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值是0。若想获得更多错误信息请调用 GetLastError函数。   备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbWndExtra单元指定为1个非0值来保留额外类的存储空间。   Windows CE:nlndex参数指定的字节偏移量必须为 4的倍数。不支持 unaligmned access。   Windows CE:不支持在参数nlndex中设定的GWL_HINSTANCE和GWL_HWNDPARENT。   Windows CE1.0也不支持在 nlndex参数中的 DWL_DLGPROC和 GWL_USERDATA。   速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0对以上版本;头文件:winuser.h;库文件:user32.lib;在Windows NT上实现为Unicode和ANSI两种版本。 答案补充 函数原型 LONG SetWindowLong(hwnd,nIndex,lNewLong) HWND hwnd; /* handle of window */ int nIndex; /* offset of value to set */ LONG lNewLong; /* new value */ 函数说明 SetWindowLong函数修改给定窗口的1个属性。该函数还在给定窗口的附加窗口内存中 的指定偏移量处设置1个32位(长)值。 参数详解 hwnd 标识窗口,并且间接标只出该窗口的属的窗口类。 nIndex 指定1个距离要设置的值的以0为基值的偏移量。有效的偏移量范围最小为0,最大为附 加窗口内存的总字节数减为4,注:整数为4个字节;例如:若附加内存被指定为12个或 更多个字节,值8将是第3个长整数的索引值。要设置其它值,则应指定下列值之1: 值 动 作 答案补充 GWL_EXSTYLE 设置新的扩展窗口风格。 GWL_STYLE 设置新的窗口风格 GWL_WNDPROC 为窗口过程设置新地址。 GWL_HINSTANCE 设置1个新的应用程序的实例句柄。 GWL_ID 设置1人新的窗口标识符。 GWL_USERDATA 设置与窗口相联系的长值。每个窗口都有1个供创建它的应用 程序使用的与之对应的长值。 当hwnd标识1个对话框时,还可使用下列值: 值 含 义 DWL_DLGPROC 设置对话框过程的新地址。 DWL_MSGRESULT 设置对话框过程所处理的消息的返回值。 DWL_USER 设置对应用程序来说是私有的新的附加信息:如句柄或打印机 。 lNewLong 指定该替换值。 返回值 若函数成功,返回值是指定的32位整数的原值;否则,返回值为0。使用GetLastError 函数可获取补充的错误信息。 答案补充 注释 若使用SetWindowLong函数和GWL_WNDPROC索引替换窗口过程,则给定的窗口过程必须遵 循WindowProc回调函数的说明中指定的准则。 使用GWL_WNDPROC索引调用SetWindowLong函数可创建该窗口类的子类(窗口类用来创建窗 口)。应用程序不得用另1个过程的窗口产生子类。 使用RegisterClass函数,并将WNDCLASS结构的cbWndExtra成员指定为1个非0值,便可 保留附加窗口内存。 不得将SetWindowLong与GWL_HWNDPARENT索引1起使用来改变1个子窗口的父窗口。要 改变子窗口的父窗口,应使用SetParent函数。



2、VB打印控制问题和禁止右键功能?

屏蔽文本框的右键菜单,曾经看到1个程序是这样做的: Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Text1.Enabled = False Text1.Enabled = True PopupMenu yourmenu End Sub 这当然是个简单的实现方法,但作为1个以api为主题的网站,我在此想介绍1种用api函数来实现的方法,并想谈的深入1些。 首先,谈谈消息和窗口函数。在Windows里,消息有两方面的用途:首先,它们由Windows传给窗口函数,指出发生了1个特定的事件。比如用户单击了鼠标,或者按下了键盘上的某个键。消息也可由Windows用于通告发生了1个内部事件,比如输入焦点的变更。另外,可将消息作为Windows的1种命令使用。这种命令用于通知1个窗口执行特定的任务。其次,通常可将消息传给1个控件或窗口,请求它执行特定的操作。而每个窗口都有1个窗口函数,它的作用是对消息进行处理。该函数就象1个特殊的VB程序,其中包含了对事件进行处理的代码。 对于右击文本框,首先是产生1条 WM_CONTEXTMENU 消息,该消息被文本框的窗口函数接收,就会弹出默认的菜单。所以,我的思路是:接收所有的文本框消息,如果消息为 WM_CONTEXTMENU ,那么弹出自定义菜单,否则,把消息传递给默认的窗口函数由它处理。 如何接收消息?1个方法是,用 AddressOf 关键字,它可以把1个自定义模块的地址变为窗口函数的地址。这样,窗口函数就成了你的自定义模块了。而消息仍然传递到原先窗口函数的地址(这时,这个地址指向的窗口函数已经是你的自定义模块) 现在就看看是如何实现的吧。首先建议你看看VB联机手册关于 AddressOf 的帮助。程序需要1个窗体、窗体中有1个文本框,以及1个标准模块。 标准模块的代码: Option Explicit Public OldWindowProc As Long ' 保存默认的窗口函数的地址 Public Const WM_CONTEXTMENU = &H7B ' 当右击文本框时,产生这条消息 Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex 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 Private 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 Function SubClass1_WndMessage(ByVal hWnd As OLE_HANDLE, ByVal Msg As OLE_HANDLE, ByVal wp As OLE_HANDLE, ByVal lp As Long) As Long If Msg <> WM_CONTEXTMENU Then SubClass1_WndMessage = CallWindowProc(OldWindowProc, hWnd, Msg, wp, lp) ' 如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理 Exit Function End If SubClass1_WndMessage = True End Function 窗体的代码: Option Explicit Private Const GWL_WNDPROC = (-4) Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Exit Sub OldWindowProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC) ' 取得窗口函数的地址 Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage) ' 用SubClass1_WndMessage代替窗口函数处理消息 End Sub Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Exit Sub Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, OldWindowProc) ' 恢复窗口的默认函数 PopupMenu usermenu ' 弹出自定义菜单 End Sub 运行这个程序,右键菜单已被自定义菜单取代,不会出现两个菜单的情况。关于这个程序,你可以在例程中下载它,实现的功能比这里的要完整。最后要说明的是,尽量不要使用 AddressOf 来改变1个窗口的默认窗口函数,它可能引起不可预料的后果。在VB的联机手册里也是这样建议的,我在编这个程序时,死过几次机,其中1次,搞的我的Windows的“开始”菜单没有反应。



3、大家讲讲SetWindowLong()的作用???

函数原型 LONG SetWindowLong(hwnd,nIndex,lNewLong) HWND hwnd; /* handle of window */ int nIndex; /* offset of value to set */ LONG lNewLong; /* new value */ 函数说明 SetWindowLong函数修改给定窗口的1个属性。该函数还在给定窗口的附加窗口内存中 的指定偏移量处设置1个32位(长)值。 参数详解 hwnd 标识窗口,并且间接标只出该窗口的属的窗口类。 nIndex 指定1个距离要设置的值的以0为基值的偏移量。有效的偏移量范围最小为0,最大为附 加窗口内存的总字节数减为4,注:整数为4个字节;例如:若附加内存被指定为12个或 更多个字节,值8将是第3个长整数的索引值。要设置其它值,则应指定下列值之1: 值 动 作 ============================================================================ GWL_EXSTYLE 设置新的扩展窗口风格。 GWL_STYLE 设置新的窗口风格 GWL_WNDPROC 为窗口过程设置新地址。 GWL_HINSTANCE 设置1个新的应用程序的实例句柄。 GWL_ID 设置1人新的窗口标识符。 GWL_USERDATA 设置与窗口相联系的长值。每个窗口都有1个供创建它的应用 程序使用的与之对应的长值。 当hwnd标识1个对话框时,还可使用下列值: 值 含 义 ============================================================================ DWL_DLGPROC 设置对话框过程的新地址。 DWL_MSGRESULT 设置对话框过程所处理的消息的返回值。 DWL_USER 设置对应用程序来说是私有的新的附加信息:如团搏句柄或打印机 。 lNewLong 指定该替换值。 返回值 若函数成功,返回值是指定的32位整数的原值;否则,返回值为0。使用GetLastError 函数可获取补充的错误信息。 注释 若使用SetWindowLong函数和GWL_WNDPROC索引替换窗口过程,则给定的窗口过程必须遵 循WindowProc回调函数的说明中指定的准则。 使用GWL_WNDPROC索引调用SetWindowLong函数可创建该窗口类的子类(窗口类用来创建窗 口)。应用程序不得用另1个过程的窗口产生子类。 使用RegisterClass函数,并将WNDCLASS结构的cbWndExtra成员指定为1个非0值,便可 保留附加窗口内存。 不得将SetWindowLong与GWL_HWNDPARENT索引1起使用来改变1个子窗口的父窗口。塌升祥要 改变子窗口的父窗口,应使用SetParent函数笑明。



4、gwl打印机pr70怎么还原出厂设置?

打印机恢复出厂设置的步骤:

1、关闭电源.;

2、同时按住操作面板上的Station1和Station2键不放, 再打开电源, 直到打印机初始化动作完成才松手 ;

3、在进纸槽中插入1张A4规格的纸;

4、打印机开始吸纸, 并打印出两行提示信息;

5、按Local键1次, 打印机进入设置状态;

6、若按Station1键, 认可并保存参数; 若按Station2键, 更改参数, 直到将需要更改或设置的参数设置完毕;

7、参数更改完毕后, 按Local键1次, 再按Station1键1次, 听到打印机发出两声清脆的鸣叫后, 关机。



5、SetWindowLong中参数注解?

SetWindowLong Unicode   函数原型   LONG SetWindowLong(hwnd,nIndex,lNewLong)   HWND hwnd; /* handle of window */   int nIndex; /* offset of value to set */   LONG lNewLong; /* new value */   函数说明   SetWindowLong函数修改给定窗口的1个属性。该函数还在给定窗口的附加窗口内存中   的指定偏移量处设置1个32位(长)值。   参数详解   hwnd   标识窗口,并且间接标只出该窗口的属的窗口类。   nIndex   指定1个距离要设置的值的以0为基值的偏移量。有效的偏移量范围最小为0,最大为附   加窗口内存的总字节数减为4,注:整数为4个字节;例如:若附加内存被指定为12个或   更多个字节,值8将是第3个长整数的索引值。要设置其它值,则应指定下列值之1:   值 动 作   ============================================================================   GWL_EXSTYLE 设置新的扩展窗口风格。   GWL_STYLE 设置新的窗口风格   GWL_WNDPROC 为窗口过程设置新地址。   GWL_HINSTANCE 设置1个新的应用程序的实例句柄。   GWL_ID 设置1人新的窗口标识符。   GWL_USERDATA 设置与窗口相联系的长值。每个窗口都有1个供创建它的应用   程序使用的与之对应的长值。   当hwnd标识1个对话框时,还可使用下列值:   值 含 义   ============================================================================   DWL_DLGPROC 设置对话框过程的新地址。   DWL_MSGRESULT 设置对话框过程所处理的消息的返回值。   DWL_USER 设置对应用程序来说是私有的新的附加信息:如句柄或打印机   。   lNewLong   指定该替换值。   返回值   若函数成功,返回值是指定的32位整数的原值;否则,返回值为0。使用GetLastError   函数可获取补充的错误信息。   注释   若使用SetWindowLong函数和GWL_WNDPROC索引替换窗口过程,则给定的窗口过程必须遵   循WindowProc回调函数的说明中指定的准则。   使用GWL_WNDPROC索引调用SetWindowLong函数可创建该窗口类的子类(窗口类用来创建窗   口)。应用程序不得用另1个过程的窗口产生子类。   使用RegisterClass函数,并将WNDCLASS结构的cbWndExtra成员指定为1个非0值,便可   保留附加窗口内存。   不得将SetWindowLong与GWL_HWNDPARENT索引1起使用来改变1个子窗口的父窗口。要   改变子窗口的父窗口,应使用SetParent函数。



6、大家讲讲SetWindowLong()的作用???

函数原型 LONG SetWindowLong(hwnd,nIndex,lNewLong) HWND hwnd; /* handle of window */ int nIndex; /* offset of value to set */ LONG lNewLong; /* new value */ 函数说明 SetWindowLong函数修改给定窗口的1个属性。该函数还在给定窗口的附加窗口内存中 的指定偏移量处设置1个32位(长)值。 参数详解 hwnd 标识窗口,并且间接标只出该窗口的属的窗口类。 nIndex 指定1个距离要设置的值的以0为基值的偏移量。有效的偏移量范围最小为0,最大为附 加窗口内存的总字节数减为4,注:整数为4个字节;例如:若附加内存被指定为12个或 更多个字节,值8将是第3个长整数的索引值。要设置其它值,则应指定下列值之1: 值 动 作 ============================================================================ GWL_EXSTYLE 设置新的扩展窗口风格。 GWL_STYLE 设置新的窗口风格 GWL_WNDPROC 为窗口过程设置新地址。 GWL_HINSTANCE 设置1个新的应用程序的实例句柄。 GWL_ID 设置1人新的窗口标识符。 GWL_USERDATA 设置与窗口相联系的长值。每个窗口都有1个供创建它的应用 程序使用的与之对应的长值。 当hwnd标识1个对话框时,还可使用下列值: 值 含 义 ============================================================================ DWL_DLGPROC 设置对话框过程的新地址。 DWL_MSGRESULT 设置对话框过程所处理的消息的返回值。 DWL_USER 设置对应用程序来说是私有的新的附加信息:如团搏句柄或打印机 。 lNewLong 指定该替换值。 返回值 若函数成功,返回值是指定的32位整数的原值;否则,返回值为0。使用GetLastError 函数可获取补充的错误信息。 注释 若使用SetWindowLong函数和GWL_WNDPROC索引替换窗口过程,则给定的窗口过程必须遵 循WindowProc回调函数的说明中指定的准则。 使用GWL_WNDPROC索引调用SetWindowLong函数可创建该窗口类的子类(窗口类用来创建窗 口)。应用程序不得用另1个过程的窗口产生子类。 使用RegisterClass函数,并将WNDCLASS结构的cbWndExtra成员指定为1个非0值,便可 保留附加窗口内存。 不得将SetWindowLong与GWL_HWNDPARENT索引1起使用来改变1个子窗口的父窗口。塌升祥要 改变子窗口的父窗口,应使用SetParent函数笑明。