Quick post, I just added support for RAD Studio XE5 to the VCL Styles Utils project, Delphi IDE Theme Editor, WMI Delphi Code Creator and The Delphi Dev. Shell Tools.
Category Archives: Applications
Delphi Dev. Shell Tools – New features 2
I just added a set of new features to the Delphi Dev. Shell Tools
Settings options, Checksum calculation (CRC32, MD4, MD5, SHA1, SHA256, SHA384, SHA512), ,menu customization, copy the content of the selected file to the clipboard, enable/disable check for updates, support for more file extensions (.lpr, .lfm, .proj).
Check the next images.
Support for add custom extensions in some tasks
New option to show in the main menu or a sub menu the available tasks
Checksum calculation CRC32, MD4, MD5, SHA1, SHA256, SHA384, SHA512
Introducing The Delphi Dev. Shell Tools
Update : This project now is hosted on Github.
I just started a new Delphi Project called Delphi Dev. Shell Tools the aim of this shell extension is facilitate some common tasks like open, build and edit a Delphi project , as always the project is hosted in the Code Google site and you can checkout the full source code using any Subversion client. Let me know any comment or suggestion via this blog, to report any issue or suggest a new feature please use the issue page of the project.
Installer
Download the installer from here
Common Tasks for .pas, .dpr, .inc, .pp, .dpk, . dproj, .frm, .fmx, .rc extensions
- Copy file path to the clipboard : Copy the path of the selected file to the clipboard.
- Copy full file-name to the clipboard : Copy the full file-name (Path + Name) of the selected file to the clipboard.
- Open In Notepad : Open the selected file in the notepad editor.
- Open In associated text editor : Open the selected file in the associated text editor.
- Open cmd here : Open the cmd.exe application in the folder of the selected file
- Open RAD Studio Command prompt here : Open the RAD Studio Command prompt (of any installed Delphi version) in the folder of the selected file
- Format Source Code : Format the source code using the formatter.exe tool (included since Delphi 2010)
- Run Touch : Executes the touch.exe tool
- Open with Delphi(N) : Open the selected file with any version of Delphi or Rad Studio installed
- Compile resource file : Compile the selected file (.rc) with BRCC32.exe tool
Specific Tasks for .dpr, .dproj files (Rad Studio Projects), .groupproj (Group Projects)
- Run MSBuild (Default Settings) : Execute MSBuild using the default settings of the selected .dproj file
- Run MSBuild With .. : Execute MSBuild using any of the platforms and targets detected in the selected .dproj file
- MSBuild: Allow to select and execute the MSBuild tool (associated to any version of the RAD Studio installed) using the default configuration of the project
Delphi IDE Theme Editor – New feature : Help Insight Themed
I just added a new feature to the Delphi IDE Theme Editor which allow you to apply the current select theme to the Help Insight window.
Here is how the Help Insight window typically looks like
And now with the current theme applied.
This new option is enabled by default in the tool, but you can disable anytime using the settings window.
The WMI Delphi Code Creator now can create C++ Code compatible with Borland/Embarcadero compilers
After a lots of tests, I can officially announce which the WMI Delphi Code Creator now can create C++ Code compatible with the Borland/Embarcadero compilers. This new feature will be very helpful for developers using Borland/Embarcadero C++ compilers because exist very few documentation about accessing the WMI from these compilers. The generated code can be compiled without any changes using the very old C++ Builder 5 until the modern C++ Builder XE2. The generated code uses the wbemcli.h library which is included in all the versions of C++ builder. Another feature of this release is which the generated C++ code include all the security settings needed to establish local and remote WMI connections.
As always all your suggestions and comments are very welcome.
You can download the application from the WMI Delphi Code Creator page.
C++ Code generated for the tool to access a WMI Class
#pragma hdrstop #include <iostream> using namespace std; #include <wbemcli.h> #include <comdef.h> //CREDENTIAL structure //http://msdn.microsoft.com/en-us/library/windows/desktop/aa374788%28v=vs.85%29.aspx #define CRED_MAX_USERNAME_LENGTH 513 #define CRED_MAX_CREDENTIAL_BLOB_SIZE 512 #define CREDUI_MAX_USERNAME_LENGTH CRED_MAX_USERNAME_LENGTH #define CREDUI_MAX_PASSWORD_LENGTH (CRED_MAX_CREDENTIAL_BLOB_SIZE / 2) // The Win32_Process class represents a sequence of events on a Win32 system. Any sequence consisting of the interaction of one or more processors or interpreters, some executable code, and a set of inputs, is a descendent (or member) of this class. // Example: A client application running on a Win32 system. #pragma argsused int main(int argc, char* argv[]) { wchar_t pszName[CREDUI_MAX_USERNAME_LENGTH+1] = L"user"; wchar_t pszPwd[CREDUI_MAX_PASSWORD_LENGTH+1] = L"password"; BSTR strNetworkResource; //To use a WMI remote connection set localconn to false and configure the values of the pszName, pszPwd and the name of the remote machine in strNetworkResource bool localconn = true; strNetworkResource = localconn ? L"\\\\.\\root\\CIMV2" : L"\\\\remote--machine\\root\\CIMV2"; COAUTHIDENTITY *userAcct = NULL ; COAUTHIDENTITY authIdent; // Initialize COM. ------------------------------------------ HRESULT hres; hres = CoInitializeEx(0, COINIT_MULTITHREADED); if (FAILED(hres)) { cout << "Failed to initialize COM library. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } // Set general COM security levels -------------------------- if (localconn) hres = CoInitializeSecurity( NULL, -1, // COM authentication NULL, // Authentication services NULL, // Reserved RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation NULL, // Authentication info EOAC_NONE, // Additional capabilities NULL // Reserved ); else hres = CoInitializeSecurity( NULL, -1, // COM authentication NULL, // Authentication services NULL, // Reserved RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication RPC_C_IMP_LEVEL_IDENTIFY, // Default Impersonation NULL, // Authentication info EOAC_NONE, // Additional capabilities NULL // Reserved ); if (FAILED(hres)) { cout << "Failed to initialize security. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } // Obtain the initial locator to WMI ------------------------- IWbemLocator *pLoc = NULL; hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc); if (FAILED(hres)) { cout << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } // Connect to WMI through the IWbemLocator::ConnectServer method IWbemServices *pSvc = NULL; if (localconn) hres = pLoc->ConnectServer( strNetworkResource, // Object path of WMI namespace NULL, // User name. NULL = current user NULL, // User password. NULL = current 0, // Locale. NULL indicates current NULL, // Security flags. 0, // Authority (e.g. Kerberos) 0, // Context object &pSvc // pointer to IWbemServices proxy ); else hres = pLoc->ConnectServer( strNetworkResource, // Object path of WMI namespace pszName, // User name pszPwd, // User password NULL, // Locale NULL, // Security flags NULL, // Authority NULL, // Context object &pSvc // IWbemServices proxy ); if (FAILED(hres)) { cout << "Could not connect. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; pLoc->Release(); CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } cout << "Connected to root\\CIMV2 WMI namespace" << endl; // Set security levels on the proxy ------------------------- if (localconn) hres = CoSetProxyBlanket( pSvc, // Indicates the proxy to set RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx NULL, // Server principal name RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx NULL, // client identity EOAC_NONE // proxy capabilities ); else { // Create COAUTHIDENTITY that can be used for setting security on proxy memset(&authIdent, 0, sizeof(COAUTHIDENTITY)); authIdent.PasswordLength = wcslen (pszPwd); authIdent.Password = (USHORT*)pszPwd; authIdent.User = (USHORT*)pszName; authIdent.UserLength = wcslen(pszName); authIdent.Domain = 0; authIdent.DomainLength = 0; authIdent.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; userAcct = &authIdent; hres = CoSetProxyBlanket( pSvc, // Indicates the proxy to set RPC_C_AUTHN_DEFAULT, // RPC_C_AUTHN_xxx RPC_C_AUTHZ_DEFAULT, // RPC_C_AUTHZ_xxx COLE_DEFAULT_PRINCIPAL, // Server principal name RPC_C_AUTHN_LEVEL_PKT_PRIVACY, // RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx userAcct, // client identity EOAC_NONE // proxy capabilities ); } if (FAILED(hres)) { cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; pSvc->Release(); pLoc->Release(); CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } // Use the IWbemServices pointer to make requests of WMI ---- IEnumWbemClassObject* pEnumerator = NULL; hres = pSvc->ExecQuery( L"WQL", L"SELECT * FROM Win32_Process", WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); if (FAILED(hres)) { cout << "ExecQuery failed" << " Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; pSvc->Release(); pLoc->Release(); CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } // Secure the enumerator proxy if (!localconn) { hres = CoSetProxyBlanket( pEnumerator, // Indicates the proxy to set RPC_C_AUTHN_DEFAULT, // RPC_C_AUTHN_xxx RPC_C_AUTHZ_DEFAULT, // RPC_C_AUTHZ_xxx COLE_DEFAULT_PRINCIPAL, // Server principal name RPC_C_AUTHN_LEVEL_PKT_PRIVACY, // RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx userAcct, // client identity EOAC_NONE // proxy capabilities ); if (FAILED(hres)) { cout << "Could not set proxy blanket on enumerator. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; pEnumerator->Release(); pSvc->Release(); pLoc->Release(); CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } } // Get the data from the WQL sentence IWbemClassObject *pclsObj = NULL; ULONG uReturn = 0; while (pEnumerator) { HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); if(0 == uReturn || FAILED(hr)) break; VARIANT vtProp; hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);// String if (!FAILED(hr)) { if ((vtProp.vt==VT_NULL) || (vtProp.vt==VT_EMPTY)) wcout << "Name : " << ((vtProp.vt==VT_NULL) ? "NULL" : "EMPTY") << endl; else if ((vtProp.vt & VT_ARRAY)) wcout << "Name : " << "Array types not supported (yet)" << endl; else wcout << "Name : " << vtProp.bstrVal << endl; } VariantClear(&vtProp); hr = pclsObj->Get(L"ProcessId", 0, &vtProp, 0, 0);// Uint32 if (!FAILED(hr)) { if ((vtProp.vt==VT_NULL) || (vtProp.vt==VT_EMPTY)) wcout << "ProcessId : " << ((vtProp.vt==VT_NULL) ? "NULL" : "EMPTY") << endl; else if ((vtProp.vt & VT_ARRAY)) wcout << "ProcessId : " << "Array types not supported (yet)" << endl; else wcout << "ProcessId : " << vtProp.uintVal << endl; } VariantClear(&vtProp); pclsObj->Release(); pclsObj=NULL; } // Cleanup pSvc->Release(); pLoc->Release(); pEnumerator->Release(); if (pclsObj!=NULL) pclsObj->Release(); CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 0; // Program successfully completed. }
C++ Code generated for the tool to execute a WMI Method
#pragma hdrstop #include <iostream> using namespace std; #include <wbemcli.h> #include <comdef.h> //CREDENTIAL structure //http://msdn.microsoft.com/en-us/library/windows/desktop/aa374788%28v=vs.85%29.aspx #define CRED_MAX_USERNAME_LENGTH 513 #define CRED_MAX_CREDENTIAL_BLOB_SIZE 512 #define CREDUI_MAX_USERNAME_LENGTH CRED_MAX_USERNAME_LENGTH #define CREDUI_MAX_PASSWORD_LENGTH (CRED_MAX_CREDENTIAL_BLOB_SIZE / 2) // The Create method creates a new process. // The method returns an integer value that can be interpretted as follows: // 0 - Successful completion. // 2 - The user does not have access to the requested information. // 3 - The user does not have sufficient privilge. // 8 - Unknown failure. // 9 - The path specified does not exist. // 21 - The specified parameter is invalid. // Other - For integer values other than those listed above, refer to Win32 error code documentation. #pragma argsused int main(int argc, char* argv[]) { wchar_t pszName[CREDUI_MAX_USERNAME_LENGTH+1] = L"user"; wchar_t pszPwd[CREDUI_MAX_PASSWORD_LENGTH+1] = L"password"; BSTR strNetworkResource; //To use a WMI remote connection set localconn to false and configure the values of the pszName, pszPwd and the name of the remote machine in strNetworkResource bool localconn = true; strNetworkResource = localconn ? L"\\\\.\\root\\CIMV2" : L"\\\\remote--machine\\root\\CIMV2"; COAUTHIDENTITY *userAcct = NULL ; COAUTHIDENTITY authIdent; HRESULT hres; // Initialize COM. ------------------------------------------ hres = CoInitializeEx(0, COINIT_MULTITHREADED); if (FAILED(hres)) { cout << "Failed to initialize COM library. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } // Set general COM security levels -------------------------- if (localconn) hres = CoInitializeSecurity( NULL, -1, // COM authentication NULL, // Authentication services NULL, // Reserved RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation NULL, // Authentication info EOAC_NONE, // Additional capabilities NULL // Reserved ); else hres = CoInitializeSecurity( NULL, -1, // COM authentication NULL, // Authentication services NULL, // Reserved RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication RPC_C_IMP_LEVEL_IDENTIFY, // Default Impersonation NULL, // Authentication info EOAC_NONE, // Additional capabilities NULL // Reserved ); if (FAILED(hres)) { cout << "Failed to initialize security. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } // Obtain the initial locator to WMI ------------------------- IWbemLocator *pLoc = NULL; hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc); if (FAILED(hres)) { cout << "Failed to create IWbemLocator object. " << "Err code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } // Connect to WMI through the IWbemLocator::ConnectServer method IWbemServices *pSvc = NULL; // Connect to the root\\CIMV2 namespace // and obtain pointer pSvc to make IWbemServices calls. if (localconn) hres = pLoc->ConnectServer( strNetworkResource, // Object path of WMI namespace NULL, // User name. NULL = current user NULL, // User password. NULL = current 0, // Locale. NULL indicates current NULL, // Security flags. 0, // Authority (e.g. Kerberos) 0, // Context object &pSvc // pointer to IWbemServices proxy ); else hres = pLoc->ConnectServer( strNetworkResource, // Object path of WMI namespace pszName, // User name pszPwd, // User password NULL, // Locale NULL, // Security flags NULL, // Authority NULL, // Context object &pSvc // IWbemServices proxy ); if (FAILED(hres)) { cout << "Could not connect. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; pLoc->Release(); CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } cout << "Connected to root\\CIMV2 WMI namespace" << endl; // Set security levels on the proxy ------------------------- if (localconn) hres = CoSetProxyBlanket( pSvc, // Indicates the proxy to set RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx NULL, // Server principal name RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx NULL, // client identity EOAC_NONE // proxy capabilities ); else { // Create COAUTHIDENTITY that can be used for setting security on proxy memset(&authIdent, 0, sizeof(COAUTHIDENTITY)); authIdent.PasswordLength = wcslen (pszPwd); authIdent.Password = (USHORT*)pszPwd; authIdent.User = (USHORT*)pszName; authIdent.UserLength = wcslen(pszName); authIdent.Domain = 0; authIdent.DomainLength = 0; authIdent.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE; userAcct = &authIdent; hres = CoSetProxyBlanket( pSvc, // Indicates the proxy to set RPC_C_AUTHN_DEFAULT, // RPC_C_AUTHN_xxx RPC_C_AUTHZ_DEFAULT, // RPC_C_AUTHZ_xxx COLE_DEFAULT_PRINCIPAL, // Server principal name RPC_C_AUTHN_LEVEL_PKT_PRIVACY, // RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx userAcct, // client identity EOAC_NONE // proxy capabilities ); } if (FAILED(hres)) { cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; pSvc->Release(); pLoc->Release(); CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } // Use the IWbemServices pointer to make requests of WMI ---- BSTR MethodName = SysAllocString(L"Create"); BSTR ClassName = SysAllocString(L"Win32_Process"); IWbemClassObject* pClass = NULL; hres = pSvc->GetObject(ClassName, 0, NULL, &pClass, NULL); IWbemClassObject* pInParamsDefinition = NULL; hres = pClass->GetMethod(MethodName, 0, &pInParamsDefinition, NULL); IWbemClassObject* pClassInstance = NULL; hres = pInParamsDefinition->SpawnInstance(0, &pClassInstance); VARIANT varCommand; varCommand.vt = VT_BSTR; varCommand.bstrVal = L"cmd.exe"; hres = pClassInstance->Put(L"CommandLine", 0, &varCommand, 0); VariantClear(&varCommand); // Execute Method IWbemClassObject* pOutParams = NULL; hres = pSvc->ExecMethod(ClassName, MethodName, 0, NULL, pClassInstance, &pOutParams, NULL); if (FAILED(hres)) { cout << "Could not execute method. Error code = 0x" << hex << hres << endl; cout << _com_error(hres).ErrorMessage() << endl; SysFreeString(ClassName); SysFreeString(MethodName); if (pClass) pClass->Release(); if (pInParamsDefinition) pInParamsDefinition->Release(); if (pOutParams) pOutParams->Release(); if (pSvc) pSvc->Release(); if (pLoc) pLoc->Release(); CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 1; // Program has failed. } VARIANT varReturnValue; hres = pOutParams->Get(L"ProcessId", 0, &varReturnValue, NULL, 0); if (!FAILED(hres)) { if ((varReturnValue.vt==VT_NULL) || (varReturnValue.vt==VT_EMPTY)) wcout << "ProcessId : " << ((varReturnValue.vt==VT_NULL) ? "NULL" : "EMPTY") << endl; else if ((varReturnValue.vt & VT_ARRAY)) wcout << "ProcessId : " << "Array types not supported (yet)" << endl; else wcout << "ProcessId : " << varReturnValue.uintVal << endl; } VariantClear(&varReturnValue); hres = pOutParams->Get(L"ReturnValue", 0, &varReturnValue, NULL, 0); if (!FAILED(hres)) { if ((varReturnValue.vt==VT_NULL) || (varReturnValue.vt==VT_EMPTY)) wcout << "ReturnValue : " << ((varReturnValue.vt==VT_NULL) ? "NULL" : "EMPTY") << endl; else if ((varReturnValue.vt & VT_ARRAY)) wcout << "ReturnValue : " << "Array types not supported (yet)" << endl; else wcout << "ReturnValue : " << varReturnValue.uintVal << endl; } VariantClear(&varReturnValue); // Clean up SysFreeString(ClassName); SysFreeString(MethodName); pClass->Release(); pInParamsDefinition->Release(); pOutParams->Release(); pLoc->Release(); pSvc->Release(); CoUninitialize(); cout << "press enter to exit" << endl; cin.get(); return 0; }
Delphi IDE Theme Editor – Now supports Lazarus
The Delphi IDE Theme Editor now supports the Lazarus IDE , so you can use any of the themes included in the installer or make your own theme. you can add the themes to the Lazarus IDE coping the generated themes (check the Themes Lazarus folder in the installation path or download the included Lazarus themes from here) to the primary_conf_path/userschemes/ folder (example in windows vista the folder is C:\Users\<Windows User>\AppData\Local\lazarus\userschemes) or let to the tool apply the current theme to Lazarus IDE.
For more information about the Lazarus color schemes check these articles
ScreenShots
Delphi Preview Handler – source code published in google code
Update : this project now is hosted on Github.
A few hours ago I published in the google code site the code of the Delphi Preview Handler project, under the Mozilla Public License 1.1 , now you can browse in the code and make your suggestions and report bugs using the issue page of the project. I also want to thank to Uwe Raabe by allow me use part of his work in this article to rewrite some parts of the preview handler.
WMI Delphi Code Creator – New features and source code published in google code
Update : The WMI Delphi Code Creator now is hosted on Github.
In the last months I’ been working in a new version of the WMI Delphi Code Creator, porting the original code from Delphi 2007 to XE, adding new features like support for Delphi Prism and Free Pascal, and improving the source code generated by the tool. Now is time to show the results, so the new version is here with many new features, also the full source code is now available in the google code project hosting site under the Mozilla Public License 1.1
Check the list of features of the current version
- Can generate object pascal code compatible with one of these compilers Delphi Win32, Delphi -Prism (Oxygene) , Free Pascal
- The Delphi code generated is compatible with Delphi 7, 2005, BDS/Turbo 2006 and RAD Studio 2007, 2009, 2010, XE.
- The Free Pascal code generated is compatible with these versions 2.4.2, 2.4.4
- The Delphi prism .Net (Oxygene) generated code is compatible with all the versions up to 4.0.23.741 (in newer versions must work too)
- Full access to metadata of any WMI Class registered in the system including qualifiers, mof definition, properties, methods, events
- You can access directly from the application the MSDN web page related to the WMI Class which your are using.
- Compile and run the generated code directly form the application using the selected compiler.
- Open the the generated Delphi code in any of these Delphi IDE’s 7, 2005, BDS/Turbo 2006 and RAD Studio 2007, 2009, 2010, XE
- Open the the generated Free Pascal code directly in the Lazarus IDE.
- Open the the generated Delphi Prism code directly in Visual Studio 2008, Visual Studio 2010 or MonoDevelop.
- Runs on Windows XP, 2003, 2008, Vista and 7.
- Themes support for Syntax highlighting (+50 themes included) compatible with the Delphi IDE Theme Editor.
For download the new version of the application and more details go to project page
Introducing the Delphi Preview Handler
To download the last version of the delphi preview handler check the new page of the project.
The current beta version of the preview handler (DelphiPreviewHandler.dll) is 1.0.1.168 please check the version installed before you report bugs.Some weeks ago I began a parallel project to the Delphi IDE Theme Editor, I name this project Delphi Preview Handler, which basically is a preview handler for windows vista and 7 which allow you read your object pascal, C++ and Assembly code with Syntax highlighting without open in a editor, this preview handler can render these file extensions .pp, .lpr, .lfm, .lpk, .inc, .pas, .dpr,.dfm, .dpk,.dproj, .bdsproj,.c, .cpp,. cc,.h, .hpp,.hh, .cxx, .hxx, . cu, .asm.
Features
- Supports Windows Vista y Windows 7 32 and 64 bits.
- +50 themes included to see your code with style
- Themes compatibles with the Delphi IDE Theme Editor
- Support these file extensions .pp, .lpr, .lfm, .lpk, .inc, .pas, .dpr,.dfm, .dpk,.dproj, .bdsproj,.c, .cpp,. cc,.h, .hpp,.hh, .cxx, .hxx, . cu, .asm.
Technical Stuff
- Written in Delphi XE
- Components used SynEdit
Screenshots
Video
Source Code
Soon, very soon.
Manual Installation
Follow these steps to register the preview handler
1. Choose Start > All Programs > Accessories.
2. Right-click on Command Prompt, Select Run As Administrator, and Authenticate.
3. Go to Delphi Preview Hander folder in Command Prompt.
4. Run “Register.bat”
5. Enjoy
Important Note about editing the Settings.ini file
You can change the theme used in the Preview Handler editing the Settings.ini file, but before to do this you must unregister the preview handler and close all the explorer windows. to avoid problems. please follow these steps :
1. unregister the dll
2.close all the windows explorer
3.edit the Settings.ini file
4.save the changes
5.register the dll
6.enjoy
Important Note about installing a new version
In order to avoid problems you must follow these steps when you install or register a new version of the preview handler.
1. close all the windows explorer windows which have the preview handler active or the preview handler was used (remember the dll remains in memory until the windows explorer was closed)
2. unregister the previous version executing the uninstaller located in C:\Program Files (x86)\TheRoadToDelphi\DelphiPreviewHandler or C:\Program Files\TheRoadToDelphi\DelphiPreviewHandler
3. If you install the preview handler manually you must unregister using the UnRegister.bat running as admin.
4.Now proceed with the installation of the new version.
Download the Binaries of the Delphi Preview Handler from here
Download the Installer (recommended) of the Delphi Preview Handler from here
All your suggestions and comments are very welcome.
Delphi IDE Theme Editor – New features added
New features was added to the Delphi IDE Theme Editor.
Added Color dialog with color picker.
Added option to report bugs and suggestions directly
The themes included with the tool were improved.
Some Minor bugs fixed
Check the screenshots
To download the last version go to the main page of the project.
Remember. to make your suggestions or report bugs use the Issue page of the project.