标签:
WinSpy涉及的windows apiWinSpy是仿造微软Spy++的开源项目,但只涉及Spy++的窗口句柄、窗口的属性、styles、类名子窗口、进程线程信息等查找功能。功能虽然不算强大,但涉及到很多windows api,是了解windows api的一个有用工具。WinSpy界面截图如下:
1:拖拽瞄准镜图标获取窗口的HWND核心api:ClientToScreen、WindowFromPoint、EnumChildWindows、GetParent、GetWindowLong、SetWindowLong
1.1 WindowFromPoint
HWND WindowFromPoint(POINT Point);
View Code根据桌面坐标获取到window的HWND。返回NULL表示没有窗口在该point下。
1.2 ClientToScreen
BOOL ClientToScreen( HWND hWnd, // handle to window LPPOINT lpPoint // screen coordinates);
View Code将客户端相对坐标转换为桌面坐标,是WindowFromPoint的前提。函数调用成功,返回非0值。否则,返回0.
1.3 GetParent
HWND GetParent( HWND hWnd );
View Code返回当前HWND的父窗口HWND。如果该窗口无父窗口或者函数调用失败,返回NULL。
1.4 GetWindowLong
LONG GetWindowLong( HWND hWnd, int nIndex);
View Code该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值(该整形值也可用于传入的函数指针或窗口过程地址)。调用成功返回32位整形值,失败返回0.可用GetLastError获取失败信息。可获取的窗口信息的类型如下:
GWL_EXSTYLE;获得扩展窗口风格。
GWL_STYLE:获得窗口风格。
GWL_WNDPROC:获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用CallWindowProc函数调用窗口过程,CallWindowProc函数用于给指定窗口的窗口过程发消息。原型如下:
1 LRESULT CallWindowProc( 2 WNDPROC lpPrevWndFunc, 3 HWND hWnd, 4 UINT Msg, 5 WPARAM wParam, 6 LPARAM lParam );
View CodeGWL_HINSTANCE:获得应用事例的句柄。
GWL_HWNDPAAENT:如果父窗口存在,获得父窗口句柄。
GWL_ID:获得窗口标识。
GWL_USERDATA:获得与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序使用的32位值。
在hWnd参数标识了一个对话框时也可用下列值:
DWL_DLGPROC:获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数CallWindowProc来调用对话框过程。
DWL_MSGRESULT:获得在对话框过程中一个消息处理的返回值。
DWL_USER:获得应用程序私有的额外信息,例如一个句柄或指针。
1 LONG SetWindowLong( 2 HWND hWnd, 3 int nIndex, 4 LONG dwNewLong);
View Code与GetWindowLong对应,用于修改窗口的属性。属性类型与GetWindowLong一样。返回值0表示调用失败,用GetLastError查询错误信息。
1.6 EnumChildWindows
1 BOOL EnumChildWindows( 2 HWND hWndParent, 3 WNDENUMPROC lpEnumFunc, 4 LPARAM lParam 5 );
View Code