www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Accessing COM Objects

reply Incognito <Incognito regmail.com> writes:
I've been reading over D's com and can't find anything useful. It 
seems there are different ways:

http://www.lunesu.com/uploads/ModernCOMProgramminginD.pdf

which is of no help and requires an idl file, which I don't have.

Then theres this

http://wiki.dlang.org/COM_Programming

which is also of no help:

import std.stdio;

import std.stdio, core.sys.windows.com, core.sys.windows.windows, 
std.exception, std.meta, std.traits;
import std.utf, core.stdc.stdlib, core.sys.windows.objidl, 
core.sys.windows.ole2;
pragma(lib, "ole32.lib");


GUID Guid(string str)()
{
     static assert(str.length==36, "Guid string must be 36 chars 
long");
     enum GUIDstring = "GUID(0x" ~ str[0..8] ~ ", 0x" ~ str[9..13] 
~ ", 0x" ~ str[14..18] ~
         ", [0x" ~ str[19..21] ~ ", 0x" ~ str[21..23] ~ ", 0x" ~ 
str[24..26] ~ ", 0x" ~ str[26..28]
         ~ ", 0x" ~ str[28..30] ~ ", 0x" ~ str[30..32] ~ ", 0x" ~ 
str[32..34] ~ ", 0x" ~ str[34..36] ~ "])";
     return mixin(GUIDstring);
}

int main(string[] argv)
{

	// Adobe Photoshop App 9.0 CLSID 
{c09f153e-dff7-4eff-a570-af82c1a5a2a8}
	// Adobe Photoshop App 9.1 CLSID 
{6DECC242-87EF-11cf-86B4-444553540000}

	auto CLSID_DOMDocument60 = 
Guid!("6DECC242-87EF-11cf-86B4-444553540000");
	auto iid = IID_IUnknown;

	void* pUnk;
	auto hr = CoCreateInstance(&CLSID_DOMDocument60, null, 
CLSCTX_ALL, &iid, &pUnk);
	if (FAILED(hr))
		throw new Exception("Error!");

     writeln("Hello D-World!");
     return 0;
}

Maybe my CLSID's are wrong. Got them from the registry. The 
exception triggers each time. Even if it worked, I wouldn't know 
how to use it.

I can do this stuff in C# by simply dragging and dropping a dll 
into the references and it works fine but is a bit slow. I was 
hoping I could speed things up using D but it seems like COM 
isn't really supported, despite what several references say.
Jun 12 2016
next sibling parent reply Mike Parker <aldacron gmail.com> writes:
On Monday, 13 June 2016 at 01:22:33 UTC, Incognito wrote:

 I can do this stuff in C# by simply dragging and dropping a dll 
 into the references and it works fine but is a bit slow. I was 
 hoping I could speed things up using D but it seems like COM 
 isn't really supported, despite what several references say.
Com *is* supported in D. I think it's better to work with interfaces rather than classes like the Wiki example: interface MyCOMType : IUknown {} Then when you get a pointer from CoCreateInstance or whatever, you cast it to the interface type and away you go. In your code, your problem is that CoCreateInstance is failing, not that D doesn't support COM. It will help you to find out what the actual value of 'hr' is. Possible values are listed at [1]. [1] https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx
Jun 12 2016
parent reply Incognito <Incognito regmail.com> writes:
On Monday, 13 June 2016 at 01:52:12 UTC, Mike Parker wrote:
 On Monday, 13 June 2016 at 01:22:33 UTC, Incognito wrote:

 I can do this stuff in C# by simply dragging and dropping a 
 dll into the references and it works fine but is a bit slow. I 
 was hoping I could speed things up using D but it seems like 
 COM isn't really supported, despite what several references 
 say.
Com *is* supported in D. I think it's better to work with interfaces rather than classes like the Wiki example: interface MyCOMType : IUknown {} Then when you get a pointer from CoCreateInstance or whatever, you cast it to the interface type and away you go. In your code, your problem is that CoCreateInstance is failing, not that D doesn't support COM. It will help you to find out what the actual value of 'hr' is. Possible values are listed at [1]. [1] https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx
What interface are you talking about? How can I cast to something I don't have? I do not have a photoshop COM interface. Are you saying that if CoCreateInstance worked that I can then use the iid or pUnk to access the COM? Do I get the members by trial and error? pUnk.width? Even if CoCreateInstance passed, what do I do next?
Jun 12 2016
parent reply Mike Parker <aldacron gmail.com> writes:
On Monday, 13 June 2016 at 02:08:22 UTC, Incognito wrote:

 What interface are you talking about? How can I cast to 
 something I don't have? I do not have a photoshop COM 
 interface. Are you saying that if CoCreateInstance worked that 
 I can then use the iid or pUnk to access the COM? Do I get the 
 members by trial and error? pUnk.width? Even if 
 CoCreateInstance passed, what do I do next?
You have to define the interface yourself, extending from IUnknown, implementing whatever functions are available on the COM interface you want. Here's an example for the ID3D11Device interface: https://github.com/auroragraphics/directx/blob/master/d3d11.d#L1332
Jun 12 2016
parent Mike Parker <aldacron gmail.com> writes:
On Monday, 13 June 2016 at 04:52:49 UTC, Mike Parker wrote:
 On Monday, 13 June 2016 at 02:08:22 UTC, Incognito wrote:

 What interface are you talking about? How can I cast to 
 something I don't have? I do not have a photoshop COM 
 interface. Are you saying that if CoCreateInstance worked that 
 I can then use the iid or pUnk to access the COM? Do I get the 
 members by trial and error? pUnk.width? Even if 
 CoCreateInstance passed, what do I do next?
You have to define the interface yourself, extending from IUnknown, implementing whatever functions are available on the COM interface you want. Here's an example for the ID3D11Device interface: https://github.com/auroragraphics/directx/blob/master/d3d11.d#L1332
Sorry. Hit send too soon. Once you've got your interface defined, you should be able to do this: MyCOMType mct; auto hr = CoCreateInstance(&CLSID_DOMDocument60, null, CLSCTX_ALL, &iid, &cast(void*)mct); It's been a long time since I worked directly with COM, so there are probably details I'm missing, but this is the general idea.
Jun 12 2016
prev sibling next sibling parent reply John <johnch_atms hotmail.com> writes:
On Monday, 13 June 2016 at 01:22:33 UTC, Incognito wrote:
 I've been reading over D's com and can't find anything useful. 
 It seems there are different ways:

 http://www.lunesu.com/uploads/ModernCOMProgramminginD.pdf

 which is of no help and requires an idl file, which I don't 
 have.

 Then theres this

 http://wiki.dlang.org/COM_Programming

 which is also of no help:

 import std.stdio;

 import std.stdio, core.sys.windows.com, 
 core.sys.windows.windows, std.exception, std.meta, std.traits;
 import std.utf, core.stdc.stdlib, core.sys.windows.objidl, 
 core.sys.windows.ole2;
 pragma(lib, "ole32.lib");


 GUID Guid(string str)()
 {
     static assert(str.length==36, "Guid string must be 36 chars 
 long");
     enum GUIDstring = "GUID(0x" ~ str[0..8] ~ ", 0x" ~ 
 str[9..13] ~ ", 0x" ~ str[14..18] ~
         ", [0x" ~ str[19..21] ~ ", 0x" ~ str[21..23] ~ ", 0x" ~ 
 str[24..26] ~ ", 0x" ~ str[26..28]
         ~ ", 0x" ~ str[28..30] ~ ", 0x" ~ str[30..32] ~ ", 0x" 
 ~ str[32..34] ~ ", 0x" ~ str[34..36] ~ "])";
     return mixin(GUIDstring);
 }

 int main(string[] argv)
 {

 	// Adobe Photoshop App 9.0 CLSID 
 {c09f153e-dff7-4eff-a570-af82c1a5a2a8}
 	// Adobe Photoshop App 9.1 CLSID 
 {6DECC242-87EF-11cf-86B4-444553540000}

 	auto CLSID_DOMDocument60 = 
 Guid!("6DECC242-87EF-11cf-86B4-444553540000");
 	auto iid = IID_IUnknown;

 	void* pUnk;
 	auto hr = CoCreateInstance(&CLSID_DOMDocument60, null, 
 CLSCTX_ALL, &iid, &pUnk);
 	if (FAILED(hr))
 		throw new Exception("Error!");

     writeln("Hello D-World!");
     return 0;
 }

 Maybe my CLSID's are wrong. Got them from the registry. The 
 exception triggers each time. Even if it worked, I wouldn't 
 know how to use it.

 I can do this stuff in C# by simply dragging and dropping a dll 
 into the references and it works fine but is a bit slow. I was 
 hoping I could speed things up using D but it seems like COM 
 isn't really supported, despite what several references say.
COM is supported in D. The difference is that C# hides all the plumbing behind nice classes. You're going to need Photoshop's COM interface to do anything with it. If you don't have a C header that you can translate into D, you could use a tool included in the Windows SDK called OleView. It will peek inside COM libraries and give you the interface definitions. As to why CoCreateInstance isn't working, make sure you're calling CoInitialize or CoInitializeEx beforehand. If it's still failing, use std.windows.syserror.sysErrorString(hr) to see if it gives you a reason. Otherwise, CLSCTX_ALL might be the culprit - try using CLSCTX_SERVER instead.
Jun 13 2016
parent reply Incognito <Incognito regmail.com> writes:
On Monday, 13 June 2016 at 07:40:09 UTC, John wrote:
 On Monday, 13 June 2016 at 01:22:33 UTC, Incognito wrote:
 I've been reading over D's com and can't find anything useful. 
 It seems there are different ways:

 http://www.lunesu.com/uploads/ModernCOMProgramminginD.pdf

 which is of no help and requires an idl file, which I don't 
 have.

 Then theres this

 http://wiki.dlang.org/COM_Programming

 which is also of no help:

 import std.stdio;

 import std.stdio, core.sys.windows.com, 
 core.sys.windows.windows, std.exception, std.meta, std.traits;
 import std.utf, core.stdc.stdlib, core.sys.windows.objidl, 
 core.sys.windows.ole2;
 pragma(lib, "ole32.lib");


 GUID Guid(string str)()
 {
     static assert(str.length==36, "Guid string must be 36 
 chars long");
     enum GUIDstring = "GUID(0x" ~ str[0..8] ~ ", 0x" ~ 
 str[9..13] ~ ", 0x" ~ str[14..18] ~
         ", [0x" ~ str[19..21] ~ ", 0x" ~ str[21..23] ~ ", 0x" 
 ~ str[24..26] ~ ", 0x" ~ str[26..28]
         ~ ", 0x" ~ str[28..30] ~ ", 0x" ~ str[30..32] ~ ", 0x" 
 ~ str[32..34] ~ ", 0x" ~ str[34..36] ~ "])";
     return mixin(GUIDstring);
 }

 int main(string[] argv)
 {

 	// Adobe Photoshop App 9.0 CLSID 
 {c09f153e-dff7-4eff-a570-af82c1a5a2a8}
 	// Adobe Photoshop App 9.1 CLSID 
 {6DECC242-87EF-11cf-86B4-444553540000}

 	auto CLSID_DOMDocument60 = 
 Guid!("6DECC242-87EF-11cf-86B4-444553540000");
 	auto iid = IID_IUnknown;

 	void* pUnk;
 	auto hr = CoCreateInstance(&CLSID_DOMDocument60, null, 
 CLSCTX_ALL, &iid, &pUnk);
 	if (FAILED(hr))
 		throw new Exception("Error!");

     writeln("Hello D-World!");
     return 0;
 }

 Maybe my CLSID's are wrong. Got them from the registry. The 
 exception triggers each time. Even if it worked, I wouldn't 
 know how to use it.

 I can do this stuff in C# by simply dragging and dropping a 
 dll into the references and it works fine but is a bit slow. I 
 was hoping I could speed things up using D but it seems like 
 COM isn't really supported, despite what several references 
 say.
COM is supported in D. The difference is that C# hides all the plumbing behind nice classes. You're going to need Photoshop's COM interface to do anything with it. If you don't have a C header that you can translate into D, you could use a tool included in the Windows SDK called OleView. It will peek inside COM libraries and give you the interface definitions. As to why CoCreateInstance isn't working, make sure you're calling CoInitialize or CoInitializeEx beforehand. If it's still failing, use std.windows.syserror.sysErrorString(hr) to see if it gives you a reason. Otherwise, CLSCTX_ALL might be the culprit - try using CLSCTX_SERVER instead.
Cool. Oleview gives me the idl files. How to convert the idl files to d or possibly c? Would I just use them in place of IUnknown once I have the interface?
Jun 13 2016
next sibling parent reply John <johnch_atms hotmail.com> writes:
On Monday, 13 June 2016 at 17:38:41 UTC, Incognito wrote:
 Cool. Oleview gives me the idl files. How to convert the idl 
 files to d or possibly c?

 Would I just use them in place of IUnknown once I have the 
 interface?
In OleView you can save the IDL file, then run another tool, midl.exe, on the IDL file. That will generate the C headers. But you'd then have to translate that to D by hand. I have written a tool that takes a COM type library and automatically converts it to a D source file. I could finish it off over the next few days and put the source on GitHub if you're interested.
Jun 13 2016
parent reply Incognito <Incognito regmail.com> writes:
On Monday, 13 June 2016 at 19:11:59 UTC, John wrote:
 On Monday, 13 June 2016 at 17:38:41 UTC, Incognito wrote:
 Cool. Oleview gives me the idl files. How to convert the idl 
 files to d or possibly c?

 Would I just use them in place of IUnknown once I have the 
 interface?
In OleView you can save the IDL file, then run another tool, midl.exe, on the IDL file. That will generate the C headers. But you'd then have to translate that to D by hand. I have written a tool that takes a COM type library and automatically converts it to a D source file. I could finish it off over the next few days and put the source on GitHub if you're interested.
That would be great! With it I might be able to put a nice wrapper around Photoshop for use with D. Others mind find it useful too as other programs still use COM.
Jun 13 2016
next sibling parent Kagamin <spam here.lot> writes:
Visual D has a tool to convert IDL files to D.
Jun 14 2016
prev sibling parent reply John <johnch_atms hotmail.com> writes:
On Monday, 13 June 2016 at 19:26:08 UTC, Incognito wrote:
 On Monday, 13 June 2016 at 19:11:59 UTC, John wrote:
 On Monday, 13 June 2016 at 17:38:41 UTC, Incognito wrote:
 Cool. Oleview gives me the idl files. How to convert the idl 
 files to d or possibly c?

 Would I just use them in place of IUnknown once I have the 
 interface?
In OleView you can save the IDL file, then run another tool, midl.exe, on the IDL file. That will generate the C headers. But you'd then have to translate that to D by hand. I have written a tool that takes a COM type library and automatically converts it to a D source file. I could finish it off over the next few days and put the source on GitHub if you're interested.
That would be great! With it I might be able to put a nice wrapper around Photoshop for use with D. Others mind find it useful too as other programs still use COM.
It's up: https://github.com/jsatellite/tlb2d/tree/master/src/tlb2d There's probably a few bugs, and type libraries have a tendency to re-define existing types so you'll have to comment those out. Also it doesn't generate dependencies, but it does list them at the top of the generated module so you can run the tool on those type libraries manually.
Jun 14 2016
parent reply Joerg Joergonson <JJoergonson gmail.com> writes:
On Tuesday, 14 June 2016 at 11:55:44 UTC, John wrote:
 On Monday, 13 June 2016 at 19:26:08 UTC, Incognito wrote:
 On Monday, 13 June 2016 at 19:11:59 UTC, John wrote:
 On Monday, 13 June 2016 at 17:38:41 UTC, Incognito wrote:
 Cool. Oleview gives me the idl files. How to convert the idl 
 files to d or possibly c?

 Would I just use them in place of IUnknown once I have the 
 interface?
In OleView you can save the IDL file, then run another tool, midl.exe, on the IDL file. That will generate the C headers. But you'd then have to translate that to D by hand. I have written a tool that takes a COM type library and automatically converts it to a D source file. I could finish it off over the next few days and put the source on GitHub if you're interested.
That would be great! With it I might be able to put a nice wrapper around Photoshop for use with D. Others mind find it useful too as other programs still use COM.
It's up: https://github.com/jsatellite/tlb2d/tree/master/src/tlb2d There's probably a few bugs, and type libraries have a tendency to re-define existing types so you'll have to comment those out. Also it doesn't generate dependencies, but it does list them at the top of the generated module so you can run the tool on those type libraries manually.
When I try to compile your code I get the following errors: main.d(953): Error: function core.sys.windows.objbase.CoTaskMemAlloc (uint) is not callable using argument types (immutable(ulong)) main.d(970): Error: can only slice tuple types, not _error_ main.d(974): Error: can only slice tuple types, not _error_ coTaskMemAlloc is defined with ULONG in the objbase.d file... so I have no idea what's going on there. immutable bufferSize = (funcDesc.cParams + 1) * (wchar*).sizeof; auto names = cast(wchar**)CoTaskMemAlloc(bufferSize); The other two I also don't know: params ~= new Parameter(method, (name[0 .. SysStringLen(name)]).toUTF8(), If I run it in ldc I get the error Error: forward reference to inferred return type of function call 'getParameters' private static getParameters(MethodImpl method) { Parameter dummy; return getParameters(method, dummy, false); } It does compile in DMD though. When running I get the error Error loading type library/DLL. The IDL file is in the same directory // Generated .IDL file (by the OLE/COM Object Viewer) // // typelib filename: TypeLibrary.tlb [ uuid(4B0AB3E1-80F1-11CF-86B4-444553540000), version(1.0), helpstring("Adobe Photoshop CC 2014 Type Library"), custom(DE77BA64-517C-11D1-A2DA-0000F8773CE9, 134218331), custom(DE77BA63-517C-11D1-A2DA-0000F8773CE9, 1447490689), custom(DE77BA65-517C-11D1-A2DA-0000F8773CE9, "Created by MIDL version 8.00.0603 at Sat Nov 14 00:44:48 2015 ") ] library PhotoshopTypeLibrary { // TLib : // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046} importlib("stdole2.tlb"); // Forward declare all types defined in this typelib interface IActionReference; interface IActionList; interface IActionDescriptor; interface IActionControl; interface IAutoPSDoc; interface IAction; interface IActions; interface IPhotoshopApplication; typedef [public] __MIDL___MIDL_itf_OLEActions_0000_0000_0001 PSConstants; typedef enum { phDialogDontDisplay = 0, phDialogDisplay = 1, phDialogSilent = 2, phTypeEnumerated = 0x656e756d, phTypeFloat = 0x646f7562, phTypeInteger = 0x6c6f6e67, phTypeBoolean = 0x626f6f6c, phTypeAlias = 0x616c6973, phTypeNull = 0x6e756c6c, phFormAbsolutePosition = 0x696e6478, phFormPropertyID = 0x70726f70, phFormRelativePosition = 0x72656c65, phTypeType = 0x74797065, phTypeChar = 0x54455854, phTypePath = 0x50746820, phTypeObjectSpecifier = 0x6f626a20, phTypeDouble = 0x646f7562, phTypeUnitDouble = 0x556e7446, phEnumGrayscales = 0x47727973, phKeySelection = 0x6673656c, phClassAction = 0x4163746e, phClassActionSet = 0x41536574, phClassAdjustment = 0x41646a73, phClassAdjustmentLayer = 0x41646a4c, phClassAirbrushTool = 0x4162546c, phClassAlphaChannelOptions = 0x4143686c, phClassAntiAliasedPICTAcquire = 0x416e7441, phClassApplication = 0x63617070, phClassArrowhead = 0x63417277, phClassAssert = 0x41737274, phClassAssumedProfile = 0x41737350, phClassBMPFormat = 0x424d5046, phClassBackgroundLayer = 0x42636b4c, phClassBevelEmboss = 0x6562626c, phClassBitmapMode = 0x42746d4d, phClassBlendRange = 0x426c6e64, phClassBlurTool = 0x426c546c, phClassBookColor = 0x426b436c, phClassBrightnessContrast = 0x42726743, phClassBrush = 0x42727368, phClassBurnInTool = 0x4272546c, phClassCachePrefs = 0x43636850, phClassCMYKColor = 0x434d5943, phClassCMYKColorMode = 0x434d594d, phClassCMYKSetup = 0x434d5953, phClassCalculation = 0x436c636c, phClassChannel = 0x43686e6c, phClassChannelMatrix = 0x43684d78, phClassChannelMixer = 0x43686e4d, phClassClippingInfo = 0x436c706f, phClassClippingPath = 0x436c7050, phClassCloneStampTool = 0x436c546c, phClassColor = 0x436c7220, phClassColorBalance = 0x436c7242, phClassColorCorrection = 0x436c7243, phClassColorPickerPrefs = 0x436c726b, phClassColorSampler = 0x436c536d, phClassColorStop = 0x436c7274, phClassCommand = 0x436d6e64, phClassCurves = 0x43727673, phClassCurvePoint = 0x43725074, phClassCustomPalette = 0x4373746c, phClassCurvesAdjustment = 0x43727641, phClassCustomPhosphors = 0x43737450, phClassCustomWhitePoint = 0x43737457, phClassDisplayPrefs = 0x44737050, phClassDocument = 0x44636d6e, phClassDodgeTool = 0x4464546c, phClassDropShadow = 0x44725368, phClassDuotoneInk = 0x44746e49, phClassDuotoneMode = 0x44746e4d, phClassEPSGenericFormat = 0x45505347, phClassEPSPICTPreview = 0x45505343, phClassEPSTIFFPreview = 0x45505354, phClassElement = 0x456c6d6e, phClassEllipse = 0x456c7073, phClassEraserTool = 0x4572546c, phClassExport = 0x45787072, phClassFileInfo = 0x466c496e, phClassFileSavePrefs = 0x466c5376, phClassFlashPixFormat = 0x466c7350, phClassFontDesignAxes = 0x466e7444, phClassFormat = 0x466d7420, phClassFrameFX = 0x46724658, phClassContour = 0x46785363, phClassGeneralPrefs = 0x476e7250, phClassGIF89aExport = 0x47463839, phClassGIFFormat = 0x47464672, phClassGlobalAngle = 0x67626c41, phClassGradient = 0x4772646e, phClassGradientFill = 0x47726466, phClassGradientMap = 0x47644d70, phClassGradientTool = 0x4772546c, phClassGraySetup = 0x47725374, phClassGrayscale = 0x47727363, phClassGrayscaleMode = 0x47727973, phClassGuide = 0x47642020, phClassGuidesPrefs = 0x47645072, phClassHalftoneScreen = 0x486c6653, phClassHalftoneSpec = 0x486c6670, phClassHSBColor = 0x48534243, phClassHSBColorMode = 0x4853424d, phClassHistoryBrushTool = 0x4842546c, phClassHistoryPrefs = 0x43487350, phClassHistoryState = 0x48737453, phClassHueSatAdjustment = 0x48537441, phClassHueSatAdjustmentV2 = 0x48737432, phClassHueSaturation = 0x48537472, phClassIFFFormat = 0x49464646, phClassIllustratorPathsExport = 0x496c7350, phClassImagePoint = 0x496d6750, phClassImport = 0x496d7072, phClassIndexedColorMode = 0x496e6443, phClassInkTransfer = 0x496e6b54, phClassInnerGlow = 0x4972476c, phClassInnerShadow = 0x49725368, phClassInterfaceColor = 0x49436c72, phClassInvert = 0x496e7672, phClassJPEGFormat = 0x4a504547, phClassLabColor = 0x4c62436c, phClassLabColorMode = 0x4c62434d, phClassLayer = 0x4c797220, phClassLayerEffects = 0x4c656678, phClassLayerFXVisible = 0x6c667876, phClassLevels = 0x4c766c73, phClassLevelsAdjustment = 0x4c766c41, phClassLightSource = 0x4c676853, phClassLine = 0x4c6e2020, phClassMacPaintFormat = 0x4d63506e, phClassMagicEraserTool = 0x4d674572, phClassMagicPoint = 0x4d676370, phClassMask = 0x4d736b20, phClassMenuItem = 0x4d6e2020, phClassMode = 0x4d642020, phClassMultichannelMode = 0x4d6c7443, phClassObsoleteTextLayer = 0x54784c79, phClassNull = 0x6e756c6c, phClassOffset = 0x4f667374, phClassOpacity = 0x4f706163, phClassOuterGlow = 0x4f72476c, phClassPDFGenericFormat = 0x50444647, phClassPICTFileFormat = 0x50494346, phClassPICTResourceFormat = 0x50494352, phClassPNGFormat = 0x504e4746, phClassPageSetup = 0x50675374, phClassPaintbrushTool = 0x5062546c, phClassPath = 0x50617468, phClassPathComponent = 0x5061436d, phClassPathPoint = 0x50746870, phClassPattern = 0x50747452, phClassPatternStampTool = 0x5061546c, phClassPencilTool = 0x5063546c, phClassPhotoshop20Format = 0x50687432, phClassPhotoshop35Format = 0x50687433, phClassPhotoshopDCS2Format = 0x50684432, phClassPhotoshopDCSFormat = 0x50684431, phClassPhotoshopEPSFormat = 0x50687445, phClassPhotoshopPDFFormat = 0x50687450, phClassPixel = 0x5078656c, phClassPixelPaintFormat = 0x50786c50, phClassPluginPrefs = 0x506c6750, phClassPoint = 0x506e7420, phClassPoint16 = 0x506e7431, phClassPolygon = 0x506c676e, phClassPosterize = 0x50737472, phClassPreferences = 0x476e7250, phClassProfileSetup = 0x50726653, phClassProperty = 0x50727072, phClassRange = 0x52616e67, phClassRect16 = 0x52637431, phClassRGBColor = 0x52474243, phClassRGBColorMode = 0x5247424d, phClassRGBSetup = 0x52474274, phClassRawFormat = 0x52772020, phClassRectangle = 0x5263746e, phClassSaturationTool = 0x5372546c, phClassScitexCTFormat = 0x53637478, phClassSelection = 0x6373656c, phClassSelectiveColor = 0x536c6343, phClassShapingCurve = 0x53687043, phClassSharpenTool = 0x5368546c, phClassSingleColumn = 0x536e6763, phClassSingleRow = 0x536e6772, phClassBackgroundEraserTool = 0x5345546c, phClassSolidFill = 0x536f4669, phClassArtHistoryBrushTool = 0x4142546c, phClassSmudgeTool = 0x536d546c, phClassSnapshot = 0x536e7053, phClassSpotColorChannel = 0x53436368, phClassStyle = 0x53747943, phClassSubPath = 0x5362706c, phClassTIFFFormat = 0x54494646, phClassTargaFormat = 0x54726746, phClassTextLayer = 0x54784c72, phClassTextStyle = 0x54787453, phClassTextStyleRange = 0x54787474, phClassThreshold = 0x54687273, phClassTool = 0x546f6f6c, phClassTransferSpec = 0x54726670, phClassTransferPoint = 0x44746e50, phClassTransparencyPrefs = 0x54726e50, phClassTransparencyStop = 0x54726e53, phClassUnitsPrefs = 0x556e7450, phClassUnspecifiedColor = 0x556e7343, phClassVersion = 0x5672736e, phClassWebdavPrefs = 0x57646276, phClassXYYColor = 0x58595943, phClassChromeFX = 0x43684658, phClassBackLight = 0x42616b4c, phClassFillFlash = 0x46696c46, phClassColorCast = 0x436f6c43, phEnumAdd = 0x41646420, phEnumAmountHigh = 0x616d4869, phEnumAmountLow = 0x616d4c6f, phEnumAmountMedium = 0x616d4d64, phEnumAntiAliasNone = 0x416e6e6f, phEnumAntiAliasLow = 0x416e4c6f, phEnumAntiAliasMedium = 0x416e4d64, phEnumAntiAliasHigh = 0x416e4869, phEnumAntiAliasCrisp = 0x416e4372, phEnumAntiAliasStrong = 0x416e5374, phEnumAntiAliasSmooth = 0x416e536d, phEnumAppleRGB = 0x41707052, phEnumASCII = 0x41534349, phEnumAskWhenOpening = 0x41736b57, phEnumBicubic = 0x42636263, phEnumBinary = 0x426e7279, phEnumMonitorSetup = 0x4d6e7453, phEnum16BitsPerPixel = 0x31364274, phEnum1BitPerPixel = 0x4f6e4274, phEnum2BitsPerPixel = 0x32427473, phEnum32BitsPerPixel = 0x33324274, phEnum4BitsPerPixel = 0x34427473, phEnum5000 = 0x35303030, phEnum5500 = 0x35353030, phEnum6500 = 0x36353030, phEnum72Color = 0x3732436c, phEnum72Gray = 0x37324772, phEnum7500 = 0x37353030, phEnum8BitsPerPixel = 0x45676842, phEnum9300 = 0x39333030, phEnumA = 0x41202020, phEnumAbsColorimetric = 0x41436c72, phEnumADSBottoms = 0x41644274, phEnumADSCentersH = 0x41644348, phEnumADSCentersV = 0x41644356, phEnumADSHorizontal = 0x41644872, phEnumADSLefts = 0x41644c66, phEnumADSRights = 0x41645267, phEnumADSTops = 0x41645470, phEnumADSVertical = 0x41645672, phEnumAboutApp = 0x41624170, phEnumAbsolute = 0x4162736c, phEnumActualPixels = 0x41637450, phEnumAdaptive = 0x41647074, phEnumAdjustmentOptions = 0x41646a4f, phEnumAirbrushEraser = 0x41726273, phEnumAll = 0x416c2020, phEnumAmiga = 0x416d6761, phEnumAngle = 0x416e676c, phEnumAny = 0x416e7920, phEnumApplyImage = 0x41706c49, phEnumAroundCenter = 0x41726e43, phEnumArrange = 0x41726e67, phEnumAsk = 0x41736b20, phEnumB = 0x42202020, phEnumBack = 0x4261636b, phEnumBackground = 0x42636b67, phEnumBackgroundColor = 0x42636b43, phEnumBackward = 0x42636b77, phEnumBehind = 0x42686e64, phEnumBest = 0x42737420, phEnumBetter = 0x44746862, phEnumBilinear = 0x426c6e72, phEnumBitDepth1 = 0x42443120, phEnumBitDepth16 = 0x42443136, phEnumBitDepth24 = 0x42443234, phEnumBitDepth32 = 0x42443332, phEnumBitDepth4 = 0x42443420, phEnumBitDepth8 = 0x42443820, phEnumBitDepthA1R5G5B5 = 0x31353635, phEnumBitDepthR5G6B5 = 0x78353635, phEnumBitDepthX4R4G4B4 = 0x78343434, phEnumBitDepthA4R4G4B4 = 0x34343434, phEnumBitDepthX8R8G8B8 = 0x78383838, phEnumBitmap = 0x42746d70, phEnumBlack = 0x426c636b, phEnumBlackAndWhite = 0x42616e57, phEnumBlackBody = 0x426c6342, phEnumBlacks = 0x426c6b73, phEnumBlockEraser = 0x426c6b20, phEnumBlast = 0x426c7374, phEnumBlocks = 0x426c6b73, phEnumBlue = 0x426c2020, phEnumBlues = 0x426c7320, phEnumBottom = 0x4274746d, phEnumBrushDarkRough = 0x42724452, phEnumBrushesAppend = 0x42727341, phEnumBrushesDefine = 0x42727344, phEnumBrushesDelete = 0x42727366, phEnumBrushesLoad = 0x42727364, phEnumBrushesNew = 0x4272734e, phEnumBrushesOptions = 0x4272734f, phEnumBrushesReset = 0x42727352, phEnumBrushesSave = 0x42727376, phEnumBrushLightRough = 0x4272734c, phEnumBrushSimple = 0x4272536d, phEnumBrushSize = 0x42727353, phEnumBrushSparkle = 0x42725370, phEnumBrushWideBlurry = 0x42726257, phEnumBrushWideSharp = 0x42727357, phEnumBuiltin = 0x426c746e, phEnumBurnInH = 0x42726e48, phEnumBurnInM = 0x42726e4d, phEnumBurnInS = 0x42726e53, phEnumButtonMode = 0x42746e4d, phEnumCIERGB = 0x43524742, phEnumWidePhosphors = 0x57696465, phEnumWideGamutRGB = 0x57524742, phEnumCMYK = 0x434d594b, phEnumCMYK64 = 0x434d5346, phEnumCMYKColor = 0x45434d59, phEnumCalculations = 0x436c636c, phEnumCascade = 0x43736364, phEnumCenter = 0x436e7472, phEnumCenterGlow = 0x53726343, phEnumCenteredFrame = 0x43747246, phEnumChannelOptions = 0x43686e4f, phEnumChannelsPaletteOptions = 0x43686e50, phEnumCheckerboardNone = 0x4368634e, phEnumCheckerboardSmall = 0x43686353, phEnumCheckerboardMedium = 0x4368634d, phEnumCheckerboardLarge = 0x4368634c, phEnumClear = 0x436c6172, phEnumClearGuides = 0x436c7247, phEnumClipboard = 0x436c7062, phEnumClippingPath = 0x436c7050, phEnumCloseAll = 0x436c7341, phEnumCoarseDots = 0x43727344, phEnumColor = 0x436c7220, phEnumColorBurn = 0x4342726e, phEnumColorDodge = 0x43446467, phEnumColorMatch = 0x436c4d74, phEnumColorNoise = 0x436c4e73, phEnumColorimetric = 0x436c726d, phEnumComposite = 0x436d7073, phEnumConvertToCMYK = 0x436e7643, phEnumConvertToGray = 0x436e7647, phEnumConvertToLab = 0x436e764c, phEnumConvertToRGB = 0x436e7652, phEnumCreateDuplicate = 0x43727444, phEnumCreateInterpolation = 0x43727449, phEnumCross = 0x43727320, phEnumCurrentLayer = 0x4372724c, phEnumCustom = 0x43737420, phEnumCustomPattern = 0x4373746d, phEnumCustomStops = 0x43737453, phEnumCyan = 0x43796e20, phEnumCyans = 0x43796e73, phEnumDark = 0x44726b20, phEnumDarken = 0x44726b6e, phEnumDarkenOnly = 0x44726b4f, phEnumDashedLines = 0x4473684c, phEnumDesaturate = 0x44737474, phEnumDiamond = 0x446d6e64, phEnumDifference = 0x4466726e, phEnumDiffusion = 0x4466736e, phEnumDiffusionDither = 0x44666e44, phEnumDisplayCursorsPreferences = 0x44737043, phEnumDissolve = 0x44736c76, phEnumDistort = 0x44737472, phEnumDodgeH = 0x44646748, phEnumDodgeM = 0x4464674d, phEnumDodgeS = 0x44646753, phEnumDots = 0x44747320, phEnumDraft = 0x44726674, phEnumDuotone = 0x44746e20, phEnumEBUITU = 0x45425420, phEnumEdgeGlow = 0x53726345, phEnumEliminateEvenFields = 0x456c6d45, phEnumEliminateOddFields = 0x456c6d4f, phEnumEllipse = 0x456c7073, phEnumEmboss = 0x456d6273, phEnumExact = 0x45786374, phEnumExclusion = 0x58636c75, phEnumFPXCompressLossyJPEG = 0x46784a50, phEnumFPXCompressNone = 0x46784e6f, phEnumFaster = 0x44746866, phEnumFile = 0x466c6520, phEnumFileInfo = 0x466c496e, phEnumFillBack = 0x466c4263, phEnumFillFore = 0x466c4672, phEnumFillInverse = 0x466c496e, phEnumFillSame = 0x466c536d, phEnumFineDots = 0x466e4474, phEnumFirst = 0x46727374, phEnumFirstIdle = 0x46724964, phEnumFitOnScreen = 0x46744f6e, phEnumForegroundColor = 0x46726743, phEnumForward = 0x46727772, phEnumFreeTransform = 0x46725472, phEnumFront = 0x46726e74, phEnumFullDocument = 0x466c6c44, phEnumFullSize = 0x466c537a, phEnumGaussianDistribution = 0x47736e20, phEnumGIFColorFileColorTable = 0x47464354, phEnumGIFColorFileColors = 0x47464346, phEnumGIFColorFileMicrosoftPalette = 0x47464d53, phEnumGIFPaletteAdaptive = 0x47465041, phEnumGIFPaletteExact = 0x47465045, phEnumGIFPaletteOther = 0x4746504f, phEnumGIFPaletteSystem = 0x47465053, phEnumGIFRequiredColorSpaceIndexed = 0x47464349, phEnumGIFRequiredColorSpaceRGB = 0x47465247, phEnumGIFRowOrderInterlaced = 0x4746494e, phEnumGIFRowOrderNormal = 0x47464e49, phEnumGeneralPreferences = 0x476e7250, phEnumGood = 0x47642020, phEnumGradientFill = 0x4772466c, phEnumGrainClumped = 0x47726e43, phEnumGrainContrasty = 0x4772436e, phEnumGrainEnlarged = 0x47726e45, phEnumGrainHorizontal = 0x47726e48, phEnumGrainRegular = 0x47726e52, phEnumGrainSoft = 0x47725366, phEnumGrainSpeckle = 0x47725370, phEnumGrainSprinkles = 0x47725372, phEnumGrainStippled = 0x47725374, phEnumGrainVertical = 0x47726e56, phEnumGrainyDots = 0x47726e44, phEnumGraphics = 0x47727020, phEnumGray = 0x47727920, phEnumGray16 = 0x47727958, phEnumGray18 = 0x47723138, phEnumGray22 = 0x47723232, phEnumGray50 = 0x47723530, phEnumGrayScale = 0x47727963, phEnumGreen = 0x47726e20, phEnumGreens = 0x47726e73, phEnumGuidesGridPreferences = 0x47756447, phEnumHDTV = 0x48445456, phEnumHSBColor = 0x4853426c, phEnumHSLColor = 0x48534c43, phEnumHalftoneFile = 0x486c6646, phEnumHalftoneScreen = 0x486c6653, phEnumHardLight = 0x4872644c, phEnumHeavy = 0x48767920, phEnumHideAll = 0x4864416c, phEnumHideSelection = 0x4864536c, phEnumHigh = 0x48696768, phEnumHighQuality = 0x48676820, phEnumHighlights = 0x4867686c, phEnumHistogram = 0x48737467, phEnumHistory = 0x48737479, phEnumHistoryPaletteOptions = 0x4873744f, phEnumHistoryPreferences = 0x48737450, phEnumHorizontal = 0x48727a6e, phEnumHorizontalOnly = 0x48727a4f, phEnumHue = 0x48202020, phEnumIBMPC = 0x49424d50, phEnumICC = 0x49434320, phEnumIcon = 0x49636e20, phEnumIdleVM = 0x4964564d, phEnumIgnore = 0x49676e72, phEnumImage = 0x496d6720, phEnumImageCachePreferences = 0x496d6750, phEnumIndexedColor = 0x496e646c, phEnumInfoPaletteOptions = 0x496e6650, phEnumInfoPaletteToggleSamplers = 0x496e6654, phEnumInnerBevel = 0x496e7242, phEnumInsetFrame = 0x496e7346, phEnumInside = 0x496e7364, phEnumJPEG = 0x4a504547, phEnumJustifyAll = 0x4a737441, phEnumJustifyFull = 0x4a737446, phEnumKeepProfile = 0x4b50726f, phEnumKeyboardPreferences = 0x4b796250, phEnumLab = 0x4c616220, phEnumLab48 = 0x4c624346, phEnumLabColor = 0x4c62436c, phEnumLarge = 0x4c726720, phEnumLast = 0x4c737420, phEnumLastFilter = 0x4c737446, phEnumLayerOptions = 0x4c79724f, phEnumLayersPaletteOptions = 0x4c797250, phEnumLeft = 0x4c656674, phEnumLeft_PLUGIN = 0x4c667420, phEnumLevelBased = 0x4c766c42, phEnumLight = 0x4c677420, phEnumLightBlue = 0x4c677442, phEnumLightDirBottom = 0x4c444274, phEnumLightDirBottomLeft = 0x4c44424c, phEnumLightDirBottomRight = 0x4c444252, phEnumLightDirLeft = 0x4c444c66, phEnumLightDirRight = 0x4c445267, phEnumLightDirTop = 0x4c445470, phEnumLightDirTopLeft = 0x4c44544c, phEnumLightDirTopRight = 0x4c445452, phEnumLightGray = 0x4c677447, phEnumLightDirectional = 0x4c676844, phEnumLightenOnly = 0x4c67684f, phEnumLightOmni = 0x4c67684f, phEnumLightPosBottom = 0x4c504274, phEnumLightPosBottomLeft = 0x4c50424c, phEnumLightPosBottomRight = 0x4c504272, phEnumLightPosLeft = 0x4c504c66, phEnumLightPosRight = 0x4c505267, phEnumLightPosTop = 0x4c505470, phEnumLightPosTopLeft = 0x4c50544c, phEnumLightPosTopRight = 0x4c505452, phEnumLightRed = 0x4c677452, phEnumLightSpot = 0x4c676853, phEnumLighten = 0x4c67686e, phEnumLightness = 0x4c676874, phEnumLine = 0x4c6e2020, phEnumLines = 0x4c6e7320, phEnumLinear = 0x4c6e7220, phEnumLinked = 0x4c6e6b64, phEnumLongLines = 0x4c6e674c, phEnumLongStrokes = 0x4c6e6753, phEnumLow = 0x4c6f7720, phEnumLower = 0x4c777220, phEnumLowQuality = 0x4c772020, phEnumLuminosity = 0x4c6d6e73, phEnumMaya = 0x4d617961, phEnumMacThumbnail = 0x4d635468, phEnumMacintosh = 0x4d636e74, phEnumMacintoshSystem = 0x4d636e53, phEnumMagenta = 0x4d676e74, phEnumMagentas = 0x4d676e74, phEnumMask = 0x4d736b20, phEnumMaskedAreas = 0x4d736b41, phEnumMasterAdaptive = 0x4d416470, phEnumMasterPerceptual = 0x4d506572, phEnumMasterSelective = 0x4d53656c, phEnumMaximum = 0x4d786d6d, phEnumMaximumQuality = 0x4d786d20, phEnumMedium = 0x4d64696d, phEnumMediumBlue = 0x4d646d42, phEnumMediumQuality = 0x4d646d20, phEnumMediumDots = 0x4d646d44, phEnumMediumLines = 0x4d646d4c, phEnumMediumStrokes = 0x4d646d53, phEnumMemoryPreferences = 0x4d6d7250, phEnumMergeChannels = 0x4d726743, phEnumMerged = 0x4d726764, phEnumMergedLayers = 0x4d72674c, phEnumMiddle = 0x4d64646c, phEnumMidtones = 0x4d64746e, phEnumModeGray = 0x4d644772, phEnumModeRGB = 0x4d645247, phEnumMonitor = 0x4d6f6e69, phEnumMonotone = 0x4d6e746e, phEnumMulti72Color = 0x3732434d, phEnumMulti72Gray = 0x3732474d, phEnumMultichannel = 0x4d6c7468, phEnumMultiNoCompositePS = 0x4e436d4d, phEnumMultiply = 0x4d6c7470, phEnumNavigatorPaletteOptions = 0x4e766750, phEnumNearestNeighbor = 0x4e727374, phEnumNetscapeGray = 0x4e734772, phEnumNeutrals = 0x4e74726c, phEnumNewView = 0x4e775677, phEnumNext = 0x4e787420, phEnumNikon = 0x4e6b6e20, phEnumNikon105 = 0x4e6b6e31, phEnumNo = 0x4e202020, phEnumNoCompositePS = 0x4e436d70, phEnumNone = 0x4e6f6e65, phEnumNormal = 0x4e726d6c, phEnumNormalPath = 0x4e726d50, phEnumNTSC = 0x4e545343, phEnumNull = 0x6e756c6c, phEnumOS2 = 0x4f533220, phEnumOff = 0x4f666620, phEnumOn = 0x4f6e2020, phEnumOpenAs = 0x4f704173, phEnumOrange = 0x4f726e67, phEnumOutFromCenter = 0x4f744672, phEnumOutOfGamut = 0x4f744f66, phEnumOuterBevel = 0x4f747242, phEnumOutside = 0x4f747364, phEnumOutsetFrame = 0x4f757446, phEnumOverlay = 0x4f76726c, phEnumPaintbrushEraser = 0x506e7462, phEnumPencilEraser = 0x506e636c, phEnumP22EBU = 0x50323242, phEnumPNGFilterAdaptive = 0x50474164, phEnumPNGFilterAverage = 0x50474176, phEnumPNGFilterNone = 0x50474e6f, phEnumPNGFilterPaeth = 0x50475074, phEnumPNGFilterSub = 0x50475362, phEnumPNGFilterUp = 0x50475570, phEnumPNGInterlaceAdam7 = 0x50474941, phEnumPNGInterlaceNone = 0x5047494e, phEnumPagePosCentered = 0x50675043, phEnumPagePosTopLeft = 0x5067544c, phEnumPageSetup = 0x50675374, phEnumPalSecam = 0x506c5363, phEnumPanaVision = 0x506e5673, phEnumPathsPaletteOptions = 0x50746850, phEnumPattern = 0x5074726e, phEnumPatternDither = 0x50746e44, phEnumPerceptual = 0x50657263, phEnumPerspective = 0x50727370, phEnumPhotoshopPicker = 0x5068746b, phEnumPickCMYK = 0x50636b43, phEnumPickGray = 0x50636b47, phEnumPickHSB = 0x50636b48, phEnumPickLab = 0x50636b4c, phEnumPickOptions = 0x50636b4f, phEnumPickRGB = 0x50636b52, phEnumPillowEmboss = 0x506c4562, phEnumPixelPaintSize1 = 0x50785331, phEnumPixelPaintSize2 = 0x50785332, phEnumPixelPaintSize3 = 0x50785333, phEnumPixelPaintSize4 = 0x50785334, phEnumPlace = 0x506c6365, phEnumPlaybackOptions = 0x50626b4f, phEnumPluginPicker = 0x506c6750, phEnumPluginsScratchDiskPreferences = 0x506c6753, phEnumPolarToRect = 0x506c7252, phEnumPondRipples = 0x506e6452, phEnumPrecise = 0x50726320, phEnumPreciseMatte = 0x5072424c, phEnumPreviewOff = 0x5072764f, phEnumPreviewCMYK = 0x50727643, phEnumPreviewCyan = 0x50727679, phEnumPreviewMagenta = 0x5072764d, phEnumPreviewYellow = 0x50727659, phEnumPreviewBlack = 0x50727642, phEnumPreviewCMY = 0x5072764e, phEnumPrevious = 0x50727673, phEnumPrimaries = 0x5072696d, phEnumPrintSize = 0x50726e53, phEnumPrintingInksSetup = 0x50726e49, phEnumPurple = 0x50727020, phEnumPyramids = 0x5079726d, phEnumQCSAverage = 0x51637361, phEnumQCSCorner0 = 0x51637330, phEnumQCSCorner1 = 0x51637331, phEnumQCSCorner2 = 0x51637332, phEnumQCSCorner3 = 0x51637333, phEnumQCSIndependent = 0x51637369, phEnumQCSSide0 = 0x51637334, phEnumQCSSide1 = 0x51637335, phEnumQCSSide2 = 0x51637336, phEnumQCSSide3 = 0x51637337, phEnumQuadtone = 0x5164746e, phEnumQueryAlways = 0x51757241, phEnumQueryAsk = 0x5175726c, phEnumQueryNever = 0x5175724e, phEnumRepeat = 0x52707420, phEnumRGB = 0x52474220, phEnumRGB48 = 0x52474246, phEnumRGBColor = 0x52474243, phEnumRadial = 0x52646c20, phEnumRandom = 0x526e646d, phEnumRectToPolar = 0x52637450, phEnumRed = 0x52642020, phEnumRedrawComplete = 0x5264436d, phEnumReds = 0x52647320, phEnumReflected = 0x52666c63, phEnumRelative = 0x526c7476, phEnumRepeatEdgePixels = 0x52707445, phEnumRevealAll = 0x52766c41, phEnumRevealSelection = 0x52766c53, phEnumRevert = 0x52767274, phEnumRight = 0x52676874, phEnumRotate = 0x52747465, phEnumRotoscopingPreferences = 0x52747350, phEnumRound = 0x526e6420, phEnumRulerCm = 0x5272436d, phEnumRulerInches = 0x5272496e, phEnumRulerPercent = 0x52725072, phEnumRulerPicas = 0x52725069, phEnumRulerPixels = 0x52725078, phEnumRulerPoints = 0x52725074, phEnumAdobeRGB1998 = 0x534d5054, phEnumSMPTEC = 0x534d5043, phEnumSRGB = 0x53524742, phEnumSample3x3 = 0x536d7033, phEnumSample5x5 = 0x536d7035, phEnumSamplePoint = 0x536d7050, phEnumSaturate = 0x53747220, phEnumSaturation = 0x53747274, phEnumSaved = 0x53766564, phEnumSaveForWeb = 0x53766677, phEnumSavingFilesPreferences = 0x53766e46, phEnumScale = 0x53636c20, phEnumScreen = 0x5363726e, phEnumScreenCircle = 0x53637243, phEnumScreenDot = 0x53637244, phEnumScreenLine = 0x5363724c, phEnumSelectedAreas = 0x536c6341, phEnumSelection = 0x536c6374, phEnumSelective = 0x53656c65, phEnumSeparationSetup = 0x53707253, phEnumSeparationTables = 0x53707254, phEnumShadows = 0x53686477, phEnumContourLinear = 0x73703031, phEnumContourGaussian = 0x73703032, phEnumContourSingle = 0x73703033, phEnumContourDouble = 0x73703034, phEnumContourTriple = 0x73703035, phEnumContourCustom = 0x73703036, phEnumShortLines = 0x5368724c, phEnumShortStrokes = 0x53685374, phEnumSingle72Color = 0x37324353, phEnumSingle72Gray = 0x37324753, phEnumSingleNoCompositePS = 0x4e436d53, phEnumSkew = 0x536b6577, phEnumSlopeLimitMatte = 0x536c6d74, phEnumSmall = 0x536d6c20, phEnumSmartBlurModeEdgeOnly = 0x53424d45, phEnumSmartBlurModeNormal = 0x53424d4e, phEnumSmartBlurModeOverlayEdge = 0x53424d4f, phEnumSmartBlurQualityHigh = 0x53425148, phEnumSmartBlurQualityLow = 0x5342514c, phEnumSmartBlurQualityMedium = 0x5342514d, phEnumSnapshot = 0x536e7073, phEnumSolidColor = 0x53436c72, phEnumSoftLight = 0x5366744c, phEnumSoftMatte = 0x5366424c, phEnumSpectrum = 0x53706374, phEnumSpin = 0x53706e20, phEnumSpotColor = 0x53706f74, phEnumSquare = 0x53717220, phEnumStagger = 0x53746772, phEnumStampIn = 0x496e2020, phEnumStampOut = 0x4f757420, phEnumStandard = 0x53746420, phEnumStdA = 0x53746441, phEnumStdB = 0x53746442, phEnumStdC = 0x53746443, phEnumStdE = 0x53746445, phEnumStretchToFit = 0x53747246, phEnumStrokeDirHorizontal = 0x5344487a, phEnumStrokeDirLeftDiag = 0x53444c44, phEnumStrokeDirRightDiag = 0x53445244, phEnumStrokeDirVertical = 0x53445674, phEnumStylesAppend = 0x536c7341, phEnumStylesDelete = 0x536c7366, phEnumStylesLoad = 0x536c7364, phEnumStylesNew = 0x536c734e, phEnumStylesReset = 0x536c7352, phEnumStylesSave = 0x536c7376, phEnumSubtract = 0x53627472, phEnumSwatchesAppend = 0x53777441, phEnumSwatchesReplace = 0x53777470, phEnumSwatchesReset = 0x53777452, phEnumSwatchesSave = 0x53777453, phEnumSystemPicker = 0x53797350, phEnumTables = 0x54626c20, phEnumTarget = 0x54726774, phEnumTargetPath = 0x54726770, phEnumTexTypeBlocks = 0x5478426c, phEnumTexTypeBrick = 0x54784272, phEnumTexTypeBurlap = 0x54784275, phEnumTexTypeCanvas = 0x54784361, phEnumTexTypeFrosted = 0x54784672, phEnumTexTypeSandstone = 0x54785374, phEnumTexTypeTinyLens = 0x5478544c, phEnumThreshold = 0x54687268, phEnumThumbnail = 0x54686d62, phEnumTIFF = 0x54494646, phEnumTile = 0x54696c65, phEnumTile_PLUGIN = 0x546c2020, phEnumToggleActionsPalette = 0x54676c41, phEnumToggleBlackPreview = 0x54674250, phEnumToggleBrushesPalette = 0x54676c42, phEnumToggleCMYKPreview = 0x54676c43, phEnumToggleCMYPreview = 0x5467434d, phEnumToggleChannelsPalette = 0x54676c68, phEnumToggleColorPalette = 0x54676c63, phEnumToggleCyanPreview = 0x54674350, phEnumToggleEdges = 0x54676c45, phEnumToggleGamutWarning = 0x54676c47, phEnumToggleGrid = 0x54674772, phEnumToggleGuides = 0x54676c64, phEnumToggleHistoryPalette = 0x54676c48, phEnumToggleInfoPalette = 0x54676c49, phEnumToggleLayerMask = 0x54676c4d, phEnumToggleLayersPalette = 0x54676c79, phEnumToggleLockGuides = 0x54676c4c, phEnumToggleMagentaPreview = 0x54674d50, phEnumToggleNavigatorPalette = 0x54676c4e, phEnumToggleOptionsPalette = 0x54676c4f, phEnumTogglePaths = 0x54676c50, phEnumTogglePathsPalette = 0x54676c74, phEnumToggleRGBMacPreview = 0x54724d70, phEnumToggleRGBWindowsPreview = 0x54725770, phEnumToggleRGBUncompensatedPreview = 0x54725570, phEnumToggleRulers = 0x54676c52, phEnumToggleSnapToGrid = 0x5467536e, phEnumToggleSnapToGuides = 0x54676c53, phEnumToggleStatusBar = 0x54676c73, phEnumToggleStylesPalette = 0x5467536c, phEnumToggleSwatchesPalette = 0x54676c77, phEnumToggleToolsPalette = 0x54676c54, phEnumToggleYellowPreview = 0x54675950, phEnumTop = 0x546f7020, phEnumTransparency = 0x54727370, phEnumTransparencyGamutPreferences = 0x54726e47, phEnumTransparent = 0x54726e73, phEnumTrinitron = 0x54726e74, phEnumTritone = 0x5472746e, phEnumUIBitmap = 0x5542746d, phEnumUICMYK = 0x55434d59, phEnumUIDuotone = 0x5544746e, phEnumUIGrayscale = 0x55477279, phEnumUIIndexed = 0x55496e64, phEnumUILab = 0x554c6162, phEnumUIMultichannel = 0x554d6c74, phEnumUIRGB = 0x55524742, phEnumUndo = 0x556e6420, phEnumUniform = 0x556e666d, phEnumUniformDistribution = 0x556e6672, phEnumUnitsRulersPreferences = 0x556e7452, phEnumUpper = 0x55707220, phEnumUserStop = 0x55737253, phEnumVMPreferences = 0x564d5072, phEnumVertical = 0x56727463, phEnumVerticalOnly = 0x5672744f, phEnumViolet = 0x566c7420, phEnumWaveSine = 0x5776536e, phEnumWaveSquare = 0x57765371, phEnumWaveTriangle = 0x57765472, phEnumWeb = 0x57656220, phEnumWhite = 0x57687420, phEnumWhites = 0x57687473, phEnumWinThumbnail = 0x576e5468, phEnumWind = 0x576e6420, phEnumWindows = 0x57696e20, phEnumWindowsSystem = 0x576e6453, phEnumWrap = 0x57727020, phEnumWrapAround = 0x57727041, phEnumWorkPath = 0x57726b50, phEnumYellow = 0x596c6c77, phEnumYellowColor = 0x596c7720, phEnumYellows = 0x596c7773, phEnumYes = 0x59732020, phEnumZip = 0x5a70456e, phEnumZoom = 0x5a6d2020, phEnumZoomIn = 0x5a6d496e, phEnumZoomOut = 0x5a6d4f74, phEvent3DTransform = 0x54645420, phEventApplyStyle = 0x41537479, phEventAssert = 0x41737274, phEventAccentedEdges = 0x41636345, phEventAdd = 0x41646420, phEventAddNoise = 0x41644e73, phEventAddTo = 0x41646454, phEventAlign = 0x416c676e, phEventAll = 0x416c6c20, phEventAngledStrokes = 0x416e6753, phEventApplyImage = 0x41707049, phEventBasRelief = 0x4273526c, phEventBatch = 0x42746368, phEventBatchFromDroplet = 0x42746346, phEventBlur = 0x426c7220, phEventBlurMore = 0x426c724d, phEventBorder = 0x42726472, phEventBrightness = 0x42726743, phEventCanvasSize = 0x436e7653, phEventChalkCharcoal = 0x43686c43, phEventChannelMixer = 0x43686e4d, phEventCharcoal = 0x43687263, phEventChrome = 0x4368726d, phEventClear = 0x436c6572, phEventClose = 0x436c7320, phEventClouds = 0x436c6473, phEventColorBalance = 0x436c7242, phEventColorHalftone = 0x436c7248, phEventColorRange = 0x436c7252, phEventColoredPencil = 0x436c7250, phEventConteCrayon = 0x436e7443, phEventContract = 0x436e7463, phEventConvertMode = 0x436e764d, phEventCopy = 0x636f7079, phEventCopyEffects = 0x43704658, phEventCopyMerged = 0x4370794d, phEventCopyToLayer = 0x4370544c, phEventCraquelure = 0x4372716c, phEventCreateDroplet = 0x43727444, phEventCrop = 0x43726f70, phEventCrosshatch = 0x43727368, phEventCrystallize = 0x43727374, phEventCurves = 0x43727673, phEventCustom = 0x4373746d, phEventCut = 0x63757420, phEventCutToLayer = 0x4374544c, phEventCutout = 0x43742020, phEventDarkStrokes = 0x44726b53, phEventDeInterlace = 0x446e7472, phEventDefinePattern = 0x44666e50, phEventDefringe = 0x44667267, phEventDelete = 0x446c7420, phEventDesaturate = 0x44737474, phEventDeselect = 0x44736c63, phEventDespeckle = 0x44737063, phEventDifferenceClouds = 0x44667243, phEventDiffuse = 0x44667320, phEventDiffuseGlow = 0x44667347, phEventDisableLayerFX = 0x646c6678, phEventDisplace = 0x4473706c, phEventDistribute = 0x44737472, phEventDraw = 0x44726177, phEventDryBrush = 0x44727942, phEventDuplicate = 0x44706c63, phEventDustAndScratches = 0x44737453, phEventEmboss = 0x456d6273, phEventEqualize = 0x45716c7a, phEventExchange = 0x45786368, phEventExpand = 0x4578706e, phEventExport = 0x45787072, phEventJumpto = 0x4a70746f, phEventExtrude = 0x45787472, phEventFacet = 0x46637420, phEventFade = 0x46616465, phEventFeather = 0x46746872, phEventFill = 0x466c2020, phEventFilmGrain = 0x466c6d47, phEventFilter = 0x466c7472, phEventFindEdges = 0x466e6445, phEventFlattenImage = 0x466c7449, phEventFlip = 0x466c6970, phEventFragment = 0x4672676d, phEventFresco = 0x46727363, phEventGaussianBlur = 0x47736e42, phEventGet = 0x67657464, phEventGlass = 0x476c7320, phEventGlowingEdges = 0x476c7745, phEventGradient = 0x4772646e, phEventGradientMap = 0x47724d70, phEventGrain = 0x47726e20, phEventGraphicPen = 0x47726150, phEventGroup = 0x4772704c, phEventGrow = 0x47726f77, phEventHalftoneScreen = 0x486c6653, phEventHide = 0x48642020, phEventHighPass = 0x48676850, phEventHSBHSL = 0x48736250, phEventHueSaturation = 0x48537472, phEventImageSize = 0x496d6753, phEventImport = 0x496d7072, phEventInkOutlines = 0x496e6b4f, phEventIntersect = 0x496e7472, phEventIntersectWith = 0x496e7457, phEventInverse = 0x496e7673, phEventInvert = 0x496e7672, phEventLensFlare = 0x4c6e7346, phEventLevels = 0x4c766c73, phEventLightingEffects = 0x4c676845, phEventLink = 0x4c6e6b20, phEventMake = 0x4d6b2020, phEventMaximum = 0x4d786d20, phEventMedian = 0x4d646e20, phEventMergeLayers = 0x4d72674c, phEventMergeSpotChannel = 0x4d537074, phEventMergeVisible = 0x4d726756, phEventMezzotint = 0x4d7a746e, phEventMinimum = 0x4d6e6d20, phEventMosaic = 0x4d736320, phEventMosaic_PLUGIN = 0x4d736354, phEventMotionBlur = 0x4d746e42, phEventMove = 0x6d6f7665, phEventNTSCColors = 0x4e545343, phEventNeonGlow = 0x4e476c77, phEventNext = 0x4e787420, phEventNotePaper = 0x4e745072, phEventNotify = 0x4e746679, phEventNull = 0x6e756c6c, phEventOceanRipple = 0x4f636e52, phEventOffset = 0x4f667374, phEventOpen = 0x4f706e20, phEventPaintDaubs = 0x506e7444, phEventPaletteKnife = 0x506c744b, phEventPaste = 0x70617374, phEventPasteEffects = 0x50614658, phEventPasteInto = 0x50737449, phEventPasteOutside = 0x5073744f, phEventPatchwork = 0x50746368, phEventPhotocopy = 0x50687463, phEventPinch = 0x506e6368, phEventPlace = 0x506c6320, phEventPlaster = 0x506c7374, phEventPlasticWrap = 0x506c7357, phEventPlay = 0x506c7920, phEventPointillize = 0x506e746c, phEventPolar = 0x506c7220, phEventPosterEdges = 0x50737445, phEventPosterize = 0x50737472, phEventPrevious = 0x50727673, phEventPrint = 0x50726e74, phEventProfileToProfile = 0x50726654, phEventPurge = 0x50726765, phEventQuit = 0x71756974, phEventRadialBlur = 0x52646c42, phEventRasterize = 0x52737472, phEventRasterizeTypeSheet = 0x52737454, phEventRemoveBlackMatte = 0x526d7642, phEventRemoveLayerMask = 0x526d764c, phEventRemoveWhiteMatte = 0x526d7657, phEventRename = 0x526e6d20, phEventReplaceColor = 0x52706c43, phEventReset = 0x52736574, phEventReticulation = 0x5274636c, phEventRevert = 0x52767274, phEventRipple = 0x52706c65, phEventRotate = 0x52747465, phEventRoughPastels = 0x52676850, phEventSave = 0x73617665, phEventSelect = 0x736c6374, phEventSelectiveColor = 0x536c6343, phEventSet = 0x73657464, phEventSharpenEdges = 0x53687245, phEventSharpen = 0x53687270, phEventSharpenMore = 0x5368724d, phEventShear = 0x53687220, phEventShow = 0x53687720, phEventSimilar = 0x536d6c72, phEventSmartBlur = 0x536d7242, phEventSmooth = 0x536d7468, phEventSmudgeStick = 0x536d6453, phEventSolarize = 0x536c727a, phEventSpatter = 0x53707420, phEventSpherize = 0x53706872, phEventSplitChannels = 0x53706c43, phEventSponge = 0x53706e67, phEventSprayedStrokes = 0x53707253, phEventStainedGlass = 0x53746e47,
Jun 14 2016
next sibling parent reply Joerg Joergonson <JJoergonson gmail.com> writes:
        phEventStamp = 0x53746d70,
         phEventStop = 0x53746f70,
         phEventStroke = 0x5374726b,
         phEventSubtract = 0x53627472,
         phEventSubtractFrom = 0x53627446,
         phEventSumie = 0x536d6965,
         phEventTakeMergedSnapshot = 0x546b4d72,
         phEventTakeSnapshot = 0x546b536e,
         phEventTextureFill = 0x54787446,
         phEventTexturizer = 0x5478747a,
         phEventThreshold = 0x54687273,
         phEventTiles = 0x546c7320,
         phEventTornEdges = 0x54726e45,
         phEventTraceContour = 0x54726343,
         phEventTransform = 0x54726e66,
         phEventTrap = 0x54726170,
         phEventTwirl = 0x5477726c,
         phEventUnderpainting = 0x556e6472,
         phEventUndo = 0x756e646f,
         phEventUngroup = 0x556e6772,
         phEventUnlink = 0x556e6c6b,
         phEventUnsharpMask = 0x556e734d,
         phEventVariations = 0x5672746e,
         phEventWait = 0x57616974,
         phEventWaterPaper = 0x57747250,
         phEventWatercolor = 0x57747263,
         phEventWave = 0x57617665,
         phEventWind = 0x576e6420,
         phEventZigZag = 0x5a675a67,
         phEventBackLight = 0x4261634c,
         phEventFillFlash = 0x46696c45,
         phEventColorCast = 0x436f6c45,
         phFormClass = 0x436c7373,
         phFormEnumerated = 0x456e6d72,
         phFormIdentifier = 0x49646e74,
         phFormIndex = 0x696e6478,
         phFormOffset = 0x72656c65,
         phFormProperty = 0x70726f70,
         phKey3DAntiAlias = 0x416c6973,
         phKeyA = 0x41202020,
         phKeyAdjustment = 0x41646a73,
         phKeyAligned = 0x416c6764,
         phKeyAlignment = 0x416c676e,
         phKeyAllPS = 0x416c6c20,
         phKeyAllExcept = 0x416c6c45,
         phKeyAllToolOptions = 0x416c546c,
         phKeyAlphaChannelOptions = 0x4143686e,
         phKeyAlphaChannels = 0x416c7043,
         phKeyAmbientBrightness = 0x416d6242,
         phKeyAmbientColor = 0x416d6243,
         phKeyAmount = 0x416d6e74,
         phKeyAmplitudeMax = 0x416d4d78,
         phKeyAmplitudeMin = 0x416d4d6e,
         phKeyAnchor = 0x416e6368,
         phKeyAngle = 0x416e676c,
         phKeyAngle1 = 0x416e6731,
         phKeyAngle2 = 0x416e6732,
         phKeyAngle3 = 0x416e6733,
         phKeyAngle4 = 0x416e6734,
         phKeyAntiAlias = 0x416e7441,
         phKeyAppend = 0x41707065,
         phKeyApply = 0x41706c79,
         phKeyArea = 0x41722020,
         phKeyArrowhead = 0x41727277,
         phKeyAs = 0x41732020,
         phKeyAssumedCMYK = 0x41737343,
         phKeyAssumedGray = 0x41737347,
         phKeyAssumedRGB = 0x41737352,
         phKeyAt = 0x41742020,
         phKeyAuto = 0x4175746f,
         phKeyAutoContrast = 0x4175436f,
         phKeyAutoErase = 0x41747273,
         phKeyAutoKern = 0x41744b72,
         phKeyAutoUpdate = 0x41745570,
         phKeyAxis = 0x41786973,
         phKeyB = 0x42202020,
         phKeyBackground = 0x42636b67,
         phKeyBackgroundColor = 0x42636b43,
         phKeyBackgroundLevel = 0x42636b4c,
         phKeyBackward = 0x42776420,
         phKeyBalance = 0x426c6e63,
         phKeyBaselineShift = 0x42736c6e,
         phKeyBeepWhenDone = 0x42705768,
         phKeyBeginRamp = 0x42676e52,
         phKeyBeginSustain = 0x42676e53,
         phKeyBevelDirection = 0x62766c44,
         phKeyBevelEmboss = 0x6562626c,
         phKeyBevelStyle = 0x62766c53,
         phKeyBevelTechnique = 0x62766c54,
         phKeyBigNudgeH = 0x42674e48,
         phKeyBigNudgeV = 0x42674e56,
         phKeyBitDepth = 0x42744470,
         phKeyBlack = 0x426c636b,
         phKeyBlackClip = 0x426c6343,
         phKeyBlackGeneration = 0x426c636e,
         phKeyBlackGenerationCurve = 0x426c6347,
         phKeyBlackIntensity = 0x426c6349,
         phKeyBlackLevel = 0x426c634c,
         phKeyBlackLimit = 0x426c634c,
         phKeyBleed = 0x426c6420,
         phKeyBlendRange = 0x426c6e64,
         phKeyBlue = 0x426c2020,
         phKeyBlueBlackPoint = 0x426c426c,
         phKeyBlueGamma = 0x426c476d,
         phKeyBlueWhitePoint = 0x426c5768,
         phKeyBlueX = 0x426c5820,
         phKeyBlueY = 0x426c5920,
         phKeyBlur = 0x626c7572,
         phKeyBlurMethod = 0x426c724d,
         phKeyBlurQuality = 0x426c7251,
         phKeyBook = 0x426b2020,
         phKeyBorderThickness = 0x42726454,
         phKeyBottom = 0x42746f6d,
         phKeyBrightness = 0x42726768,
         phKeyBrushDetail = 0x42727344,
         phKeyBrushes = 0x42727368,
         phKeyBrushSize = 0x42727353,
         phKeyBrushType = 0x42727354,
         phKeyBumpAmplitude = 0x426d7041,
         phKeyBumpChannel = 0x426d7043,
         phKeyBy = 0x42792020,
         phKeyByline = 0x42796c6e,
         phKeyBylineTitle = 0x42796c54,
         phKeyByteOrder = 0x4279744f,
         phKeyCachePrefs = 0x43636850,
         phKeyChokeMatte = 0x436b6d74,
         phKeyCloneSource = 0x436c6e53,
         phKeyCMYKSetup = 0x434d5953,
         phKeyCalculation = 0x436c636c,
         phKeyCalibrationBars = 0x436c6272,
         phKeyCaption = 0x4370746e,
         phKeyCaptionWriter = 0x43707457,
         phKeyCategory = 0x43746772,
         phKeyCellSize = 0x436c537a,
         phKeyCenter = 0x436e7472,
         phKeyCenterCropMarks = 0x436e7443,
         phKeyChalkArea = 0x43686c41,
         phKeyChannel = 0x43686e6c,
         phKeyChannelMatrix = 0x43684d78,
         phKeyChannelName = 0x43686e4e,
         phKeyChannels = 0x43686e73,
         phKeyChannelsInterleaved = 0x43686e49,
         phKeyCharcoalAmount = 0x4368416d,
         phKeyCharcoalArea = 0x43687241,
         phKeyChromeFX = 0x43684658,
         phKeyCity = 0x43697479,
         phKeyClearAmount = 0x436c7241,
         phKeyClippingPath = 0x436c5074,
         phKeyClippingPathEPS = 0x436c7050,
         phKeyClippingPathFlatness = 0x436c7046,
         phKeyClippingPathIndex = 0x436c7049,
         phKeyClippingPathInfo = 0x436c7067,
         phKeyClosedSubpath = 0x436c7370,
         phKeyColor = 0x436c7220,
         phKeyColorChannels = 0x436c7268,
         phKeyColorCorrection = 0x436c7243,
         phKeyColorIndicates = 0x436c7249,
         phKeyColorManagement = 0x436c4d67,
         phKeyColorPickerPrefs = 0x436c7272,
         phKeyColorTable = 0x436c7254,
         phKeyColorize = 0x436c727a,
         phKeyColors = 0x436c7273,
         phKeyColorsList = 0x436c724c,
         phKeyColorSpace = 0x436c7253,
         phKeyColumnWidth = 0x436c6d57,
         phKeyCommandKey = 0x436d644b,
         phKeyCompensation = 0x436d706e,
         phKeyCompression = 0x436d7072,
         phKeyConcavity = 0x436e6376,
         phKeyCondition = 0x436e6474,
         phKeyConstant = 0x436e7374,
         phKeyConstrain = 0x436e7374,
         phKeyConstrainProportions = 0x436e7350,
         phKeyConstructionFOV = 0x43666f76,
         phKeyContiguous = 0x436e7467,
         phKeyContinue = 0x436e746e,
         phKeyContinuity = 0x436e7479,
         phKeyContrast = 0x436e7472,
         phKeyConvert = 0x436e7672,
         phKeyCopy = 0x43707920,
         phKeyCopyright = 0x43707972,
         phKeyCopyrightNotice = 0x4370724e,
         phKeyCornerCropMarks = 0x43726e43,
         phKeyCount = 0x436e7420,
         phKeyCountryName = 0x436e744e,
         phKeyCrackBrightness = 0x43726342,
         phKeyCrackDepth = 0x43726344,
         phKeyCrackSpacing = 0x43726353,
         phKeyCreateLayersFromLayerFX = 0x626c666c,
         phKeyCredit = 0x43726474,
         phKeyCrossover = 0x43727373,
         phKeyCurrent = 0x43726e74,
         phKeyCurrentHistoryState = 0x43726e48,
         phKeyCurrentLight = 0x43726e4c,
         phKeyCurrentToolOptions = 0x43726e54,
         phKeyCurve = 0x43727620,
         phKeyCurveFile = 0x43727646,
         phKeyCustom = 0x4373746d,
         phKeyCustomForced = 0x43737446,
         phKeyCustomMatte = 0x4373744d,
         phKeyCustomPalette = 0x43737450,
         phKeyCyan = 0x43796e20,
         phKeyDarkIntensity = 0x44726b49,
         phKeyDarkness = 0x44726b6e,
         phKeyDateCreated = 0x44744372,
         phKeyDatum = 0x44742020,
         phKeyDCS = 0x44435320,
         phKeyDefinition = 0x44666e74,
         phKeyDensity = 0x446e7374,
         phKeyDepth = 0x44707468,
         phKeyDestBlackMax = 0x4473746c,
         phKeyDestBlackMin = 0x44737442,
         phKeyDestinationMode = 0x4473744d,
         phKeyDestWhiteMax = 0x44737474,
         phKeyDestWhiteMin = 0x44737457,
         phKeyDetail = 0x44746c20,
         phKeyDiameter = 0x446d7472,
         phKeyDiffusionDither = 0x44666644,
         phKeyDirection = 0x44726374,
         phKeyDirectionBalance = 0x44726342,
         phKeyDisplaceFile = 0x44737046,
         phKeyDisplacementMap = 0x4473704d,
         phKeyDisplayPrefs = 0x44737050,
         phKeyDistance = 0x4473746e,
         phKeyDistortion = 0x44737472,
         phKeyDistribution = 0x44737472,
         phKeyDither = 0x44746872,
         phKeyDitherAmount = 0x44746841,
         phKeyDitherPreserve = 0x44746870,
         phKeyDitherQuality = 0x44746871,
         phKeyDocumentID = 0x446f6349,
         phKeyDotGain = 0x4474476e,
         phKeyDotGainCurves = 0x44744743,
         phKeyDropShadow = 0x44725368,
         phKeyDuplicate = 0x44706c63,
         phKeyDynamicColorSliders = 0x446e6d43,
         phKeyEdge = 0x45646720,
         phKeyEdgeBrightness = 0x45646742,
         phKeyEdgeFidelity = 0x45646746,
         phKeyEdgeIntensity = 0x45646749,
         phKeyEdgeSimplicity = 0x45646753,
         phKeyEdgeThickness = 0x45646754,
         phKeyEdgeWidth = 0x45646757,
         phKeyEffect = 0x45666663,
         phKeyEmbedProfiles = 0x456d6250,
         phKeyEmbedCMYK = 0x456d6243,
         phKeyEmbedGray = 0x456d6247,
         phKeyEmbedLab = 0x456d624c,
         phKeyEmbedRGB = 0x456d6252,
         phKeyEmulsionDown = 0x456d6c44,
         phKeyEnabled = 0x656e6162,
         phKeyEncoding = 0x456e6364,
         phKeyEnd = 0x456e6420,
         phKeyEndArrowhead = 0x456e6441,
         phKeyEndRamp = 0x456e6452,
         phKeyEndSustain = 0x456e6453,
         phKeyEngine = 0x456e676e,
         phKeyEraserKind = 0x4572734b,
         phKeyEraseToHistory = 0x45727354,
         phKeyExactPoints = 0x45786350,
         phKeyExport = 0x45787072,
         phKeyExportClipboard = 0x45787043,
         phKeyExposure = 0x45787073,
         phKeyExtend = 0x45787464,
         phKeyExtension = 0x4578746e,
         phKeyExtensionsQuery = 0x45787451,
         phKeyExtrudeDepth = 0x45787444,
         phKeyExtrudeMaskIncomplete = 0x4578744d,
         phKeyExtrudeRandom = 0x45787452,
         phKeyExtrudeSize = 0x45787453,
         phKeyExtrudeSolidFace = 0x45787446,
         phKeyExtrudeType = 0x45787454,
         phKeyEyeDropperSample = 0x45794472,
         phKeyFadeoutSteps = 0x46647453,
         phKeyFadeTo = 0x46645420,
         phKeyFalloff = 0x466c4f66,
         phKeyFPXCompress = 0x4678436d,
         phKeyFPXQuality = 0x4678516c,
         phKeyFPXSize = 0x4678537a,
         phKeyFPXView = 0x46785677,
         phKeyFeather = 0x46746872,
         phKeyFiberLength = 0x4662724c,
         phKeyFile = 0x46696c65,
         phKeyFileCreator = 0x466c4372,
         phKeyFileInfo = 0x466c496e,
         phKeyFileReference = 0x46696c52,
         phKeyFileSavePrefs = 0x466c5350,
         phKeyFileType = 0x466c5479,
         phKeyFill = 0x466c2020,
         phKeyFillColor = 0x466c436c,
         phKeyFillNeutral = 0x466c4e74,
         phKeyFingerpainting = 0x466e6772,
         phKeyFlareCenter = 0x466c7243,
         phKeyFlatness = 0x466c746e,
         phKeyFlatten = 0x466c7474,
         phKeyFlipVertical = 0x466c7056,
         phKeyFocus = 0x46637320,
         phKeyFolders = 0x466c6472,
         phKeyFontDesignAxes = 0x466e7444,
         phKeyFontDesignAxesVectors = 0x466e7456,
         phKeyFontName = 0x466e744e,
         phKeyFontScript = 0x53637270,
         phKeyFontStyleName = 0x466e7453,
         phKeyFontTechnology = 0x466e7454,
         phKeyForcedColors = 0x46726343,
         phKeyForegroundColor = 0x46726743,
         phKeyForegroundLevel = 0x4672674c,
         phKeyFormat = 0x466d7420,
         phKeyForward = 0x46776420,
         phKeyFrameFX = 0x46724658,
         phKeyFrameWidth = 0x46726d57,
         phKeyFreeTransformCenterState = 0x46546373,
         phKeyFrequency = 0x4672716e,
         phKeyFrom = 0x46726f6d,
         phKeyFromBuiltin = 0x46726d42,
         phKeyFromMode = 0x46726d4d,
         phKeyFunctionKey = 0x466e634b,
         phKeyFuzziness = 0x467a6e73,
         phKeyGamutWarning = 0x476d7457,
         phKeyGCR = 0x47435220,
         phKeyGeneralPrefs = 0x476e7250,
         phKeyGIFColorFileType = 0x47465054,
         phKeyGIFColorLimit = 0x4746434c,
         phKeyGIFExportCaption = 0x47464543,
         phKeyGIFMaskChannelIndex = 0x47464d49,
         phKeyGIFMaskChannelInverted = 0x47464d56,
         phKeyGIFPaletteFile = 0x47465046,
         phKeyGIFPaletteType = 0x4746504c,
         phKeyGIFRequiredColorSpaceType = 0x47464353,
         phKeyGIFRowOrderType = 0x47464954,
         phKeyGIFTransparentColor = 0x47465443,
         phKeyGIFTransparentIndexBlue = 0x47465442,
         phKeyGIFTransparentIndexGreen = 0x47465447,
         phKeyGIFTransparentIndexRed = 0x47465452,
         phKeyGIFUseBestMatch = 0x4746424d,
         phKeyGamma = 0x476d6d20,
         phKeyGlobalAngle = 0x67626c41,
         phKeyGlobalLightingAngle = 0x6761676c,
         phKeyGloss = 0x476c6f73,
         phKeyGlowAmount = 0x476c7741,
         phKeyGlowTechnique = 0x476c7754,
         phKeyGradient = 0x47726164,
         phKeyGradientFill = 0x47726466,
         phKeyGrain = 0x47726e20,
         phKeyGrainType = 0x47726e74,
         phKeyGraininess = 0x47726e73,
         phKeyGray = 0x47727920,
         phKeyGrayBehavior = 0x47724268,
         phKeyGraySetup = 0x47725374,
         phKeyGreen = 0x47726e20,
         phKeyGreenBlackPoint = 0x47726e42,
         phKeyGreenGamma = 0x47726e47,
         phKeyGreenWhitePoint = 0x47726e57,
         phKeyGreenX = 0x47726e58,
         phKeyGreenY = 0x47726e59,
         phKeyGridColor = 0x47726443,
         phKeyGridCustomColor = 0x47726473,
         phKeyGridMajor = 0x4772644d,
         phKeyGridMinor = 0x4772646e,
         phKeyGridStyle = 0x47726453,
         phKeyGridUnits = 0x47726474,
         phKeyGroup = 0x47727570,
         phKeyGroutWidth = 0x47727457,
         phKeyGuides = 0x47646573,
         phKeyGuidesColor = 0x47647343,
         phKeyGuidesCustomColor = 0x47647373,
         phKeyGuidesStyle = 0x47647353,
         phKeyGuidesPrefs = 0x47645072,
         phKeyGutterWidth = 0x47747457,
         phKeyHalftoneFile = 0x486c6646,
         phKeyHalftoneScreen = 0x486c6653,
         phKeyHalftoneSpec = 0x486c6670,
         phKeyHalftoneSize = 0x486c537a,
         phKeyHardness = 0x4872646e,
         phKeyHeader = 0x48647220,
         phKeyHeadline = 0x48646c6e,
         phKeyHeight = 0x48676874,
         phKeyHostName = 0x4873744e,
         phKeyHighlightArea = 0x48676841,
         phKeyHighlightColor = 0x68676c43,
         phKeyHighlightLevels = 0x4867684c,
         phKeyHighlightMode = 0x68676c4d,
         phKeyHighlightOpacity = 0x68676c4f,
         phKeyHighlightStrength = 0x48676853,
         phKeyHistoryBrushSource = 0x48737442,
         phKeyHistoryPrefs = 0x48737450,
         phKeyHistoryStateSource = 0x48735353,
         phKeyHistoryStates = 0x48735374,
         phKeyHorizontal = 0x48727a6e,
         phKeyHorizontalScale = 0x48727a53,
         phKeyHostVersion = 0x48737456,
         phKeyHue = 0x48202020,
         phKeyICCEngine = 0x49434345,
         phKeyICCSetupName = 0x49434374,
         phKeyID = 0x49646e74,
         phKeyIdle = 0x49646c65,
         phKeyImageBalance = 0x496d6742,
         phKeyImport = 0x496d7072,
         phKeyImpressionist = 0x496d7073,
         phKeyIn = 0x496e2020,
         phKeyInherits = 0x6340235e,
         phKeyInkColors = 0x496e6b43,
         phKeyInks = 0x496e6b73,
         phKeyInnerGlow = 0x4972476c,
         phKeyInnerGlowSource = 0x676c7753,
         phKeyInnerShadow = 0x49725368,
         phKeyInput = 0x496e7074,
         phKeyInputMapRange = 0x496e6d72,
         phKeyInputRange = 0x496e7072,
         phKeyIntensity = 0x496e746e,
         phKeyIntent = 0x496e7465,
         phKeyInterfaceBevelHighlight = 0x496e7448,
         phKeyInterfaceBevelShadow = 0x496e7476,
         phKeyInterfaceBlack = 0x496e7442,
         phKeyInterfaceBorder = 0x496e7464,
         phKeyInterfaceButtonDarkShadow = 0x496e746b,
         phKeyInterfaceButtonDownFill = 0x496e7474,
         phKeyInterfaceButtonUpFill = 0x496e4246,
         phKeyInterfaceColorBlue2 = 0x4943424c,
         phKeyInterfaceColorBlue32 = 0x49434248,
         phKeyInterfaceColorGreen2 = 0x4943474c,
         phKeyInterfaceColorGreen32 = 0x49434748,
         phKeyInterfaceColorRed2 = 0x4943524c,
         phKeyInterfaceColorRed32 = 0x49435248,
         phKeyInterfaceIconFillActive = 0x496e7449,
         phKeyInterfaceIconFillDimmed = 0x496e7446,
         phKeyInterfaceIconFillSelected = 0x496e7463,
         phKeyInterfaceIconFrameActive = 0x496e746d,
         phKeyInterfaceIconFrameDimmed = 0x496e7472,
         phKeyInterfaceIconFrameSelected = 0x496e7453,
         phKeyInterfacePaletteFill = 0x496e7450,
         phKeyInterfaceRed = 0x496e7452,
         phKeyInterfaceWhite = 0x496e7457,
         phKeyInterfaceToolTipBackground = 0x496e7454,
         phKeyInterfaceToolTipText = 0x49545454,
         phKeyInterfaceTransparencyForeground = 0x49544667,
         phKeyInterfaceTransparencyBackground = 0x49544267,
         phKeyInterlace = 0x496e7472,
         phKeyInterlaceCreateType = 0x496e7443,
         phKeyInterlaceEliminateType = 0x496e7445,
         phKeyInterpolation = 0x496e7472,
         phKeyInterpolationMethod = 0x496e744d,
         phKeyInvert = 0x496e7672,
         phKeyInvertMask = 0x496e764d,
         phKeyInvertSource2 = 0x496e7653,
         phKeyInvertTexture = 0x496e7654,
         phKeyIsDirty = 0x49734472,
         phKeyItemIndex = 0x49746d49,
         phKeyJPEGQuality = 0x4a504551,
         phKeyKerning = 0x4b726e67,
         phKeyKeywords = 0x4b797764,
         phKeyKind = 0x4b6e6420,
         phKeyLZWCompression = 0x4c5a5743,
         phKeyLabels = 0x4c626c73,
         phKeyLandscape = 0x4c6e6473,
         phKeyLastTransform = 0x4c737454,
         phKeyLayerEffects = 0x4c656678,
         phKeyLayerFXVisible = 0x6c667876,
         phKeyLayer = 0x4c797220,
         phKeyLayerID = 0x4c797249,
         phKeyLayerName = 0x4c79724e,
         phKeyLayers = 0x4c797273,
         phKeyLeading = 0x4c646e67,
         phKeyLeft = 0x4c656674,
         phKeyLength = 0x4c6e6774,
         phKeyLens = 0x4c6e7320,
         phKeyLevel = 0x4c766c20,
         phKeyLevels = 0x4c766c73,
         phKeyLightDark = 0x4c674472,
         phKeyLightDirection = 0x4c676844,
         phKeyLightIntensity = 0x4c676849,
         phKeyLightPosition = 0x4c676850,
         phKeyLightSource = 0x4c676853,
         phKeyLightType = 0x4c676854,
         phKeyLightenGrout = 0x4c676847,
         phKeyLightness = 0x4c676874,
         phKeyLine = 0x4c696e65,
         phKeyLinkedLayerIDs = 0x4c6e6b4c,
         phKeyLocalLightingAngle = 0x6c61676c,
         phKeyLocalLightingAltitude = 0x4c616c64,
         phKeyLocalRange = 0x4c636c52,
         phKeyLocation = 0x4c63746e,
         phKeyLog = 0x4c6f6720,
         phKeyLowerCase = 0x4c774373,
         phKeyLuminance = 0x4c6d6e63,
         phKeyLUTAnimation = 0x4c546e6d,
         phKeyMagenta = 0x4d676e74,
         phKeyMakeVisible = 0x4d6b5673,
         phKeyManipulationFOV = 0x4d666f76,
         phKeyMapBlack = 0x4d70426c,
         phKeyMapping = 0x4d706e67,
         phKeyMappingShape = 0x4d706753,
         phKeyMaterial = 0x4d74726c,
         phKeyMatrix = 0x4d747278,
         phKeyMatteColor = 0x4d747443,
         phKeyMaximum = 0x4d786d20,
         phKeyMaximumStates = 0x4d786d53,
         phKeyMemoryUsagePercent = 0x4d6d7255,
         phKeyMerge = 0x4d726765,
         phKeyMerged = 0x4d726764,
         phKeyMessage = 0x4d736765,
         phKeyMethod = 0x4d746864,
         phKeyMezzotintType = 0x4d7a7454,
         phKeyMidpoint = 0x4d64706e,
         phKeyMidtoneLevels = 0x4d64744c,
         phKeyMinimum = 0x4d6e6d20,
         phKeyMismatchCMYK = 0x4d736d43,
         phKeyMismatchGray = 0x4d736d47,
         phKeyMismatchRGB = 0x4d736d52,
         phKeyMode = 0x4d642020,
         phKeyMonochromatic = 0x4d6e6368,
         phKeyMoveTo = 0x4d765420,
         phKeyName = 0x4e6d2020,
         phKeyNegative = 0x4e677476,
         phKeyNew = 0x4e772020,
         phKeyNoise = 0x4e6f7365,
         phKeyNonImageData = 0x4e6e496d,
         phKeyNonLinear = 0x4e6e4c6e,
         phKeyNull = 0x6e756c6c,
         phKeyNumLights = 0x4e6d2020,
         phKeyNumber = 0x4e6d6272,
         phKeyNumberOfCacheLevels = 0x4e436368,
         phKeyNumberOfChannels = 0x4e6d624f,
         phKeyNumberOfChildren = 0x4e6d6243,
         phKeyNumberOfDocuments = 0x4e6d6244,
         phKeyNumberOfGenerators = 0x4e6d6247,
         phKeyNumberOfLayers = 0x4e6d624c,
         phKeyNumberOfLevels = 0x4e6d624c,
         phKeyNumberOfPaths = 0x4e6d6250,
         phKeyNumberOfRipples = 0x4e6d6252,
         phKeyNumberOfSiblings = 0x4e6d6253,
         phKeyObjectName = 0x4f626a4e,
         phKeyOffset = 0x4f667374,
         phKeyOn = 0x4f6e2020,
         phKeyOpacity = 0x4f706374,
         phKeyOptimized = 0x4f70746d,
         phKeyOrientation = 0x4f726e74,
         phKeyOriginalHeader = 0x4f726748,
         phKeyOriginalTransmissionReference = 0x4f726754,
         phKeyOtherCursors = 0x4f746843,
         phKeyOuterGlow = 0x4f72476c,
         phKeyOutput = 0x4f747074,
         phKeyOverprintColors = 0x4f767243,
         phKeyOverrideOpen = 0x4f76724f,
         phKeyOverridePrinter = 0x4f627250,
         phKeyOverrideSave = 0x4f767264,
         phKeyPaintCursorKind = 0x506e434b,
         phKeyParentIndex = 0x5072496e,
         phKeyParentName = 0x50724e6d,
         phKeyPNGFilter = 0x504e4766,
         phKeyPNGInterlaceType = 0x50474954,
         phKeyPageFormat = 0x504d7066,
         phKeyPageNumber = 0x50674e6d,
         phKeyPageSetup = 0x50675374,
         phKeyPagePosition = 0x50675073,
         phKeyPaintingCursors = 0x506e7443,
         phKeyPaintType = 0x506e7454,
         phKeyPalette = 0x506c7420,
         phKeyPaletteFile = 0x506c7446,
         phKeyPaperBrightness = 0x50707242,
         phKeyPath = 0x50617468,
         phKeyPathContents = 0x50746843,
         phKeyPathName = 0x5074684e,
         phKeyPattern = 0x5074746e,
         phKeyPencilWidth = 0x506e636c,
         phKeyPerspectiveIndex = 0x50727370,
         phKeyPhosphors = 0x50687370,
         phKeyPickerID = 0x50636b49,
         phKeyPickerKind = 0x50636b72,
         phKeyPixelPaintSize = 0x5050537a,
         phKeyPlatform = 0x506c7466,
         phKeyPluginFolder = 0x506c6746,
         phKeyPluginPrefs = 0x506c6750,
         phKeyPoints = 0x50747320,
         phKeyPosition = 0x5073746e,
         phKeyPosterization = 0x50737472,
         phKeyPostScriptColor = 0x50737453,
         phKeyPredefinedColors = 0x50726443,
         phKeyPreferBuiltin = 0x50726642,
         phKeyPreserveAdditional = 0x50727341,
         phKeyPreserveLuminosity = 0x5072734c,
         phKeyPreserveTransparency = 0x50727354,
         phKeyPressure = 0x50727320,
         phKeyPreferences = 0x50726672,
         phKeyPreview = 0x50727677,
         phKeyPreviewCMYK = 0x5072764b,
         phKeyPreviewFullSize = 0x50727646,
         phKeyPreviewIcon = 0x50727649,
         phKeyPreviewMacThumbnail = 0x5072764d,
         phKeyPreviewWinThumbnail = 0x50727657,
         phKeyPreviewsQuery = 0x50727651,
         phKeyPrintSettings = 0x504d7073,
         phKeyProfileSetup = 0x50726653,
         phKeyProvinceState = 0x50727653,
         phKeyQuality = 0x516c7479,
         phKeyExtendedQuality = 0x45516c74,
         phKeyQuickMask = 0x5175634d,
         phKeyRGBSetup = 0x52474253,
         phKeyRadius = 0x52647320,
         phKeyRandomSeed = 0x526e6453,
         phKeyRatio = 0x52742020,
         phKeyRecentFiles = 0x52636e66,
         phKeyRed = 0x52642020,
         phKeyRedBlackPoint = 0x5264426c,
         phKeyRedGamma = 0x5264476d,
         phKeyRedWhitePoint = 0x52645768,
         phKeyRedX = 0x52645820,
         phKeyRedY = 0x52645920,
         phKeyRegistrationMarks = 0x5267734d,
         phKeyRelative = 0x526c7476,
         phKeyRelief = 0x526c6620,
         phKeyRenderFidelity = 0x52666964,
         phKeyResample = 0x52736d70,
         phKeyResizeWindowsOnZoom = 0x52574f5a,
         phKeyResolution = 0x52736c74,
         phKeyResourceID = 0x52737249,
         phKeyResponse = 0x5273706e,
         phKeyRetainHeader = 0x52746e48,
         phKeyReverse = 0x52767273,
         phKeyRight = 0x52676874,
         phKeyRippleMagnitude = 0x52706c4d,
         phKeyRippleSize = 0x52706c53,
         phKeyRotate = 0x52747420,
         phKeyRoundness = 0x526e646e,
         phKeyRulerOriginH = 0x526c7248,
         phKeyRulerOriginV = 0x526c7256,
         phKeyRulerUnits = 0x526c7255,
         phKeySaturation = 0x53747274,
         phKeySaveAndClose = 0x5376416e,
         phKeySaveComposite = 0x5376436d,
         phKeySavePaletteLocations = 0x506c744c,
         phKeySavePaths = 0x53765074,
         phKeySavePyramids = 0x53765079,
         phKeySaving = 0x53766e67,
         phKeyScale = 0x53636c20,
         phKeyScaleHorizontal = 0x53636c48,
         phKeyScaleVertical = 0x53636c56,
         phKeyScaling = 0x53636c6e,
         phKeyScans = 0x53636e73,
         phKeyScratchDisks = 0x53637244,
         phKeyScreenFile = 0x53637246,
         phKeyScreenType = 0x53637254,
         phKeyShadingIntensity = 0x53686449,
         phKeyShadingNoise = 0x5368644e,
         phKeyShadingShape = 0x53686453,
         phKeyContourType = 0x53687043,
         phKeySerialString = 0x53726c53,
         phKeySeparations = 0x53707274,
         phKeyShadowColor = 0x73647743,
         phKeyShadowIntensity = 0x53686449,
         phKeyShadowLevels = 0x5368644c,
         phKeyShadowMode = 0x7364774d,
         phKeyShadowOpacity = 0x7364774f,
         phKeyShape = 0x53687020,
         phKeySharpness = 0x53687270,
         phKeyShearEd = 0x53687245,
         phKeyShearPoints = 0x53687250,
         phKeyShearSt = 0x53687253,
         phKeyShiftKey = 0x5368664b,
         phKeyShiftKeyToolSwitch = 0x53684b54,
         phKeyShortNames = 0x5368724e,
         phKeyShowEnglishFontNames = 0x53687745,
         phKeyShowToolTips = 0x53687754,
         phKeyShowTransparency = 0x53685472,
         phKeySizeKey = 0x537a2020,
         phKeySkew = 0x536b6577,
         phKeySmartBlurMode = 0x536d424d,
         phKeySmartBlurQuality = 0x536d4251,
         phKeySmooth = 0x536d6f6f,
         phKeySmoothness = 0x536d7468,
         phKeySnapshotInitial = 0x536e7049,
         phKeySoftness = 0x5366746e,
         phKeySolidFill = 0x536f4669,
         phKeySource = 0x53726365,
         phKeySource2 = 0x53726332,
         phKeySourceMode = 0x5372634d,
         phKeySpacing = 0x5370636e,
         phKeySpecialInstructions = 0x53706349,
         phKeySpherizeMode = 0x5370684d,
         phKeySpot = 0x53706f74,
         phKeySprayRadius = 0x53707252,
         phKeySquareSize = 0x53717253,
         phKeySrcBlackMax = 0x5372636c,
         phKeySrcBlackMin = 0x53726342,
         phKeySrcWhiteMax = 0x5372636d,
         phKeySrcWhiteMin = 0x53726357,
         phKeyStart = 0x53747274,
         phKeyStartArrowhead = 0x53747241,
         phKeyState = 0x53747465,
         phKeyStrength = 0x73726768,
         phKeyStrengthRatio = 0x73726752,
         phKeyStrength_PLUGIN = 0x53747267,
         phKeyStrokeDetail = 0x53744474,
         phKeyStrokeDirection = 0x53446972,
         phKeyStrokeLength = 0x5374724c,
         phKeyStrokePressure = 0x53747250,
         phKeyStrokeSize = 0x53747253,
         phKeyStrokeWidth = 0x53747257,
         phKeyStyle = 0x5374796c,
         phKeyStyles = 0x53747973,
         phKeyStylusIsPressure = 0x53746c50,
         phKeyStylusIsColor = 0x53746c43,
         phKeyStylusIsOpacity = 0x53746c4f,
         phKeyStylusIsSize = 0x53746c53,
         phKeySubPathList = 0x5362704c,
         phKeySupplementalCategories = 0x53706c43,
         phKeySystemInfo = 0x53737449,
         phKeySystemPalette = 0x53737450,
         phKeyTarget = 0x6e756c6c,
         phKeyTargetPath = 0x54726770,
         phKeyTargetPathIndex = 0x54726750,
         phKeyText = 0x54787420,
         phKeyTextClickPoint = 0x54787443,
         phKeyTextData = 0x54787444,
         phKeyTextStyle = 0x54787453,
         phKeyTextStyleRange = 0x54787474,
         phKeyTexture = 0x54787472,
         phKeyTextureCoverage = 0x54787443,
         phKeyTextureFile = 0x54787446,
         phKeyTextureType = 0x54787454,
         phKeyThreshold = 0x54687368,
         phKeyTileNumber = 0x546c4e6d,
         phKeyTileOffset = 0x546c4f66,
         phKeyTileSize = 0x546c537a,
         phKeyTitle = 0x54746c20,
         phKeyTo = 0x54202020,
         phKeyToBuiltin = 0x54426c20,
         phKeyToLinked = 0x546f4c6b,
         phKeyToMode = 0x544d6420,
         phKeyToggleOthers = 0x54676c4f,
         phKeyTolerance = 0x546c726e,
         phKeyTop = 0x546f7020,
         phKeyTotalLimit = 0x54746c4c,
         phKeyTracking = 0x5472636b,
         phKeyTransferSpec = 0x54726e53,
         phKeyTransparencyGrid = 0x54726e47,
         phKeyTransferFunction = 0x54726e46,
         phKeyTransparency = 0x54726e73,
         phKeyTransparencyGridColors = 0x54726e43,
         phKeyTransparencyGridSize = 0x54726e47,
         phKeyTransparencyPrefs = 0x54726e50,
         phKeyTransparencyShape = 0x54726e53,
         phKeyTransparentIndex = 0x54726e49,
         phKeyTransparentWhites = 0x54726e57,
         phKeyTwist = 0x54777374,
         phKeyType = 0x54797065,
         phKeyUCA = 0x55432020,
         phKeyUnitsPrefs = 0x556e7450,
         phKeyURL = 0x55524c20,
         phKeyUndefinedArea = 0x556e6441,
         phKeyUnderline = 0x556e646c,
         phKeyUntitled = 0x556e746c,
         phKeyUpperY = 0x55707059,
         phKeyUrgency = 0x5572676e,
         phKeyUseAccurateScreens = 0x41637253,
         phKeyUseAdditionalPlugins = 0x4164506c,
         phKeyUseCacheForHistograms = 0x55734363,
         phKeyUseCurves = 0x55734372,
         phKeyUseDefault = 0x55734466,
         phKeyUseGlobalAngle = 0x75676c67,
         phKeyUseICCProfile = 0x55734943,
         phKeyUseMask = 0x55734d73,
         phKeyUserMaskEnabled = 0x5573724d,
         phKeyUserMaskLinked = 0x55737273,
         phKeyUsing = 0x55736e67,
         phKeyValue = 0x566c2020,
         phKeyVector0 = 0x56637430,
         phKeyVector1 = 0x56637431,
         phKeyVectorColor = 0x56637443,
         phKeyVersionFix = 0x56727346,
         phKeyVersionMajor = 0x5672734d,
         phKeyVersionMinor = 0x5672734e,
         phKeyVertical = 0x56727463,
         phKeyVerticalScale = 0x56727453,
         phKeyVideoAlpha = 0x56646c70,
         phKeyVisible = 0x5673626c,
         phKeyWatchSuspension = 0x57746353,
         phKeyWatermark = 0x77617472,
         phKeyWaveType = 0x57767470,
         phKeyWavelengthMax = 0x574c4d78,
         phKeyWavelengthMin = 0x574c4d6e,
         phKeyWebdavPrefs = 0x57626450,
         phKeyWetEdges = 0x57746467,
         phKeyWhat = 0x57686174,
         phKeyWhiteClip = 0x57687443,
         phKeyWhiteIntensity = 0x57687449,
         phKeyWhiteIsHigh = 0x57684869,
         phKeyWhiteLevel = 0x5768744c,
         phKeyWhitePoint = 0x57687450,
         phKeyWholePath = 0x57685074,
         phKeyWidth = 0x57647468,
         phKeyWindMethod = 0x576e644d,
         phKeyWith = 0x57697468,
         phKeyWorkPath = 0x57725074,
         phKeyWorkPathIndex = 0x57726b50,
         phKeyX = 0x58202020,
         phKeyY = 0x59202020,
         phKeyYellow = 0x596c7720,
         phKeyZigZagType = 0x5a5a5479,
         phKeyLighter = 0x4c696768,
         phKeyDarker = 0x4461726b,
         phKeyLegacySerialString = 0x6c534e73,
         phKey_Source = 0x54202020,
         phPInherits = 0x6340235e,
         phTypeActionReference = 0x23416374,
         phTypeActionData = 0x41637444,
         phTypeAlignDistributeSelector = 0x41445374,
         phTypeAlignment = 0x416c6720,
         phTypeAmount = 0x416d6e74,
         phTypeAntiAlias = 0x416e6e74,
         phTypeAreaSelector = 0x4172536c,
         phTypeAssumeOptions = 0x4173734f,
         phTypeBevelEmbossStampStyle = 0x42455373,
         phTypeBevelEmbossStyle = 0x4245536c,
         phTypeBitDepth = 0x42744470,
         phTypeBlackGeneration = 0x426c6347,
         phTypeBlendMode = 0x426c6e4d,
         phTypeBlurMethod = 0x426c724d,
         phTypeBlurQuality = 0x426c7251,
         phTypeBrushType = 0x42727354,
         phTypeBuiltinProfile = 0x426c7450,
         phTypeBuiltInContour = 0x426c7443,
         phTypeCMYKSetupEngine = 0x434d5945,
         phTypeCalculation = 0x436c636e,
         phTypeChannel = 0x43686e6c,
         phTypeChannelReference = 0x23436852,
         phTypeCheckerboardSize = 0x4368636b,
         phTypeClass = 0x74797065,
         phTypeClassColor = 0x23436c72,
         phTypeClassElement = 0x23436c45,
         phTypeClassExport = 0x23436c65,
         phTypeClassFormat = 0x23436c46,
         phTypeClassHueSatHueSatV2 = 0x23487356,
         phTypeClassImport = 0x23436c49,
         phTypeClassMode = 0x23436c4d,
         phTypeClassStringFormat = 0x23436c53,
         phTypeClassTextExport = 0x23435445,
         phTypeClassTextImport = 0x23436c54,
         phTypeColor = 0x436c7220,
         phTypeColorChannel = 0x23436c43,
         phTypeColorPalette = 0x436c7250,
         phTypeColorSpace = 0x436c7253,
         phTypeColorStopType = 0x436c7279,
         phTypeColors = 0x436c7273,
         phTypeCompensation = 0x436d706e,
         phTypeContourEdge = 0x436e7445,
         phTypeConvert = 0x436e7672,
         phTypeCorrectionMethod = 0x4372634d,
         phTypeCursorKind = 0x4372734b,
         phTypeDCS = 0x44435320,
         phTypeDeepDepth = 0x44704470,
         phTypeDepth = 0x44707468,
         phTypeDiffuseMode = 0x4466734d,
         phTypeDirection = 0x44726374,
         phTypeDisplacementMap = 0x4473704d,
         phTypeDistribution = 0x44737472,
         phTypeDither = 0x44746872,
         phTypeDitherQuality = 0x44746871,
         phTypeDocumentReference = 0x23446352,
         phTypeEPSPreview = 0x45505350,
         phTypeElementReference = 0x23456c52,
         phTypeEncoding = 0x456e6364,
         phTypeEraserKind = 0x4572734b,
         phTypeExtrudeRandom = 0x45787452,
         phTypeExtrudeType = 0x45787454,
         phTypeEyeDropperSample = 0x45794470,
         phTypeFPXCompress = 0x4678436d,
         phTypeFill = 0x466c2020,
         phTypeFillColor = 0x466c436c,
         phTypeFillContents = 0x466c436e,
         phTypeFillMode = 0x466c4d64,
         phTypeForcedColors = 0x46726343,
         phTypeFrameFill = 0x4672466c,
         phTypeFrameStyle = 0x4653746c,
         phTypeGIFColorFileType = 0x47465054,
         phTypeGIFPaletteType = 0x4746504c,
         phTypeGIFRequiredColorSpaceType = 0x47464353,
         phTypeGIFRowOrderType = 0x47464954,
         phTypeGlobalClass = 0x476c6243,
         phTypeGlobalObject = 0x476c624f,
         phTypeGradientType = 0x47726454,
         phTypeGradientForm = 0x47726446,
         phTypeGrainType = 0x47726e74,
         phTypeGrayBehavior = 0x47724268,
         phTypeGuideGridColor = 0x47644772,
         phTypeGuideGridStyle = 0x47644753,
         phTypeHistoryStateSource = 0x48737453,
         phTypeHorizontalLocation = 0x48727a4c,
         phTypeImageReference = 0x23496d52,
         phTypeInnerGlowSource = 0x49475372,
         phTypeIntegerChannel = 0x23696e43,
         phTypeIntent = 0x496e7465,
         phTypeInterlaceCreateType = 0x496e7443,
         phTypeInterlaceEliminateType = 0x496e7445,
         phTypeInterpolation = 0x496e7470,
         phTypeKelvin = 0x4b6c766e,
         phTypeKelvinCustomWhitePoint = 0x234b6c76,
         phTypeLens = 0x4c6e7320,
         phTypeLightDirection = 0x4c676844,
         phTypeLightPosition = 0x4c676850,
         phTypeLightType = 0x4c676854,
         phTypeLocationReference = 0x234c6374,
         phTypeMaskIndicator = 0x4d736b49,
         phTypeMatteColor = 0x4d747443,
         phTypeMatteTechnique = 0x42455445,
         phTypeMenuItem = 0x4d6e4974,
         phTypeMethod = 0x4d746864,
         phTypeMezzotintType = 0x4d7a7454,
         phTypeMode = 0x4d642020,
         phTypeNotify = 0x4e746679,
         phTypeObject = 0x4f626a63,
         phTypeObjectReference = 0x6f626a20,
         phTypeOnOff = 0x4f6e4f66,
         phTypeOrdinal = 0x4f72646e,
         phTypeOrientation = 0x4f726e74,
         phTypePNGFilter = 0x504e4766,
         phTypePNGInterlaceType = 0x50474954,
         phTypePagePosition = 0x50675073,
         phTypePathKind = 0x5074684b,
         phTypePathReference = 0x23507452,
         phTypePhosphors = 0x50687370,
         phTypePhosphorsCustomPhosphors = 0x23506873,
         phTypePickerKind = 0x50636b4b,
         phTypePixelPaintSize = 0x5050537a,
         phTypePlatform = 0x506c7466,
         phTypePreview = 0x50727677,
         phTypePreviewCMYK = 0x50727674,
         phTypeProfileMismatch = 0x5072664d,
         phTypePurgeItem = 0x50726749,
         phTypeQuadCenterState = 0x51435374,
         phTypeQuality = 0x516c7479,
         phTypeQueryState = 0x51757253,
         phTypeRGBSetupSource = 0x52474253,
         phTypeRawData = 0x74647461,
         phTypeRippleSize = 0x52706c53,
         phTypeRulerUnits = 0x526c7255,
         phTypeScreenType = 0x53637254,
         phTypeShape = 0x53687020,
         phTypeSmartBlurMode = 0x536d424d,
         phTypeSmartBlurQuality = 0x536d4251,
         phTypeSourceMode = 0x436e646e,
         phTypeSpherizeMode = 0x5370684d,
         phTypeState = 0x53747465,
         phTypeStringClassFormat = 0x23537443,
         phTypeStringChannel = 0x23737468,
         phTypeStringCompensation = 0x2353746d,
         phTypeStringFSS = 0x23537466,
         phTypeStringInteger = 0x23537449,
         phTypeStrokeDirection = 0x53747244,
         phTypeStrokeLocation = 0x5374724c,
         phTypeText = 0x54455854,
         phTypeTextureType = 0x54787454,
         phTypeTransparencyGridColors = 0x54726e6c,
         phTypeTransparencyGridSize = 0x54726e47,
         phTypeTypeClassModeOrClassMode = 0x2354794d,
         phTypeUndefinedArea = 0x556e6441,
         phTypeUnitFloat = 0x556e7446,
         phTypeUrgency = 0x5572676e,
         phTypeUserMaskOptions = 0x5573724d,
         phTypeValueList = 0x566c4c73,
         phTypeVerticalLocation = 0x5672744c,
         phTypeWaveType = 0x57767470,
         phTypeWindMethod = 0x576e644d,
         phTypeYesNo = 0x59734e20,
         phTypeZigZagType = 0x5a5a5479,
         phUnitAngle = 0x23416e67,
         phUnitDensity = 0x2352736c,
         phUnitDistance = 0x23526c74,
         phUnitNone = 0x234e6e65,
         phUnitPercent = 0x23507263,
         phUnitPixels = 0x2350786c
     } __MIDL___MIDL_itf_OLEActions_0000_0000_0001;

     [
       odl,
       uuid(B249C0B1-A004-11D1-B036-00C04FD7EC47),
       helpstring("Container class for actions system 
references."),
       dual,
       oleautomation
     ]
     interface IActionReference : IDispatch {
         [id(0x60020000)]
         HRESULT GetForm([out] long* value);
         [id(0x60020001)]
         HRESULT GetDesiredClass([out] long* value);
         [id(0x60020002)]
         HRESULT PutClass([in] long desiredClass);
         [id(0x60020003)]
         HRESULT GetName([out] BSTR* name);
         [id(0x60020004)]
         HRESULT PutName(
                         [in] long desiredClass,
                         [in] BSTR name);
         [id(0x60020005)]
         HRESULT GetIndex([out] long* value);
         [id(0x60020006)]
         HRESULT PutIndex(
                         [in] long desiredClass,
                         [in] long value);
         [id(0x60020007)]
         HRESULT GetIdentifier([out] long* value);
         [id(0x60020008)]
         HRESULT PutIdentifier(
                         [in] long desiredClass,
                         [in] long value);
         [id(0x60020009)]
         HRESULT GetOffset([out] long* value);
         [id(0x6002000a)]
         HRESULT PutOffset(
                         [in] long desiredClass,
                         [in] long value);
         [id(0x6002000b)]
         HRESULT GetEnumerated(
                         [out] long* type,
                         [out] long* enumValue);
         [id(0x6002000c)]
         HRESULT PutEnumerated(
                         [in] long desiredClass,
                         [in] long type,
                         [in] long value);
         [id(0x6002000d)]
         HRESULT GetProperty([out] long* value);
         [id(0x6002000e)]
         HRESULT PutProperty(
                         [in] long desiredClass,
                         [in] long value);
         [id(0x6002000f)]
         HRESULT GetContainer([out] IActionReference** value);
     };

     [
       odl,
       uuid(B249C0B0-A004-11D1-B036-00C04FD7EC47),
       helpstring("Container class for actions system lists."),
       dual,
       oleautomation
     ]
     interface IActionList : IDispatch {
         [id(0x60020000)]
         HRESULT GetType(
                         [in] long index,
                         [out] long* value);
         [id(0x60020001)]
         HRESULT GetCount([out] long* value);
         [id(0x60020002)]
         HRESULT GetInteger(
                         [in] long index,
                         [out] long* value);
         [id(0x60020003)]
         HRESULT PutInteger([in] long value);
         [id(0x60020004)]
         HRESULT GetDouble(
                         [in] long index,
                         [out] double* value);
         [id(0x60020005)]
         HRESULT PutDouble([in] double value);
         [id(0x60020006)]
         HRESULT GetUnitDouble(
                         [in] long index,
                         [out] long* unit,
                         [out] double* value);
         [id(0x60020007)]
         HRESULT PutUnitDouble(
                         [in] long unit,
                         [in] double value);
         [id(0x60020008)]
         HRESULT GetString(
                         [in] long index,
                         [out] BSTR* str);
         [id(0x60020009)]
         HRESULT PutString([in] BSTR str);
         [id(0x6002000a)]
         HRESULT GetBoolean(
                         [in] long index,
                         [out] long* value);
         [id(0x6002000b)]
         HRESULT PutBoolean([in] long value);
         [id(0x6002000c)]
         HRESULT GetList(
                         [in] long index,
                         [out] IActionList** actionList);
         [id(0x6002000d)]
         HRESULT PutList([in] IActionList* actionList);
         [id(0x6002000e)]
         HRESULT GetObject(
                         [in] long index,
                         [out] long* type,
                         [out] IActionDescriptor** value);
         [id(0x6002000f)]
         HRESULT PutObject(
                         [in] long type,
                         [in] IActionDescriptor* value);
         [id(0x60020010)]
         HRESULT GetGlobalObject(
                         [in] long index,
                         [out] long* type,
                         [out] IActionDescriptor** value);
         [id(0x60020011)]
         HRESULT PutGlobalObject(
                         [in] long type,
                         [in] IActionDescriptor* value);
         [id(0x60020012)]
         HRESULT GetEnumerated(
                         [in] long index,
                         [out] long* type,
                         [out] long* value);
         [id(0x60020013)]
         HRESULT PutEnumerated(
                         [in] long type,
                         [in] long value);
         [id(0x60020014)]
         HRESULT GetReference(
                         [in] long index,
                         [out] IActionReference** value);
         [id(0x60020015)]
         HRESULT PutReference([in] IActionReference* value);
         [id(0x60020016)]
         HRESULT GetClass(
Jun 14 2016
parent Joerg Joergonson <JJoergonson gmail.com> writes:
                         [in] long index,
                         [out] long* value);
         [id(0x60020017)]
         HRESULT PutClass([in] long value);
         [id(0x60020018)]
         HRESULT GetGlobalClass(
                         [in] long index,
                         [out] long* value);
         [id(0x60020019)]
         HRESULT PutGlobalClass([in] long value);
         [id(0x6002001a)]
         HRESULT GetPath(
                         [in] long index,
                         [out] BSTR* pathString);
         [id(0x6002001b)]
         HRESULT PutPath([in] BSTR pathString);
         [id(0x6002001c)]
         HRESULT GetDataLength(
                         [in] long index,
                         [out] long* value);
         [id(0x6002001d)]
         HRESULT GetData(
                         [in] long index,
                         [out] BSTR* value);
         [id(0x6002001e)]
         HRESULT PutData(
                         [in] long length,
                         [in] BSTR value);
     };

     [
       odl,
       uuid(7CA9DE40-9EB3-11D1-B033-00C04FD7EC47),
       helpstring("Container class for actions system 
parameters."),
       dual,
       oleautomation
     ]
     interface IActionDescriptor : IDispatch {
         [id(0x60020000)]
         HRESULT GetType(
                         [in] long key,
                         [out] long* type);
         [id(0x60020001)]
         HRESULT GetKey(
                         [in] long index,
                         [out] long* key);
         [id(0x60020002)]
         HRESULT HasKey(
                         [in] long key,
                         [out] long* HasKey);
         [id(0x60020003)]
         HRESULT GetCount([out] long* count);
         [id(0x60020004)]
         HRESULT IsEqual(
                         [in] IActionDescriptor* otherDesc,
                         [out] long* IsEqual);
         [id(0x60020005)]
         HRESULT Erase([in] long key);
         [id(0x60020006)]
         HRESULT Clear();
         [id(0x60020007)]
         HRESULT GetInteger(
                         [in] long key,
                         [out] long* retval);
         [id(0x60020008)]
         HRESULT PutInteger(
                         [in] long key,
                         [in] long value);
         [id(0x60020009)]
         HRESULT GetDouble(
                         [in] long key,
                         [out] double* retval);
         [id(0x6002000a)]
         HRESULT PutDouble(
                         [in] long key,
                         [in] double value);
         [id(0x6002000b)]
         HRESULT GetUnitDouble(
                         [in] long key,
                         [out] long* unitID,
                         [out] double* retval);
         [id(0x6002000c)]
         HRESULT PutUnitDouble(
                         [in] long key,
                         [in] long unitID,
                         [in] double value);
         [id(0x6002000d)]
         HRESULT GetString(
                         [in] long key,
                         [out] BSTR* retval);
         [id(0x6002000e)]
         HRESULT PutString(
                         [in] long key,
                         [in] BSTR value);
         [id(0x6002000f)]
         HRESULT GetBoolean(
                         [in] long key,
                         [out] long* retval);
         [id(0x60020010)]
         HRESULT PutBoolean(
                         [in] long key,
                         [in] long value);
         [id(0x60020011)]
         HRESULT GetList(
                         [in] long key,
                         [out] IActionList** list);
         [id(0x60020012)]
         HRESULT PutList(
                         [in] long key,
                         [in] IActionList* list);
         [id(0x60020013)]
         HRESULT GetObject(
                         [in] long key,
                         [out] long* classID,
                         [out] IActionDescriptor** retval);
         [id(0x60020014)]
         HRESULT PutObject(
                         [in] long key,
                         [in] long classID,
                         [in] IActionDescriptor* value);
         [id(0x60020015)]
         HRESULT GetGlobalObject(
                         [in] long key,
                         [out] long* classID,
                         [out] IActionDescriptor** retval);
         [id(0x60020016)]
         HRESULT PutGlobalObject(
                         [in] long key,
                         [in] long classID,
                         [in] IActionDescriptor* value);
         [id(0x60020017)]
         HRESULT GetEnumerated(
                         [in] long key,
                         [out] long* enumType,
                         [out] long* value);
         [id(0x60020018)]
         HRESULT PutEnumerated(
                         [in] long key,
                         [in] long enumType,
                         [in] long value);
         [id(0x60020019)]
         HRESULT GetReference(
                         [in] long key,
                         [out] IActionReference** reference);
         [id(0x6002001a)]
         HRESULT PutReference(
                         [in] long key,
                         [in] IActionReference* reference);
         [id(0x6002001b)]
         HRESULT GetClass(
                         [in] long key,
                         [out] long* classID);
         [id(0x6002001c)]
         HRESULT PutClass(
                         [in] long key,
                         [in] long classID);
         [id(0x6002001d)]
         HRESULT GetGlobalClass(
                         [in] long key,
                         [out] long* classID);
         [id(0x6002001e)]
         HRESULT PutGlobalClass(
                         [in] long key,
                         [in] long classID);
         [id(0x6002001f)]
         HRESULT GetPath(
                         [in] long key,
                         [out] BSTR* pathString);
         [id(0x60020020)]
         HRESULT PutPath(
                         [in] long key,
                         [in] BSTR pathString);
         [id(0x60020021)]
         HRESULT GetDataLength(
                         [in] long key,
                         [out] long* value);
         [id(0x60020022)]
         HRESULT GetData(
                         [in] long key,
                         [out] BSTR* retval);
         [id(0x60020023)]
         HRESULT PutData(
                         [in] long key,
                         [in] BSTR value);
     };

     [
       odl,
       uuid(38FB4290-9DF6-11D1-B032-00C04FD7EC47),
       helpstring("Control interface for Photoshop actions 
system."),
       dual,
       oleautomation
     ]
     interface IActionControl : IDispatch {
         [id(0x60020000), helpstring("Plays an event.")]
         HRESULT Play(
                         [in] long eventID,
                         [in] IActionDescriptor* parameters,
                         [in] long dialogOptions,
                         [out, retval] IActionDescriptor** result);
         [id(0x60020001)]
         HRESULT GetActionProperty(
                         [in] IActionReference* reference,
                         [out] IActionDescriptor** propertyDesc);
         [id(0x60020002)]
         HRESULT StringIDToTypeID(
                         [in] BSTR stringID,
                         [out] long* typeID);
         [id(0x60020003)]
         HRESULT TypeIDToStringID(
                         [in] long typeID,
                         [out] BSTR* stringID);
     };

     [
       odl,
       uuid(9077D1E1-8959-11CF-86B4-444553540000),
       helpstring("Automation interface to Photoshop Image 
documeent"),
       dual,
       oleautomation
     ]
     interface IAutoPSDoc : IDispatch {
         [id(0x60020000), propget, helpstring("Title of Image 
Document")]
         HRESULT Title([out, retval] BSTR* retval);
         [id(0x60020001), helpstring("Closes and saves this 
document")]
         HRESULT Close();
         [id(0x60020002), helpstring("Save to a different name, 
but file remains open")]
         HRESULT SaveTo([in] BSTR fileName);
         [id(0x60020003), helpstring("Make this document the 
current target")]
         HRESULT Activate();
     };

     [
       odl,
       uuid(90CED626-8D78-11CF-86B4-444553540000),
       helpstring("Action."),
       dual,
       oleautomation
     ]
     interface IAction : IDispatch {
         [id(0x60020000), propget, helpstring("Gets name of 
action")]
         HRESULT name([out, retval] BSTR* retval);
         [id(0x60020001), helpstring("Plays action on active 
document")]
         HRESULT Play();
     };

     [
       odl,
       uuid(90CED625-8D78-11CF-86B4-444553540000),
       helpstring("Actions collection."),
       dual,
       oleautomation
     ]
     interface IActions : IDispatch {
         [id(0x60020000), propget, helpstring("Returns number of 
Actions in collection.")]
         HRESULT count([out, retval] long* retval);
         [id(00000000), propget, helpstring("Given an integer 
index, returns one of the Actions in the collection")]
         HRESULT Item(
                         [in] long index,
                         [out, retval] IAction** retval);
         [id(0xfffffffc), propget, restricted]
         HRESULT _NewEnum([out, retval] IUnknown** retval);
     };

     [
       odl,
       uuid(9414F179-C905-11D1-92CC-00600808FC44),
       helpstring("Adobe Photoshop 12.0 Application"),
       dual,
       oleautomation
     ]
     interface IPhotoshopApplication : IDispatch {
         [id(0x60020000), propget, helpstring("Full name of 
application")]
         HRESULT FullName([out, retval] BSTR* retval);
         [id(0x60020001), helpstring("Exits the application.")]
         HRESULT Quit();
         [id(0x60020002), helpstring("Opens a Photoshop 
document.")]
         HRESULT Open(
                         [in] BSTR fileName,
                         [out, retval] IAutoPSDoc** retval);
         [id(0x60020003), helpstring("Plays Action by name on 
active document")]
         HRESULT PlayAction(
                         [in] BSTR fileName,
                         [out, retval] long* retval);
         [id(0x60020004), propget, helpstring("Returns a 
collection of all the Actions currently loaded")]
         HRESULT Actions([out, retval] IActions** retval);
         [id(0x60020005), helpstring("Creates an IActionControl 
object.")]
         HRESULT MakeControlObject([out, retval] IActionControl** 
retval);
         [id(0x60020006), helpstring("Creates an IActionDescriptor 
object.")]
         HRESULT MakeDescriptor([out, retval] IActionDescriptor** 
retval);
         [id(0x60020007), helpstring("Creates an IActionList 
object.")]
         HRESULT MakeList([out, retval] IActionList** retval);
         [id(0x60020008), helpstring("Creates an IActionReference 
object.")]
         HRESULT MakeReference([out, retval] IActionReference** 
retval);
         [id(0x60020009), propget]
         HRESULT Visible([out, retval] long* isVisible);
         [id(0x60020009), propput]
         HRESULT Visible([in] long isVisible);
     };

     [
       uuid(6DECC242-87EF-11CF-86B4-444553540000),
       helpstring("Photoshop Object Type Information"),
       appobject
     ]
     coclass PhotoshopApplication {
         [default] interface IPhotoshopApplication;
         interface IDispatch;
     };
};
Jun 15 2016
prev sibling parent reply John <johnch_atms hotmail.com> writes:
On Wednesday, 15 June 2016 at 06:56:59 UTC, Joerg Joergonson 
wrote:
 When I try to compile your code I get the following errors:

 main.d(953): Error: function 
 core.sys.windows.objbase.CoTaskMemAlloc (uint) is not callable 
 using argument types (immutable(ulong))
 main.d(970): Error: can only slice tuple types, not _error_
 main.d(974): Error: can only slice tuple types, not _error_

 coTaskMemAlloc is defined with ULONG in the objbase.d file... 
 so I have no idea what's going on there.

         immutable bufferSize = (funcDesc.cParams + 1) * 
 (wchar*).sizeof;
         auto names = cast(wchar**)CoTaskMemAlloc(bufferSize);
Looks like bufferSize just needs to be cast to uint. Didn't get that error in DMD.
 The other two I also don't know:

 params ~= new Parameter(method, (name[0 .. 
 SysStringLen(name)]).toUTF8(),

 If I run it in ldc I get the error

 Error: forward reference to inferred return type of function 
 call 'getParameters'		

   private static getParameters(MethodImpl method) {
     Parameter dummy;
     return getParameters(method, dummy, false);
   }

 It does compile in DMD though.
OK, adding the return type to the signature should fix that. So: private static Parameter getParameters(MethodImpl method)
 When running I get the error

  Error loading type library/DLL.

 The IDL file is in the same directory
Did you try to pass it an IDL file? No wonder it didn't work - you pass in the type library instead, which is a binary file such as a DLL, EXE or TLB file. You can get the file's path from OleView by highlighting the library on the left (eg Photoshop) and on the right it will show a tree with the path beside "win32".
Jun 15 2016
parent reply John <johnch_atms hotmail.com> writes:
On Wednesday, 15 June 2016 at 08:21:06 UTC, John wrote:
 OK, adding the return type to the signature should fix that. So:

   private static Parameter getParameters(MethodImpl method)
Sorry, I meant the getParameter methods should return be: private static Parameter[] getParameters(MethodImpl method) and private static Parameter[] getParameters(MethodImpl method, out Parameter returnParameter, bool getReturnParameter)
Jun 15 2016
parent reply Joerg Joergonson <JJoergonson gmail.com> writes:
On Wednesday, 15 June 2016 at 08:24:41 UTC, John wrote:
 On Wednesday, 15 June 2016 at 08:21:06 UTC, John wrote:
 OK, adding the return type to the signature should fix that. 
 So:

   private static Parameter getParameters(MethodImpl method)
Sorry, I meant the getParameter methods should return be: private static Parameter[] getParameters(MethodImpl method) and private static Parameter[] getParameters(MethodImpl method, out Parameter returnParameter, bool getReturnParameter)
Thanks. When I ran it I got a d file! when I tried to use that d file I get undefined IID and IDispatch. I imagine these interfaces come from somewhere, probably built in? Any ideas?
Jun 15 2016
parent reply John <johnch_atms hotmail.com> writes:
On Wednesday, 15 June 2016 at 16:45:39 UTC, Joerg Joergonson 
wrote:
 Thanks. When I ran it I got a d file! when I tried to use that 
 d file I get undefined IID and IDispatch. I imagine these 
 interfaces come from somewhere, probably built in?

 Any ideas?
Add the following after the module name: import core.sys.windows.com, core.sys.windows.oaidl;
Jun 15 2016
parent reply Joerg Joergonson <JJoergonson gmail.com> writes:
On Wednesday, 15 June 2016 at 17:20:31 UTC, John wrote:
 On Wednesday, 15 June 2016 at 16:45:39 UTC, Joerg Joergonson 
 wrote:
 Thanks. When I ran it I got a d file! when I tried to use that 
 d file I get undefined IID and IDispatch. I imagine these 
 interfaces come from somewhere, probably built in?

 Any ideas?
Add the following after the module name: import core.sys.windows.com, core.sys.windows.oaidl;
Thanks. Should these not be added to the generated file? Also, could you add to it the following: const static GUID iid = Guid!("5DE90358-4D0B-4FA1-BA3E-C91BBA863F32"); inside the interface (Replace the string with the correct guid)? This allows it to work with ComPtr which looks for the iid inside the interface, shouldn't hurt anything. In any case, I haven't got ComPtr to work so... GUID Guid(string str)() { static assert(str.length==36, "Guid string must be 36 chars long"); enum GUIDstring = "GUID(0x" ~ str[0..8] ~ ", 0x" ~ str[9..13] ~ ", 0x" ~ str[14..18] ~ ", [0x" ~ str[19..21] ~ ", 0x" ~ str[21..23] ~ ", 0x" ~ str[24..26] ~ ", 0x" ~ str[26..28] ~ ", 0x" ~ str[28..30] ~ ", 0x" ~ str[30..32] ~ ", 0x" ~ str[32..34] ~ ", 0x" ~ str[34..36] ~ "])"; return mixin(GUIDstring); } .... also tried CoCreateInstance and getting error 80040154 Not sure if it works. .... Changed the GUID to another one found in the registry(not the one at the top of the generated file) and it works. Both load photoshop int main(string[] argv) { //auto ps = ComPtr!_Application(CLSID_PS).require; //const auto CLSID_PS = Guid!("6DECC242-87EF-11cf-86B4-444553540000"); // PS 90.1 fails because of interface issue const auto CLSID_PS = Guid!("c09f153e-dff7-4eff-a570-af82c1a5a2a8"); // PS 90.0 works. auto hr = CoInitialize(null); auto iid = IID__Application; _Application* pUnk; hr = CoCreateInstance(&CLSID_PS, null, CLSCTX_ALL, &iid, cast(void**)&pUnk); if (FAILED(hr)) throw new Exception("ASDF"); } The photoshop.d file http://www.filedropper.com/photoshop_1 So, I guess it works but how to access the methods? The photoshop file looks to have them listed but they are all commented out. I suppose this is what ComPtr and other methods are used to help create the interface but none seem to work.
Jun 15 2016
parent reply John <johnch_atms hotmail.com> writes:
On Wednesday, 15 June 2016 at 18:32:28 UTC, Joerg Joergonson 
wrote:
   import core.sys.windows.com, core.sys.windows.oaidl;
Thanks. Should these not be added to the generated file?
The problem is that other type libraries will probably require other headers to be imported, and there's no way to work out which, so I've left that up to the user for now.
 Also, could you add to it the following:

 const static GUID iid = 
 Guid!("5DE90358-4D0B-4FA1-BA3E-C91BBA863F32");

 inside the interface (Replace the string with the correct guid)?



 This allows it to work with ComPtr which looks for the iid 
 inside the interface, shouldn't hurt anything.
I could add that as an option.
 In any case, I haven't got ComPtr to work so...


 GUID Guid(string str)()
 {
     static assert(str.length==36, "Guid string must be 36 chars 
 long");
     enum GUIDstring = "GUID(0x" ~ str[0..8] ~ ", 0x" ~ 
 str[9..13] ~ ", 0x" ~ str[14..18] ~
         ", [0x" ~ str[19..21] ~ ", 0x" ~ str[21..23] ~ ", 0x" ~ 
 str[24..26] ~ ", 0x" ~ str[26..28]
         ~ ", 0x" ~ str[28..30] ~ ", 0x" ~ str[30..32] ~ ", 0x" 
 ~ str[32..34] ~ ", 0x" ~ str[34..36] ~ "])";
     return mixin(GUIDstring);
 }


 ....

 also tried CoCreateInstance and getting error 80040154

 Not sure if it works.

 ....

 Changed the GUID to another one found in the registry(not the 
 one at the top of the generated file) and it works. Both load 
 photoshop
Oops. The one at the top of the file is the type library's ID, not the class ID. I should just omit it if it causes confusion.
 int main(string[] argv)
 {

 	//auto ps = ComPtr!_Application(CLSID_PS).require;
 		
 	//const auto CLSID_PS = 
 Guid!("6DECC242-87EF-11cf-86B4-444553540000"); // PS 90.1 fails 
 because of interface issue
 	const auto CLSID_PS = 
 Guid!("c09f153e-dff7-4eff-a570-af82c1a5a2a8");   // PS 90.0 
 works.
 	


 			
     auto hr = CoInitialize(null);
     auto iid = IID__Application;


     _Application* pUnk;

     hr = CoCreateInstance(&CLSID_PS, null, CLSCTX_ALL, &iid, 
 cast(void**)&pUnk);
     if (FAILED(hr))
             throw new Exception("ASDF");

 }

 The photoshop.d file
 http://www.filedropper.com/photoshop_1


 So, I guess it works but how to access the methods? The 
 photoshop file looks to have them listed but they are all 
 commented out.
They're commented out because Photoshop seems to have only provided a late-binding interface and you have to call them by name through IDispatch.Invoke. It's possible to wrap all that in normal D methods, and I'm working on it, but it won't be ready for a while.
Jun 15 2016
parent reply Joerg Joergonson <JJoergonson gmail.com> writes:
On Wednesday, 15 June 2016 at 19:21:51 UTC, John wrote:
 On Wednesday, 15 June 2016 at 18:32:28 UTC, Joerg Joergonson 
 wrote:
   import core.sys.windows.com, core.sys.windows.oaidl;
Thanks. Should these not be added to the generated file?
The problem is that other type libraries will probably require other headers to be imported, and there's no way to work out which, so I've left that up to the user for now.
 Also, could you add to it the following:

 const static GUID iid = 
 Guid!("5DE90358-4D0B-4FA1-BA3E-C91BBA863F32");

 inside the interface (Replace the string with the correct 
 guid)?



 This allows it to work with ComPtr which looks for the iid 
 inside the interface, shouldn't hurt anything.
I could add that as an option.
 In any case, I haven't got ComPtr to work so...


 GUID Guid(string str)()
 {
     static assert(str.length==36, "Guid string must be 36 
 chars long");
     enum GUIDstring = "GUID(0x" ~ str[0..8] ~ ", 0x" ~ 
 str[9..13] ~ ", 0x" ~ str[14..18] ~
         ", [0x" ~ str[19..21] ~ ", 0x" ~ str[21..23] ~ ", 0x" 
 ~ str[24..26] ~ ", 0x" ~ str[26..28]
         ~ ", 0x" ~ str[28..30] ~ ", 0x" ~ str[30..32] ~ ", 0x" 
 ~ str[32..34] ~ ", 0x" ~ str[34..36] ~ "])";
     return mixin(GUIDstring);
 }


 ....

 also tried CoCreateInstance and getting error 80040154

 Not sure if it works.

 ....

 Changed the GUID to another one found in the registry(not the 
 one at the top of the generated file) and it works. Both load 
 photoshop
Oops. The one at the top of the file is the type library's ID, not the class ID. I should just omit it if it causes confusion.
 int main(string[] argv)
 {

 	//auto ps = ComPtr!_Application(CLSID_PS).require;
 		
 	//const auto CLSID_PS = 
 Guid!("6DECC242-87EF-11cf-86B4-444553540000"); // PS 90.1 
 fails because of interface issue
 	const auto CLSID_PS = 
 Guid!("c09f153e-dff7-4eff-a570-af82c1a5a2a8");   // PS 90.0 
 works.
 	


 			
     auto hr = CoInitialize(null);
     auto iid = IID__Application;


     _Application* pUnk;

     hr = CoCreateInstance(&CLSID_PS, null, CLSCTX_ALL, &iid, 
 cast(void**)&pUnk);
     if (FAILED(hr))
             throw new Exception("ASDF");

 }

 The photoshop.d file
 http://www.filedropper.com/photoshop_1


 So, I guess it works but how to access the methods? The 
 photoshop file looks to have them listed but they are all 
 commented out.
They're commented out because Photoshop seems to have only provided a late-binding interface and you have to call them by name through IDispatch.Invoke. It's possible to wrap all that in normal D methods, and I'm working on it, but it won't be ready for a while.
Ok, I've tried things like uncommenting Document Open(BSTR Document, VARIANT As, VARIANT AsSmartObject); void Load(BSTR Document); /*[id(0x70537673)]*/ BSTR get_ScriptingVersion(); /*[id(0x70464D4D)]*/ double get_FreeMemory(); /*[id(0x76657273)]*/ BSTR get_Version(); and everything crashes with bad reference. If I try ComPtr, same thing const auto CLSID_PS = Guid!("c09f153e-dff7-4eff-a570-af82c1a5a2a8"); // PS 90.0 works. auto hr = CoInitialize(null); auto iid = IID__Application; auto ps = cast(_Application)(ComPtr!_Application(CLSID_PS).require); _Application pUnk; hr = CoCreateInstance(&CLSID_PS, null, CLSCTX_ALL, &iid, cast(void**)&pUnk); if (FAILED(hr)) throw new Exception("ASDF"); auto ptr = cast(wchar*)alloca(wchar.sizeof * 1000); auto fn = `ps.psd`; for(auto i = 0; i < fn.length; i++) { ptr[i] = fn[i]; } writeln(ps.get_FreeMemory()); pUnk.Load(ptr); My thinking is that CoCreateinstance is suppose to give us a pointer to the interface so we can use it, if all this stuff is crashing does that mean the interface is invalid or not being assigned properly or is there far more to it than this? (
Jun 15 2016
next sibling parent thedeemon <dlang thedeemon.com> writes:
On Wednesday, 15 June 2016 at 21:06:01 UTC, Joerg Joergonson 
wrote:
 Ok, I've tried things like uncommenting

 	Document Open(BSTR Document, VARIANT As, VARIANT 
 AsSmartObject);
 	void Load(BSTR Document);

 	/*[id(0x70537673)]*/ BSTR get_ScriptingVersion();
   /*[id(0x70464D4D)]*/ double get_FreeMemory();
   /*[id(0x76657273)]*/ BSTR get_Version();
 and everything crashes with bad reference.
...
 My thinking is that CoCreateinstance is suppose to give us a 
 pointer to the interface so we can use it, if all this stuff is 
 crashing does that mean the interface is invalid or not being 
 assigned properly or is there far more to it than this?
First of all, you can't just comment/uncomment parts of COM interface descriptions. Each COM interface has some specific layout of its functions, and if you list them in wrong order or skip some of them the virtual methods table gets completely screwed up, so you think you call one method but end up calling another, because you intended to call method #12 and instead called method #4. COM interface definitions in D must match their definitions in IDL exactly. One omission of a method, one mistake in its type, and you're fucked.
Jun 16 2016
prev sibling parent reply John <johnch_atms hotmail.com> writes:
On Wednesday, 15 June 2016 at 21:06:01 UTC, Joerg Joergonson 
wrote:
 My thinking is that CoCreateinstance is suppose to give us a 
 pointer to the interface so we can use it, if all this stuff is 
 crashing does that mean the interface is invalid or not being 
 assigned properly or is there far more to it than this?
The problem is Photoshop hasn't provided an interface with methods that can be called directly. They don't exist on the interface, hence them being commented out. It's a mechanism known as late binding (everything is done at runtime rather than compile time). You need to ask the interface for the method's ID, marshal the parameters into a specific format, and then "invoke" the method using that ID. And you're not going to like it. Here's an example just to call the "Load" method: // Initialize the Photoshop class instance IDispatch psApp; auto iid = IID__Application; auto clsid = CLSID_Application; assert(SUCCEEDED(CoCreateInstance(&clsid, null, CLSCTX_ALL, &iid, cast(void**)&psApp))); scope(exit) psApp.Release(); // Get the ID of the Load method auto methodName = "Load"w.ptr; auto dispId = DISPID_UNKNOWN; iid = IID_NULL; assert(SUCCEEDED(psApp.GetIDsOfNames(&iid, &methodName, 1, 0, &dispId))); // Put the parameters into the expected format VARIANT fileName = { vt: VARENUM.VT_BSTR, bstrVal: SysAllocString("ps.psd"w.ptr) }; scope(exit) VariantClear(&fileName); DISPPARAMS params = { rgvarg: &fileName, cArgs: 1 }; // Finally call the method assert(SUCCEEDED(psApp.Invoke(dispId, &iid, 0, DISPATCH_METHOD, &params, null, null, null))); tlb2d only outputs the late-bound methods as a hint to the user so they know the names of the methods and the expected parameters (well, it saves looking them up in OleView). Had Photoshop supplied a compile-time binding, you could have just called psApp.Load(fileName) like you tried. It's possible to wrap that ugly mess above in less verbose code using native D types, and the Juno COM library mentioned earlier enabled that, but the code is quite ancient (and is part of and depends on a larger library). I've been slowly working on a more modern library. You'd be able to just write this: auto psApp = makeReference!"Photoshop.Application"(); psApp.Load("ps.psd"); But I don't know when it'll be ready.
Jun 17 2016
next sibling parent Inquie <Inquie data1.com> writes:
On Friday, 17 June 2016 at 08:09:42 UTC, John wrote:
 On Wednesday, 15 June 2016 at 21:06:01 UTC, Joerg Joergonson 
 wrote:
 [...]
The problem is Photoshop hasn't provided an interface with methods that can be called directly. They don't exist on the interface, hence them being commented out. It's a mechanism known as late binding (everything is done at runtime rather than compile time). You need to ask the interface for the method's ID, marshal the parameters into a specific format, and then "invoke" the method using that ID. [...]
Any news on this? I'd like to do some photoshop programming in D too but it seems like a mess?!?
Mar 10
prev sibling parent Inquie <Inquie data1.com> writes:
On Friday, 17 June 2016 at 08:09:42 UTC, John wrote:
 On Wednesday, 15 June 2016 at 21:06:01 UTC, Joerg Joergonson 
 wrote:
 My thinking is that CoCreateinstance is suppose to give us a 
 pointer to the interface so we can use it, if all this stuff 
 is crashing does that mean the interface is invalid or not 
 being assigned properly or is there far more to it than this?
The problem is Photoshop hasn't provided an interface with methods that can be called directly. They don't exist on the interface, hence them being commented out. It's a mechanism known as late binding (everything is done at runtime rather than compile time). You need to ask the interface for the method's ID, marshal the parameters into a specific format, and then "invoke" the method using that ID. And you're not going to like it. Here's an example just to call the "Load" method: // Initialize the Photoshop class instance IDispatch psApp; auto iid = IID__Application; auto clsid = CLSID_Application; assert(SUCCEEDED(CoCreateInstance(&clsid, null, CLSCTX_ALL, &iid, cast(void**)&psApp))); scope(exit) psApp.Release(); // Get the ID of the Load method auto methodName = "Load"w.ptr; auto dispId = DISPID_UNKNOWN; iid = IID_NULL; assert(SUCCEEDED(psApp.GetIDsOfNames(&iid, &methodName, 1, 0, &dispId))); // Put the parameters into the expected format VARIANT fileName = { vt: VARENUM.VT_BSTR, bstrVal: SysAllocString("ps.psd"w.ptr) }; scope(exit) VariantClear(&fileName); DISPPARAMS params = { rgvarg: &fileName, cArgs: 1 }; // Finally call the method assert(SUCCEEDED(psApp.Invoke(dispId, &iid, 0, DISPATCH_METHOD, &params, null, null, null))); tlb2d only outputs the late-bound methods as a hint to the user so they know the names of the methods and the expected parameters (well, it saves looking them up in OleView). Had Photoshop supplied a compile-time binding, you could have just called psApp.Load(fileName) like you tried. It's possible to wrap that ugly mess above in less verbose code using native D types, and the Juno COM library mentioned earlier enabled that, but the code is quite ancient (and is part of and depends on a larger library). I've been slowly working on a more modern library. You'd be able to just write this: auto psApp = makeReference!"Photoshop.Application"(); psApp.Load("ps.psd"); But I don't know when it'll be ready.
So, I was playing around with this method and was able to get things to work. Have you been able to automate this properly? Seems like if we have the interface and methods, we can create an implementation that automates the above marshaling and stuff automatically using reflection? e.g., give interface _Application : IDispatch { ... /*[id(0x4C64536C)]*/ void Load(BSTR Document); ... /*[id(0x71756974)]*/ void Quit(); ... } it shouldn't be too hard to generate a class like Generated code: class PSAppication : _Application { ... void Load(BSTR Document) { // The invoking and marshaling code automatically generated // } ... void Quit() { // The invoking and marshaling code automatically generated // } ... } ? I assume this is what you said you were working on, more or less? Would be awesome if you already had this up and running! If not, I guess I'll try to implement something like it ;/ If you haven't worked on this, I have a few questions for ya: 1. Do we have to cocreateinit every time or can we just do it once? Seems like it could be a major performance issue if we have to call it each time? 2. Marshaling the paramters seems like it could be tricky as we would have to know each case? Scanning the photoshop idl file suggests there are many different parameter and return types(strings, ints, VARIANT_BOOL, com interfaces, enum, etc). A few are easy to handle and you showed how to handle strings, but some of the others I wouldn't know how to do. 3. Does the juno code handle this well enough to copy and paste most of the labor? 4. Any pitfalls to worry about? Thanks.
Mar 10
prev sibling parent reply thedeemon <dlang thedeemon.com> writes:
On Monday, 13 June 2016 at 17:38:41 UTC, Incognito wrote:

 Cool. Oleview gives me the idl files. How to convert the idl 
 files to d or possibly c?
There are ready tools idl2d: https://github.com/dlang/visuald/tree/master/c2d and tlb2idl: https://github.com/dlang/visuald/tree/master/tools I've used this idl2d and it works pretty well (although not perfect, sometimes manual editing still required). Example of real-world DirectShow interfaces translated: https://gist.github.com/thedeemon/46748f91afdbcf339f55da9b355a6b56
 Would I just use them in place of IUnknown once I have the 
 interface?
If you have the interface defined AND you know its IID, you can request it from CoCreateInstance and then use as ordinary D object. You might want to look at this wrapper that takes most of COM machinery: https://gist.github.com/thedeemon/3c2989b76004fafe9aa0 Then you just write almost as in C#, something like auto pGraph = ComPtr!IGraphBuilder(CLSID_FilterGraph, "pGraph").require; ComPtr!ICaptureGraphBuilder2 pBuilder = ComPtr!ICaptureGraphBuilder2(CLSID_CaptureGraphBuilder2).require; pBuilder.SetFiltergraph(pGraph); ... auto CLSID_NullRenderer = Guid!("C1F400A4-3F08-11D3-9F0B-006008039E37"); //qedit.dll auto pNullRendr = ComPtr!IBaseFilter(CLSID_NullRenderer, "nulrend"); pGraph.AddFilter(pNullRendr, "Null Renderer"w.ptr); ... auto imf = ComPtr!IMediaFilter(pGraph); imf.SetSyncSource(null); All the CreateInstance, QueryInterface, AddRef/Release etc. is taken care of. And even HRESULT return codes are automatically checked.
Jun 14 2016
next sibling parent reply Joerg Joergonson <JJoergonson gmail.com> writes:
On Wednesday, 15 June 2016 at 06:09:33 UTC, thedeemon wrote:
 On Monday, 13 June 2016 at 17:38:41 UTC, Incognito wrote:

 Cool. Oleview gives me the idl files. How to convert the idl 
 files to d or possibly c?
There are ready tools idl2d: https://github.com/dlang/visuald/tree/master/c2d and tlb2idl: https://github.com/dlang/visuald/tree/master/tools I've used this idl2d and it works pretty well (although not perfect, sometimes manual editing still required). Example of real-world DirectShow interfaces translated: https://gist.github.com/thedeemon/46748f91afdbcf339f55da9b355a6b56
 Would I just use them in place of IUnknown once I have the 
 interface?
If you have the interface defined AND you know its IID, you can request it from CoCreateInstance and then use as ordinary D object. You might want to look at this wrapper that takes most of COM machinery: https://gist.github.com/thedeemon/3c2989b76004fafe9aa0 Then you just write almost as in C#, something like auto pGraph = ComPtr!IGraphBuilder(CLSID_FilterGraph, "pGraph").require; ComPtr!ICaptureGraphBuilder2 pBuilder = ComPtr!ICaptureGraphBuilder2(CLSID_CaptureGraphBuilder2).require; pBuilder.SetFiltergraph(pGraph); ... auto CLSID_NullRenderer = Guid!("C1F400A4-3F08-11D3-9F0B-006008039E37"); //qedit.dll auto pNullRendr = ComPtr!IBaseFilter(CLSID_NullRenderer, "nulrend"); pGraph.AddFilter(pNullRendr, "Null Renderer"w.ptr); ... auto imf = ComPtr!IMediaFilter(pGraph); imf.SetSyncSource(null); All the CreateInstance, QueryInterface, AddRef/Release etc. is taken care of. And even HRESULT return codes are automatically checked.
Thanks, if I can get the idl converted I'll test it out. It seems idl2d from VD is not easily compilable?
Jun 15 2016
parent reply thedeemon <dlang thedeemon.com> writes:
On Wednesday, 15 June 2016 at 07:01:30 UTC, Joerg Joergonson 
wrote:

 It  seems idl2d from VD is not easily compilable?
I don't remember problems with that, anyway here's the binary I used: http://stuff.thedeemon.com/idl2d.exe
Jun 15 2016
parent Joerg Joergonson <JJoergonson gmail.com> writes:
On Wednesday, 15 June 2016 at 15:12:06 UTC, thedeemon wrote:
 On Wednesday, 15 June 2016 at 07:01:30 UTC, Joerg Joergonson 
 wrote:

 It  seems idl2d from VD is not easily compilable?
I don't remember problems with that, anyway here's the binary I used: http://stuff.thedeemon.com/idl2d.exe
It crashes when I use it ;/ core.exception.UnicodeException src\rt\util\utf.d(290): invalid UTF-8 sequence tbl2d did work and gave me a d file but I need to figure out what IID and IDispatch are.
Jun 15 2016
prev sibling parent reply Joerg Joergonson <JJoergonson gmail.com> writes:
On Wednesday, 15 June 2016 at 06:09:33 UTC, thedeemon wrote:
 On Monday, 13 June 2016 at 17:38:41 UTC, Incognito wrote:

 [...]
There are ready tools idl2d: https://github.com/dlang/visuald/tree/master/c2d [...]
I can't seem to get ComPtr to work. auto ps = ComPtr!_Application(CLSID_PS).require; Where CLSID_PS is the Guid from the registry that seems to work with CoCreate. _Application was generated from tbl2d. See my other post for a more(not much) complete description of the issues files.
Jun 15 2016
parent John <johnch_atms hotmail.com> writes:
On Wednesday, 15 June 2016 at 18:35:42 UTC, Joerg Joergonson 
wrote:
 On Wednesday, 15 June 2016 at 06:09:33 UTC, thedeemon wrote:
 On Monday, 13 June 2016 at 17:38:41 UTC, Incognito wrote:

 [...]
There are ready tools idl2d: https://github.com/dlang/visuald/tree/master/c2d [...]
I can't seem to get ComPtr to work. auto ps = ComPtr!_Application(CLSID_PS).require; Where CLSID_PS is the Guid from the registry that seems to work with CoCreate. _Application was generated from tbl2d. See my other post for a more(not much) complete description of the issues files.
Ensure you are calling CoInitialize before anything else.
Jun 15 2016
prev sibling parent reply Jesse Phillips <Jesse.K.Phillips+D gmail.com> writes:
On Monday, 13 June 2016 at 01:22:33 UTC, Incognito wrote:
 I've been reading over D's com and can't find anything useful. 
 It seems there are different ways:

 http://www.lunesu.com/uploads/ModernCOMProgramminginD.pdf

 which is of no help and requires an idl file, which I don't 
 have.

 Then theres this

 http://wiki.dlang.org/COM_Programming
There is also: https://github.com/JesseKPhillips/Juno-Windows-Class-Library It kind of provides similar highlevel options as the "Modern COM Programming in D." But I don't use it and have only be somewhat keeping it alive (I had some hiccups in supporting 64bit), so I haven't been working to improve the simplicity of interfacing to COM objects. It also includes definitions for accessing Windows COM objects which aren't needed when interfacing with your own or other COM objects. I'd like to have two libraries, Juno Library and Juno Windows Class Library.
Jun 15 2016
parent Joerg Joergonson <JJoergonson gmail.com> writes:
On Wednesday, 15 June 2016 at 16:03:04 UTC, Jesse Phillips wrote:
 On Monday, 13 June 2016 at 01:22:33 UTC, Incognito wrote:
 [...]
There is also: https://github.com/JesseKPhillips/Juno-Windows-Class-Library It kind of provides similar highlevel options as the "Modern COM Programming in D." But I don't use it and have only be somewhat keeping it alive (I had some hiccups in supporting 64bit), so I haven't been working to improve the simplicity of interfacing to COM objects. It also includes definitions for accessing Windows COM objects which aren't needed when interfacing with your own or other COM objects. I'd like to have two libraries, Juno Library and Juno Windows Class Library.
I'll check it it out...
Jun 15 2016