#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include #include "const-c.inc" MODULE = Win32::Screenshot PACKAGE = Win32::Screenshot INCLUDE: const-xs.inc ############################################################################ HWND WindowFromPoint(x,y) LONG x LONG y PREINIT: POINT myPoint; CODE: myPoint.x = x; myPoint.y = y; RETVAL = WindowFromPoint(myPoint); OUTPUT: RETVAL ############################################################################ HWND GetForegroundWindow() CODE: RETVAL = GetForegroundWindow(); OUTPUT: RETVAL ############################################################################ HWND GetDesktopWindow() CODE: RETVAL = GetDesktopWindow(); OUTPUT: RETVAL ############################################################################ HWND GetActiveWindow() CODE: RETVAL = GetActiveWindow(); OUTPUT: RETVAL ############################################################################ HWND GetWindow(handle,command) HWND handle UINT command CODE: RETVAL = GetWindow(handle, command); OUTPUT: RETVAL ############################################################################ HWND FindWindow(classname,windowname) LPCTSTR classname LPCTSTR windowname CODE: if(strlen(classname) == 0) classname = NULL; if(strlen(windowname) == 0) windowname = NULL; RETVAL = FindWindow(classname, windowname); OUTPUT: RETVAL ############################################################################ BOOL ShowWindow(handle,command=SW_SHOWNORMAL) HWND handle int command CODE: RETVAL = ShowWindow(handle, command); OUTPUT: RETVAL ############################################################################ void GetCursorPos() PREINIT: POINT point; PPCODE: if(GetCursorPos(&point)) { EXTEND(SP, 2); PUSHs(sv_2mortal(newSViv(point.x))); PUSHs(sv_2mortal(newSViv(point.y))); XSRETURN(2); } else { XSRETURN_NO; } ############################################################################ BOOL SetCursorPos(x,y) int x int y CODE: RETVAL = SetCursorPos(x, y); OUTPUT: RETVAL ############################################################################ void GetClientRect(handle) HWND handle PREINIT: RECT myRect; PPCODE: if(GetClientRect(handle, &myRect)) { EXTEND(SP, 4); PUSHs(sv_2mortal(newSViv(myRect.left ))); PUSHs(sv_2mortal(newSViv(myRect.top ))); PUSHs(sv_2mortal(newSViv(myRect.right ))); PUSHs(sv_2mortal(newSViv(myRect.bottom))); XSRETURN(4); } else { XSRETURN_NO; } ############################################################################ void GetWindowRect(handle) HWND handle PREINIT: RECT myRect; PPCODE: if(GetWindowRect(handle, &myRect)) { EXTEND(SP, 4); PUSHs(sv_2mortal(newSViv(myRect.left ))); PUSHs(sv_2mortal(newSViv(myRect.top ))); PUSHs(sv_2mortal(newSViv(myRect.right ))); PUSHs(sv_2mortal(newSViv(myRect.bottom))); XSRETURN(4); } else { XSRETURN_NO; } ############################################################################ BOOL BringWindowToTop(handle) HWND handle CODE: RETVAL = BringWindowToTop(handle); OUTPUT: RETVAL ############################################################################ void GetWindowText(handle) HWND handle PREINIT: char *myBuffer; int myLength; PPCODE: myLength = GetWindowTextLength(handle)+1; if(myLength) { myBuffer = (char *) safemalloc(myLength); if(GetWindowText(handle, myBuffer, myLength)) { EXTEND(SP, 1); PUSHs(sv_2mortal(newSVpvn((char*) myBuffer, myLength))); safefree(myBuffer); XSRETURN(1); } safefree(myBuffer); } XSRETURN_NO; ############################################################################ BOOL Restore(handle) HWND handle CODE: RETVAL = OpenIcon(handle); OUTPUT: RETVAL ############################################################################ BOOL Minimize(handle) HWND handle CODE: RETVAL = CloseWindow(handle); OUTPUT: RETVAL ############################################################################ BOOL IsVisible(handle) HWND handle CODE: RETVAL = IsWindowVisible(handle); OUTPUT: RETVAL ############################################################################ HWND GetTopWindow(handle) HWND handle CODE: RETVAL = GetTopWindow(handle); OUTPUT: RETVAL ############################################################################ BOOL ScrollWindow(handle, delta_x, delta_y) HWND handle int delta_x int delta_y CODE: RETVAL = ScrollWindowEx(handle, delta_x, delta_y, NULL, NULL, NULL, NULL, SW_INVALIDATE); OUTPUT: RETVAL ############################################################################ void JoinRawData(ww1, ww2, hh, raw1, raw2) LONG ww1 LONG ww2 LONG hh LPVOID raw1 LPVOID raw2 PREINIT: long i; long bufferlen; char * buffer; char * ptr_dest; char * ptr_raw1; char * ptr_raw2; PPCODE: /* allocate output buffer */ bufferlen = hh * ww1 * 4 + hh * ww2 * 4; buffer = (LPVOID) safemalloc(bufferlen); /* copy the scan lines */ ptr_dest = buffer; ptr_raw1 = raw1; ptr_raw2 = raw2; for ( i=0 ; i RGBX) */ p = buffer; for( i = 0 ; i < bufferlen/4 ; i++ ) { *p = ((*p & 0x000000ff) << 16) | ((*p & 0x00ff0000) >> 16) | (*p & 0x0000ff00) | 0xff000000; p++; } EXTEND(SP, 3); PUSHs(sv_2mortal(newSViv(my_binfo.bmiHeader.biWidth))); PUSHs(sv_2mortal(newSViv(abs(my_binfo.bmiHeader.biHeight)))); PUSHs(sv_2mortal(newSVpvn((char*) buffer, bufferlen))); out = 1; } else { out = 0; } safefree(buffer); DeleteDC(my_hdc); ReleaseDC(handle, hdc); DeleteObject(my_hbmp); if ( out == 1 ) { XSRETURN(3); } else { XSRETURN_NO; } ############################################################################