The small application is a goos sample and useful tool in the same time. It enumerates PE binary resources and counts languages used. Why? Normally you want single language of resources, however Visual Studio IDE does not show you languages in a convenient way and it is so easy to make a language mess which does not bite you immediately but might bring you troubles later. Apart from this there was a suspicion that language mess might cause runtime bugs on UpdateResource API.
The application gets you a summary of languages used and returns with exit code (checkable using e.g. errorlevel) indicating number of languages.
Output is TSV: LANGID, Language Name, Resource Count:
C:\>ListResourceLanguages.exe C:\Windows\syswow64\shell32.dll
1049 Russian 5451033 English 3318
This update for Resource Tools adds an option to access custom resource types, such as FILE, TYPELIB, REGISTRY etc. It lets enumerate the resource, and load/save them. The COM interafce adds new Items property; the code snippet below accesses type library of image2.dll and saves it into external tyle library file image2.tlb:
Additionally, image.EndUpdate(false) call makes the object close all references to the underlying file so that it can be available for other operations (e.g. overwrite), and the COM object might be further re-initialized and reused.
One of the nasty issues with LogProcessExceptions utility was that it was unable to attach to service processes and track them to catch their exceptions.
The actual problem was that the processes were not listed in first place, so there was nothing to attach to. Access and security requirements necessary for a process to debug another process are listed in MSDN DebugActiveProcess article:
The debugger must have appropriate access to the target process, and it must be able to open the process for PROCESS_ALL_ACCESS. DebugActiveProcess can fail if the target process is created with a security descriptor that grants the debugger anything less than full access. If the debugging process has the SE_DEBUG_NAME privilege granted and enabled, it can debug any process.
The utility did enable the SE_DEBUG_NAME privilege, however it was doing it prior to starting debugging session and after the process of interest was already pointed to by user.
This was insufficient because EnumProcesses only lists service processes (not actually exactly services, but processes running in different security context) in case debug privilege is already enable by the time of the API call. The utility now enabled the privilege well in advance and list the services, so can be effectively applied to those.
Download links:
Partial Visual C++ .NET 2010 source code: Trac, Subversion
Direct3D based DirectShow video renderers – Video Mixing Renderer 9 and Enhanced Video Renderer – have been notoriously known for consuming resources in a way that you can run at most X simultaneously. There has been no comment published on the topic and questions (e.g. like this: How many VMR 9 can a PC support concurrently) remain unanswered for a long time. Video Mixing Renderer 7 was a good alternative for some time in past until it was cut down to be unable to support hardware scaling (thanks Microsoft!).
The trendy way to render video nowadays is using Enhanced Video Renderer, a Media Foundation subsystem with an interface into DirectShow to take over state of the art video rendering capabilities. So, how many EVRs one can run simultaneously? Chances are that it is less than one could suppose.
The interesting part is that there is no obvious evidence on type of resource running out, which causing next EVR instance to fail to run. And not even run, the failure seem to be coming up at an earlier stage of just connecting pins in stopped state. The failure might be accompanied with errors like E_INVALIDARG, ERROR_FILE_NOT_FOUND, E_UNEXPECTED. The actual limit appear to be loosely correlating to parameters of video output, such as resolution and bitness.
Desperately waiting for clarification, I am sharing the tool to estimate the limit:
multiple EVR instances at once, hosted by multiple windows, which can be distributed across multiple monitors
choices of resolutions and formats
a double click on an individual renderer pops up property page set displaying effective frame rate
The library implements SMTP client and exposes a simple COM interface to send emails. The interface is simple and straightforward, and the emails can be send from various environments, including such as JavaScript code. The class supports SSL/TLS security and is GMail compliant.
A JScript code snippet below provides a sample use case:
message =newActiveXObject("AlaxInfo.EmailTools.Message");
message.ServerHost ="mail.alax.info";//message.ServerPort = 25;
message.Sender ="Sender <test@alax.info>";
message.ToRecipients ="Recipient <address@gmail.com>";//message.CcRecipients = "";//message.BccRecipients = "";
message.Subject ="Message Test (Plain)";
message.Body ="This is an e-mail message test:"+"\r\n"+""+"\r\n"+"- Security: None"+"\r\n"+"- Authentication: Plain Text (PLAIN)"+"\r\n"+"";
message.AuthMethods ="plain";
message.AuthName ="test@alax.info";
message.AuthPassword ="12345678";
message.Send();
The capabilities include:
No additional dependencies – regsvr32 the DLL and it’s ready to use; SSL/TLS implementation through SChannel API
UTF-8 encoding and support for Unicode and international characters
Today’s update lets you convert multiple locations at once with a single click. Here is the story behind the update and use case scenario.
In rally raid sport events (so called baja), a team gets a road book for the next competition day in a few hours before actual start. The GPS coordinates are printed on one of the pages of the roadbook and are not available in any electronic format.
There were just a few times when the organizer also uploaded a copy of a file with the coordinates and shared a link to download from, but this was rather an exception. Another alternate option was a dedicated person to upload the coordinates (they were earlier full tracks, but at some point tracks were no longer available at all) to pilots’ hardware, but in a state of pre-start рфыеу and variety of GPS hardware, formats, cable etc. this created lines of people. The most one can rely on is a sheet of paper with GPS coordinates. The mistery does not end even here as you don’t know whether you are to get Degrees only, or Degrees and Minutes, or Degrees, Minutes and Seconds. Everything depends on software the organizer uses.
As soon as you get a hard copy of this, the idea is to upload it into device as quickly as possible because there are other things to do and the time is normally 11 PM when the race is to start 7 AM next day tens of miles away from you. The time interval will be shared by uploading data, sleeping and transfer to start location.
The utility is here to grant extra sleep time. Since it is capable to accept various separators on the input, a convenient way is to quickly type in the text in Microsoft Excel, check the data against the hardcopy, and copy into clipboard to transfer to the utility.
A hotkey with conversion transfers data into format of interest, and single “Find and Replace” operation creates a good OziExplorer waypoint file which is good for upload onto portable navigation device.
The whole thing take a few minutes to do with minimal routine typing in.
Important: if you have a DirectShow question which is not directly related to posted material, please rather post it at DirectShow Development MSDN Forum, especially instead of asking me in the website chat.
Recent Comments