http://qs321.pair.com?node_id=397227

#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include <windows.h> #include <stdio.h> #include <float.h> #include <stdlib.h> #include <math.h> #include <string.h> int isFileOpen(char *filename) { HFILE theFile = HFILE_ERROR; DWORD lastErr = NO_ERROR; // Attempt to open the file exclusively. theFile = _lopen(filename, OF_READ | OF_SHARE_EXCLUSIVE); if (theFile == HFILE_ERROR) // Save last error... lastErr = GetLastError(); else // If the open was successful, close the file. _lclose(theFile); // Return TRUE if there is a sharing-violation. if ((theFile == HFILE_ERROR) && (lastErr == ERROR_SHARING_VIOLATION)) return 1; } int GetClipboardSize() { char *htext, *stext; if( OpenClipboard(NULL) ) htext=GetClipboardData(CF_UNICODETEXT); stext = (LPTSTR) GlobalLock((HGLOBAL) htext); GlobalUnlock((HGLOBAL) htext); return GlobalSize(htext); } void SaveClipboardToFile( char* filename ) { char *h; int i, size; FILE *f; if ( OpenClipboard(NULL) ){ h = GetClipboardData(CF_UNICODETEXT); size = GlobalSize(h); if( size > 0 ){ f = fopen(filename,"wb"); for( i = 0; i < size; i++){ fprintf( f, "%c", *(h+i) ); } fclose(f); } } } void Empty (void ) { if( OpenClipboard(NULL) ){ EmptyClipboard(); } } MODULE = Win32::Clipboard::File PACKAGE = Win32::Clipboard::Fil +e int GetClipboardSize() void SaveClipboardToFile( filename ) char *filename void Empty() int isFileOpen( filename ) char *filename