Shoutbox

[Resource] Win32 API Constant Reference - Printable Version

-Shoutbox (https://shoutbox.menthix.net)
+-- Forum: MsgHelp Archive (/forumdisplay.php?fid=58)
+--- Forum: Messenger Plus! for Live Messenger (/forumdisplay.php?fid=4)
+---- Forum: Scripting (/forumdisplay.php?fid=39)
+----- Thread: [Resource] Win32 API Constant Reference (/showthread.php?tid=62270)

[Resource] Win32 API Constant Reference by segosa on 07-01-2006 at 07:55 PM

Sometimes when scripting and I need to make an Interop.Call call to a Windows API function that takes a parameter which is a constant, such as MB_OK for MessageBox or WM_CLOSE for SendMessage, I need to find out the value of the constant and the way I do this is open Visual Studio, type the constant name and hover over it so that the tooltip tells me the value. That method sucked. I googled for a reference of all the constant values and I didn't find much either.

I then remembered VB came with a file called WIN32API.TXT that contained all the Constants, Declares and Types used by the Win32 API functions. However I didn't like the format of the file (as I don't like VB's syntax anyway) so I used a combination of (regex) find/replace and various other things to format the file the way JScript developers would find most convenient. I removed the useless Declares and Types, changes &H for hex into 0x, And and Or into & and |, and made each line follow the format 'var CONST = 0xVALUE;' so that it's possible to easily copy and paste it into your script should you want to.

The file is hosted here: [EDITED: file found to be inaccurate/incomplete]


RE: [Resource] Win32 API Constant Reference by ShawnZ on 07-01-2006 at 08:03 PM

Here's a version wrapped in the Windows object to keep your script tidy

http://zivontsis.googlepages.com/win32api.txt


RE: RE: [Resource] Win32 API Constant Reference by segosa on 07-01-2006 at 08:06 PM

quote:
Originally posted by ShawnZ
Here's a version wrapped in the Windows object to keep your script tidy

http://zivontsis.googlepages.com/win32api.txt


You're meant to either find the value of the constant you need or copy/paste a few of them into your script, not ALL of them.

Although I suppose if you placed that in an external js file it'd be useful (btw, usage is Windows.API_NAME).
RE: [Resource] Win32 API Constant Reference by ShawnZ on 07-01-2006 at 08:12 PM

Yes segosa, the point was to have it in an external script file. :p


RE: [Resource] Win32 API Constant Reference by alexp2_ad on 07-01-2006 at 08:16 PM

http://www.pinvoke.net/ has user32 functions and a whole load of other stuff.  deAd found that one. :)


RE: RE: [Resource] Win32 API Constant Reference by segosa on 07-01-2006 at 08:19 PM

quote:
Originally posted by alexp2_ad
http://www.pinvoke.net/ has user32 functions and a whole load of other stuff.  deAd found that one. :)


That only has a few values of constants, though. And all the examples are C# and VB. :(
RE: [Resource] Win32 API Constant Reference by ShawnZ on 07-01-2006 at 09:05 PM

Thats because the website is for C# and VB's Pinvoke functionality :p


RE: [Resource] Win32 API Constant Reference by CookieRevised on 07-02-2006 at 02:59 AM

quote:
Originally posted by ShawnZ
Yes segosa, the point was to have it in an external script file. :p
And use an relative extreme amount of otherwise useless memory.....

It might be very usefull for the "quick test driving" and developing of scripts (so you don't waste time on looking up and defining the constants), but I suggest not to use it in released versions and actually define only the ones you need in the released script.

quote:
Originally posted by segosa
I then remembered VB came with a file called WIN32API.TXT that contained all the Constants, Declares and Types used by the Win32 API functions.
I strongly suggest to get a list from somewhere else. WIN32API.TXT is known to contain a lot of mistakes, wrong values and not to mention far from being complete.... unfortunatly.


----------

Setting aside that WIN32API.TXT isn't a reliable source for this, both files (the one from Segosa and the one from Shawnz) contain leftover texts too (because of the way they were automatically created without checking the output?). And setting aside that leftover block of text near the end, Shawnz' file will even create more problems as there are a lot of constant names being used as values without linking them to the Windows object.
RE: [Resource] Win32 API Constant Reference by ShawnZ on 07-02-2006 at 05:18 AM

It'd be helpful if you pointed out where exactly it didn't work...


RE: RE: [Resource] Win32 API Constant Reference by segosa on 07-02-2006 at 07:37 AM

quote:
Originally posted by CookieRevised
I strongly suggest to get a list from somewhere else. WIN32API.TXT is known to contain a lot of mistakes, wrong values and not to mention far from being complete.... unfortunatly.



Have you got any examples of wrong constant values? Why is WIN32API inaccurate? I'm sure Microsoft don't change the values of constants whenever they're bored...

Anyway, any suggestions where to get a complete, accurate constant list?

quote:
Setting aside that WIN32API.TXT isn't a reliable source for this, both files (the one from Segosa and the one from Shawnz) contain leftover texts too (because of the way they were automatically created without checking the output?).

Please point out an example...

EDIT: shawnz, I think the reason yours doesn't work is because of stuff like this:

code:
Windows.prototype.SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE;

STANDARD_RIGHTS_REQUIRED and so on should be Windows.STANDARD_RIGHTS_REQUIRED for example, I think..
RE: RE: RE: [Resource] Win32 API Constant Reference by CookieRevised on 07-02-2006 at 09:22 AM

quote:
Originally posted by segosa
Have you got any examples of wrong constant values? Why is WIN32API inaccurate? I'm sure Microsoft don't change the values of constants whenever they're bored...
WIN32API.TXT is based upon Win95 only, which has +-5000 constants (and 1500 functions). WinXP has more than a thenfold of that...

As for the inaccuracy, eg:
quote:
If you spend just a few seconds browsing WIN32API (or it's database twin), you'll see the hundreds of functions that are yours for the calling. So why wouldn't you use it? Well ... because it may be impressive, but it's often just not correct. Here's what Bruce McKinney says about it, "Unfortunately, WIN32API.TXT has a well-earned reputation for being full of errors." Dan Appleman agrees, "Frankly, Win32API.TXT is not perfectly good. In fact, it's not even close."
(..)
and that's just one of the quotes you'll find when browsing for win32api.txt in google**. Even MS itself has suggested not to use it (go figure why they still included it in VB6)!

A good source would be simply anything except the original win32api.txt file. eg: the one on AllAPI.net, ActiveVB's APIViewer, APIviewer 2004/API-Guide, etc etc...

search google "win32api" and you'll find tons**...


** both reasons why I didn't pointed to sources in the first post as I assumed you would search for it. And the results will all point to those 2 things.

quote:
Originally posted by segosa
quote:
Originally posted by CookieRevised
Setting aside that WIN32API.TXT isn't a reliable source for this, both files (the one from Segosa and the one from Shawnz) contain leftover texts too (because of the way they were automatically created without checking the output?).
Please point out an example...

EDIT: shawnz, I think the reason yours doesn't work is because of stuff like this:
code:
Windows.prototype.SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE;
STANDARD_RIGHTS_REQUIRED and so on should be Windows.STANDARD_RIGHTS_REQUIRED for example, I think..
indeed, but not only that, both files also contains leftover text. Simply scroll your created files quickly and you'll notice it in an instant.


RE: RE: RE: RE: [Resource] Win32 API Constant Reference by segosa on 07-02-2006 at 09:34 AM

quote:
Originally posted by CookieRevised
indeed, but not only that, both files also contains leftover text. Simply scroll your created files quickly and you'll notice it in an instant.


Hmm, I see now, just a place where my regex didn't catch a Type declaration. I'd bother fixing it, but I suppose the file's a bit useless now since it's inaccurate/incomplete :P


RE: [Resource] Win32 API Constant Reference by CookieRevised on 07-02-2006 at 09:38 AM

quote:
Originally posted by segosa
Hmm, I see now, just a place where my regex didn't catch a Type declaration. I'd bother fixing it, but I suppose the file's a bit useless now since it's inaccurate/incomplete :P
Yeah... checking the output would have revealed that (you lazy you :p j/k)... btw, I attached the most accurate you'll find (from APIviewer 2004) in previous post. This is for Win32 (thus not Win 16, nor Win CE). Notice the size of it compared to the original one!

Note: be carefull with auto-converting though!. In some cases you need to take in account the kind of number type being used, especially when the constant equals -1; A -1 as Integer is not the same as -1 as a Long.

Also paranthesis are often used, which are actually pretty useless in many cases, they can be removed.



RE: [Resource] Win32 API Constant Reference by segosa on 07-02-2006 at 09:59 AM

http://m00.cx/win32api.txt

Does it get the CookieRevised seal of approval?

EDIT: Bah, VB also has Not which needs to be converted too.

* segosa fixes..


RE: [Resource] Win32 API Constant Reference by CookieRevised on 07-02-2006 at 11:02 AM

Nope, there are sill many many errors. Some could be in the original file also, but most are caused by the auto-converting.


Stuff like:
var ADDRESS = ADDRESS64;
=> ADDRESS64 isn't defined as it was a structure

var ADDRESS_SIZE = sizeof(ADDRESS);
var ADDRESSINFO_SIZE = sizeof(ADDRESSINFO);
=> sizeof() is invalid in JScript and also these were structures

var AGENTAUDIOERROR_DEVICE = AGENTAUDIOERROR(1);
=> Arrays which aren't defined

var ALID_CHARSET = VALID_CHARSET = -27;
=> Dunno if this is due to the auto-converting or if this was already so in the original file. But it doesn't make much sense. Might need to check with the msdn library.

var AMF_AUTOMATICGAIN = -1#;
=> # isn't valid in JScript

var BEGIN_INTERFACE = virtual void a() {};
=> hmmmm....

var BFT_LOG = "\x01" | BFT_LOG_DIRECTORY;
=> Makes even less sense (boolean comparisson between a string and a number)

var CANNOT_LOAD = UINT(-8);
=> Dunno if this was in original file or not.

var ALG_CLASS_DATA_ENCRYPT = (3 * 2 ^ 13)
=> In JScript ^ means bitwise XOR, not the same as taken the power of which is meant here.


Also check every negative number. As I said earlier, a negative 'integer' isn't the same as the same number as a negative 'long'. eg: -1 as an integer (2bytes) is 65535 as a long (4bytes).


All these examples or only one example of the same kinds I got from quicky browsing the file, the file is full of things like these...


RE: RE: [Resource] Win32 API Constant Reference by segosa on 07-02-2006 at 11:18 AM

quote:
Originally posted by CookieRevised
Nope, there are sill many many errors. Some could be in the original file also, but most are caused by the auto-converting.


Stuff like:
var ADDRESS = ADDRESS64;
=> ADDRESS64 isn't defined as it was a structure

var ADDRESS_SIZE = sizeof(ADDRESS);
var ADDRESSINFO_SIZE = sizeof(ADDRESSINFO);
=> sizeof() is invalid in JScript and also these were structures

var AGENTAUDIOERROR_DEVICE = AGENTAUDIOERROR(1);
=> Arrays which aren't defined

var ALID_CHARSET = VALID_CHARSET = -27;
=> Dunno if this is due to the auto-converting or if this was already so in the original file. But it doesn't make much sense. Might need to check with the msdn library.

var AMF_AUTOMATICGAIN = -1#;
=> # isn't valid in JScript

var BEGIN_INTERFACE = virtual void a() {};
=> hmmmm....

var BFT_LOG = "\x01" | BFT_LOG_DIRECTORY;
=> Makes even less sense (boolean comparisson between a string and a number)

var CANNOT_LOAD = UINT(-8);
=> Dunno if this was in original file or not.


Also check every negative number. As I said earlier, a negative 'integer' isn't the same as the same number as a negative 'long'. eg: -1 as an integer (2bytes) is 65535 as a long (4bytes).


All these examples or only one example of the same kinds I got from quicky browsing the file, the file is full of things like these...


All of those were in the original file. My "auto converting" just didn't catch them.

Don't forget this was meant to be a quick reference to find the values of constants, not a file with entirely valid JScript. It was shawnz' idea to create a wrapper object, not mine.

Anyway, the latest is here: http://m00.cx/win32api.txt

I would say, even though there are bound to be small errors, it's *useful* as a reference for Win32 API constants.