
The entire win32 API in JavaScript - Benvie
https://gist.github.com/3361208
======
brokenparser
What appears to be missing is the automatic mapping of the A (ansi) and W
(wide) suffixed function names to conventional unsuffixed function names. In
C, this is done using macros. If UNICODE is not defined, the macro
MessageBoxEx would expand to MessageBoxExA. With UNICODE, the macro expands to
MessageBoxExW. Similarly, TEXT is used to wrap strings to ensure they're
unprefixed or prefixed with an L respectively. You could do this by hand, it's
just a bit more tedious to write.

~~~
vinayan3
One would wish these distinctions could be forgotten with calling the Win32api
from JS. However, that is a pipe dream and could have an impact on
performance.

~~~
brokenparser
You can forget the distinctions without impacting performance if your
JavaScript engine uses UTF-16, because that's the native encoding of Windows
NT 5.0+. You'll still get overhead when working with binary data, Typed Array
or not.

------
ruswick
This is fascinating, but I just can't discern a practical purpose.

The novelty of the "I just converted this huge piece of software written in c
or machine code into JS" type of post usually extends only to the title. The
link itself generally serves only to evoke a profound "WTF" (and in this case
took upwards of 40 seconds to load.)

Although I appreciate the undertaking of compiling prodigious libraries,
drivers, etc. into JS, I don't see practical value in the product of said
undertaking.

The fact that this practice has proliferated throughout HN recently is odd.
This kind of thing is certainly remarkable, but it doesn't do anything.

~~~
bpatrianakos
You're 100% right but you're missing something here. Something like this takes
skill and builds skill and when you've finished you just want to show it off.
And it really is impressive! Sure, it has no practical application itself but
I'm sure that some piece of this or some technique used in porting it to JS
will have some practical value somewhere. Sometimes the practical is born from
the impractical.

I guess what I'm saying is why does it need to do anything or be practical?
Cool stuff is just cool sometimes.

~~~
motvbi
Windows script host (cscript) allows you to execute js files in addition to
vbscript (vbs). This is particularly useful in extending the functionality of
batch files. This can be useful in a lot of circumstances build process,
installation etc.

~~~
pharrington
This is for Node.js, not host scripts. It uses node-ffi.

------
tezza
I want to put a reminder that Windows itself provides a lot of background
command scripting via WHost

[http://www.microsoft.com/resources/documentation/windows/xp/...](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-
us/wsh_overview.mspx?mfr=true)

Things like accessing namespace folders, creating shortcuts, etc are easier
through this WHost interface than the raw API.

------
scg
Can someone please explain what's the purpose of this JS code?

~~~
Androsynth
The author of this gist is also one of the developers of <http://appjs.org/>.
It looks like they may be related.

------
k3n
Nice! Do you have a quick example you could share?

~~~
Benvie
This is the beginnings of a wrapper around various windowing Apis to create a
Window class <https://github.com/Benvie/node-Windows/blob/master/Window.js>

This is the beginnings of a windows registry library
<https://github.com/Benvie/node-winreg>

This is an example of creating a windowless event loop in order to create a
low level keyboard/mouse hook <https://github.com/Benvie/node-
Windows/blob/master/input.js>

~~~
cristiantincu
This is a fine example of what hacking is about.

Thank you for publishing this.

------
olalonde
Was this generated with Clang? I hope it was not written by hand...

------
weej
Sshhhh...don't let this individual know that Windows 8 API, Windows Runtime
(RT), is available in JavaScript.

That said, WinRT doesn't expose Win32 API. Well done. That takes dedication,
skill, and lack of sanity.

> Edit WinRT API link: [http://msdn.microsoft.com/en-
> us/library/windows/apps/br21137...](http://msdn.microsoft.com/en-
> us/library/windows/apps/br211377.aspx)

------
4ad
I'm more interested in how this was automatically generated rather than in the
end product itself.

~~~
olalonde
Possibly with <https://github.com/tjfontaine/node-libclang>. I'm actually
working on a node module that will automatically parse header files using
libclang and make native dynamic libraries available with no configuration
required on the end of the developer. It will eventually be part of
<https://github.com/olalonde/better-require> if you're interested.

~~~
xdenser
How about pure JS PEG generated parser instead of clang?
<https://github.com/xdenser/node-ffiCparser> though that is not finished yet

~~~
olalonde
An didn't know about this, looks great. Would you be interested in helping me
write an add-on for better-require? Anyways, I'll try it out and see how it
works out.

------
guiomie
What is the overhead of using FFI in this case vs going with a native c/c++
module ?

------
yarrel
s/in/wrapped in/

------
Cordiapxq
Not sure what the point of this is.. can someone enlighten me?

~~~
thibaut_barrere
This brings plenty of low-level (or higher level) method call and related
structure definitions for Windows.

You can for instance get processes informations, start a wave sound, and many
more.

Scroll down to the middle to see API calls.

One use-case is using CoffeeScript or JavaScript to write tools that would
benefit from these calls (could be system tools, or not).

------
cpayne
Still no cure for cancer...

