WinSpy涉及的windows api

时间:2022-03-29 01:37:03

标签:

WinSpy涉及的windows api

  WinSpy是仿造微软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 Code

  GWL_HINSTANCE:获得应用事例的句柄。 

  GWL_HWNDPAAENT:如果父窗口存在,获得父窗口句柄。 
  GWL_ID:获得窗口标识。 
  GWL_USERDATA:获得与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序使用的32位值。 
  在hWnd参数标识了一个对话框时也可用下列值: 
  DWL_DLGPROC:获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数CallWindowProc来调用对话框过程。 
  DWL_MSGRESULT:获得在对话框过程中一个消息处理的返回值。 
  DWL_USER:获得应用程序私有的额外信息,例如一个句柄或指针。 

1.5 SetWindowLong

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