#include <node.h>
#include <v8.h>
#ifdef _UNICODE
#undef _UNICODE
#endif
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
//#include <iostream>
v8:: Local < v8:: String > LpStrToV8( LPSTR str) {
v8:: HandleScope scope;
v8:: Local < v8:: String > v8str;
v8str = v8:: String :: New ( static_cast < char * > ( str) ) ;
return scope.Close ( v8str) ;
}
v8:: Handle < v8:: Value > Method( const v8:: Arguments & args) {
// v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8:: HandleScope scope;
DWORD dwSizeNeeded;
DWORD dwNumItems;
LPPRINTER_INFO_2 lpInfo = NULL ;
EnumPrintersW( PRINTER_ENUM_LOCAL, NULL , 2 , NULL , 0 , & dwSizeNeeded, & dwNumItems) ;
lpInfo = ( LPPRINTER_INFO_2) HeapAlloc( GetProcessHeap( ) , HEAP_ZERO_MEMORY, dwSizeNeeded) ;
if ( lpInfo == NULL )
{
return scope.Close ( v8:: String :: New ( "{\" error\" : \" Not enough memory to enumerate printers.\" }" ) ) ;
}
if ( EnumPrintersW( PRINTER_ENUM_LOCAL, // what to enumerate
NULL , // printer name (NULL for all)
2 , // level
( LPBYTE) lpInfo, // buffer
dwSizeNeeded, // size of buffer
& dwSizeNeeded, // returns size
& dwNumItems // return num. items
) == 0 )
{
return scope.Close ( v8:: String :: New ( "{\" error\" : \" EnumPrinters() failed.\" }" ) ) ;
}
v8:: Handle < v8:: Array > printerList = v8:: Array :: New ( dwNumItems) ;
for ( unsigned int i = 0 ; i < dwNumItems; i++ )
{
v8:: Handle < v8:: Object > printer = v8:: Object :: New ( ) ;
printer- > Set( v8:: String :: New ( "printer" ) , LpStrToV8( lpInfo[ i] .pPrinterName ) ) ;
printer- > Set( v8:: String :: New ( "port" ) , LpStrToV8( lpInfo[ i] .pPortName ) ) ;
printer- > Set( v8:: String :: New ( "driver" ) , LpStrToV8( lpInfo[ i] .pDriverName ) ) ;
printer- > Set( v8:: String :: New ( "comments" ) , LpStrToV8( lpInfo[ i] .pComment ) ) ;
printer- > Set( v8:: String :: New ( "location" ) , LpStrToV8( lpInfo[ i] .pLocation ) ) ;
printerList- > Set( i, printer) ;
}
// free memory
HeapFree( GetProcessHeap( ) , 0 , lpInfo) ;
return scope.Close ( printerList) ;
}
void init( v8:: Handle < v8:: Object > target) {
target- > Set( v8:: String :: NewSymbol ( "getPrinters" ) ,
v8:: FunctionTemplate :: New ( Method) - > GetFunction( )
) ;
}
NODE_MODULE( printers, init)
I2luY2x1ZGUgPG5vZGUuaD4KI2luY2x1ZGUgPHY4Lmg+CgojaWZkZWYgX1VOSUNPREUKI3VuZGVmIF9VTklDT0RFCiNlbmRpZgoKI2luY2x1ZGUgPHdpbmRvd3MuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjb25pby5oPgojaW5jbHVkZSA8dGNoYXIuaD4KLy8jaW5jbHVkZSA8aW9zdHJlYW0+Cgp2ODo6TG9jYWw8djg6OlN0cmluZz4gTHBTdHJUb1Y4KExQU1RSIHN0cikgewogICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4c3RyOwogICAgCgl2OHN0ciA9IHY4OjpTdHJpbmc6Ok5ldyhzdGF0aWNfY2FzdDxjaGFyKj4oc3RyKSk7CiAgICAKICAgIHJldHVybiBzY29wZS5DbG9zZSh2OHN0cik7Cn0KCnY4OjpIYW5kbGU8djg6OlZhbHVlPiBNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyl7Ci8vCXY4OjpJc29sYXRlKiBpc29sYXRlID0gdjg6Oklzb2xhdGU6OkdldEN1cnJlbnQoKTsKCXY4OjpIYW5kbGVTY29wZSBzY29wZTsKCglEV09SRAkJCQlkd1NpemVOZWVkZWQ7CglEV09SRAkJCQlkd051bUl0ZW1zOwoJTFBQUklOVEVSX0lORk9fMglscEluZm8gPSBOVUxMOwoKCUVudW1QcmludGVyc1coUFJJTlRFUl9FTlVNX0xPQ0FMLCBOVUxMLCAyLCBOVUxMLCAwLCAmZHdTaXplTmVlZGVkLCAmZHdOdW1JdGVtcyk7CgoJbHBJbmZvID0gKExQUFJJTlRFUl9JTkZPXzIpIEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCBIRUFQX1pFUk9fTUVNT1JZLCBkd1NpemVOZWVkZWQpOwoJaWYobHBJbmZvID09IE5VTEwpCgl7CgkJcmV0dXJuIHNjb3BlLkNsb3NlKHY4OjpTdHJpbmc6Ok5ldygie1wiZXJyb3JcIjogXCJOb3QgZW5vdWdoIG1lbW9yeSB0byBlbnVtZXJhdGUgcHJpbnRlcnMuXCJ9IikpOwoJfQoKCWlmKEVudW1QcmludGVyc1coUFJJTlRFUl9FTlVNX0xPQ0FMLAkvLyB3aGF0IHRvIGVudW1lcmF0ZQoJCQkgICAgTlVMTCwJCQkJCQkvLyBwcmludGVyIG5hbWUgKE5VTEwgZm9yIGFsbCkKCQkJICAgIDIsCQkJCQkJCS8vIGxldmVsCgkJCSAgICAoTFBCWVRFKWxwSW5mbywJCQkJLy8gYnVmZmVyCgkJCSAgICBkd1NpemVOZWVkZWQsCQkJCS8vIHNpemUgb2YgYnVmZmVyCgkJCSAgICAmZHdTaXplTmVlZGVkLAkJCQkvLyByZXR1cm5zIHNpemUKCQkJICAgICZkd051bUl0ZW1zCQkJCQkvLyByZXR1cm4gbnVtLiBpdGVtcwoJCQkgICkgPT0gMCkKCXsKCQlyZXR1cm4gc2NvcGUuQ2xvc2Uodjg6OlN0cmluZzo6TmV3KCJ7XCJlcnJvclwiOiBcIkVudW1QcmludGVycygpIGZhaWxlZC5cIn0iKSk7Cgl9CgoJdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByaW50ZXJMaXN0ID0gdjg6OkFycmF5OjpOZXcoZHdOdW1JdGVtcyk7CgoJZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGR3TnVtSXRlbXM7IGkrKykKCXsKCQl2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHByaW50ZXIgPSB2ODo6T2JqZWN0OjpOZXcoKTsKCiAgICAgICAgcHJpbnRlci0+U2V0KHY4OjpTdHJpbmc6Ok5ldygicHJpbnRlciIpLCBMcFN0clRvVjgobHBJbmZvW2ldLnBQcmludGVyTmFtZSkpOwogICAgICAgIHByaW50ZXItPlNldCh2ODo6U3RyaW5nOjpOZXcoInBvcnQiKSwgTHBTdHJUb1Y4KGxwSW5mb1tpXS5wUG9ydE5hbWUpKTsKICAgICAgICBwcmludGVyLT5TZXQodjg6OlN0cmluZzo6TmV3KCJkcml2ZXIiKSwgTHBTdHJUb1Y4KGxwSW5mb1tpXS5wRHJpdmVyTmFtZSkpOwogICAgICAgIHByaW50ZXItPlNldCh2ODo6U3RyaW5nOjpOZXcoImNvbW1lbnRzIiksIExwU3RyVG9WOChscEluZm9baV0ucENvbW1lbnQpKTsKICAgICAgICBwcmludGVyLT5TZXQodjg6OlN0cmluZzo6TmV3KCJsb2NhdGlvbiIpLCBMcFN0clRvVjgobHBJbmZvW2ldLnBMb2NhdGlvbikpOwoKCQlwcmludGVyTGlzdC0+U2V0KGksIHByaW50ZXIpOwoJfQoKCS8vIGZyZWUgbWVtb3J5CglIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBscEluZm8pOwoKCXJldHVybiBzY29wZS5DbG9zZShwcmludGVyTGlzdCk7Cn0KCnZvaWQgaW5pdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRhcmdldCl7Cgl0YXJnZXQtPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImdldFByaW50ZXJzIiksCgkJdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhNZXRob2QpLT5HZXRGdW5jdGlvbigpCgkpOwp9Ck5PREVfTU9EVUxFKHByaW50ZXJzLCBpbml0KQ==
compilation info
prog.cpp:1:18: error: node.h: No such file or directory
prog.cpp:2:16: error: v8.h: No such file or directory
prog.cpp:8:21: error: windows.h: No such file or directory
prog.cpp:10:19: error: conio.h: No such file or directory
prog.cpp:11:19: error: tchar.h: No such file or directory
prog.cpp:14: error: 'v8' has not been declared
prog.cpp:14: error: expected constructor, destructor, or type conversion before '<' token
prog.cpp:23: error: 'v8' has not been declared
prog.cpp:23: error: expected constructor, destructor, or type conversion before '<' token
stdout