SAPI5 voices / using 32bit voices - c++

After spending a whole lot of time on searching the web I think it's time to ask.
I'm trying to implement some text to speech with SAPI5 in C++.
The only available 64bit voice is Anna. With Anna everything is fine, but I also need a german voice. So I found Hedda(Microsoft) and Steffi(Realspeak).
I already feel like implementing some dating service.
Neither Hedda nor Steffi are added to the registry. So both of them are not detected by SAPI while it checks "HKLM\SOFTWARE\Microsoft\Speech\Voices" to get the required tokens to select voices.
I also tried to change the registry paths to ...\SOFTWARE\Wow6432Node... to use the 32bit voices, but no success.
Does anybody know how to use Hedda or Steffi with Sapi?
Is there any way to use the 32bit voices?
Hope anyone can help.
Thanks in advance.

You can use 32 bit voices if you build a 32 bit program, and have 32 bit voices installed to the registry correctly. I describe how to do this registry hack over here. Basically, you just move things around in the registry. The quickest way to accomplish this is to install all of the voices that you want, and then use RegEdit to export those specific registries for where your speech platform voices are.
Then open the registry files with a text editor and replace "Speech Server\v11.0\Voices" with "Speech\Voices"
and replace "Speech Server\v11.0\Voices" with "Speech\Voices". Save off the registry files and then run them to add to your registry.
You should be able to test your new voices in your normal text to speech dialog that windows provides. If however you're on a 64 bit system and you want to test 32 bit voices (because you're building a 32 bit program) you'll have to open the windows speech to text dialog with either
C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl
for 32 bit voices I believe and
C:\Windows\System32\Speech\SpeechUX\sapi.cpl
for 64 bit systems voices.
As contradictory as that seems.

Well, editing the registry did the job.
After copying the registry entrys from "\Speech Server\v11.0..." to "\Speech..." (see Lesley Gushurst) and reinstalling SDK, Runtime and voice, voice-"Hedda" can be used on 64bit system with 64 bit application.
Thanks for your help.

Related

C++: Find Installation Directory of MS PowerPoint Viewer

I would like to call MS PowerPoint Viewer executable(PPTVIEW.exe) from within my C++ application.
I do not wish to ask the user, where MS PowerPoint viewer is installed. I believe, it is not professional and relies on user making appropriate input. Instead, I would like to be able to identify the location of the installation directory on my own.
For example, the default location of MS PowerPoint Viewer 2007 is the following:
c:\program files\microsoft office\office12\PPTVIEW.exe
This of course does not have to be always true, especially different versions (2003, 2007, 2010) have have different locations.
Would you advise, please, where to get the correct path, and even better, to be able to identify, if MS PowerPoint viewer is not installed at all?
There must be something in the registry, but which key is the correct one?
I use:
Non Managed C++
Needs to be compatible with WinXP
Should be compatible with bot 32 and 64 bit OS
Should be able to identify location of Powerpoint Viewer of all the versions after 2003(including.)
Thank you.
The best solution so far i found is searching for the appropriate path in registry by reading the following registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\pptview.exe
The key above gives me location to where PowerPoint Viewer is installed. However, I have no clue whether this key is present in every workstation where PowerPoint Viewer is installed.
If you rephrase the question as "I would like to display a powerpoint in slideshow mode from within my C++ application." then it would be easy to achive this by querying the registered file handler and using the applicable COM object.
The following registry key will be present if there is a registered extension handler:
HKEY_CLASSES_ROOT\.pptx\

How can I find out version of MSWord on computer?

Can anybody help, please. How can I find out version of msword installed on computer? If there is few versions of it, find out that version which open '.doc' by default. Can anybody suggest some C++ functions or algorithm for this task? Sorry for bad english :( Thank you for help.
you can read the registry entry from the path.
for.....
Office 2003 = 11
Office 2007 = 12
Office 2010 = 14
HKLM\Software\Microsoft\Office\12.0\Word\Registration{-------------}\AccessNameVersion
HKLM\Software\Microsoft\Office\12.0\Word\Registration{-------------}\ExcelNameVersion
HKLM\Software\Microsoft\Office\12.0\Word\Registration{-------------}\OutlookNameVersion
HKLM\Software\Microsoft\Office\12.0\Word\Registration{-------------}\PowerPointNameVersion
If I want to know what version of Word, I look at the registry key HKEY_CLASSES_ROOT\Word.Application\CurVer
It will give you a ProgId like: "Word.Application.14", "Word.Application.12", or "Word.Application.11" for Office 2010, 2007, and 2003 respectively. The part to the right of the last "." gives the version. If you look at "Word.Document", it won't always give the correct answer because there are feature packs that can be installed that will allow an older version of Word to read a new version of Word document. These feature packs update some registry settings for Word.Document, but they leave Word.Application alone.
Please don't go rummaging through the registry when there are APIs available. Using the appropriate APIs will help make sure your test works for all versions of Windows and Word.
To find out which executable is registered to handle a certain file type (like .doc), use AssocQueryString. Once you have the path to the executable, you can check its version number using GetFileVersionInfo and VerQueryValue.
If you just want to find out which versions are installed (regardless of which application is associated with .doc), you can probably query Windows Installer. Check out MsiEnumProductsEx and MsiGetProductInfo.
There's probably also a way to query for this stuff using WMI.

Pseudographical environment in windows Command Prompt

actually i'm thinking of creating a cool interface for my programming assignment , so i go around searching on how to do it so that such an effect can be create , below is the image .
The Question
1.)What is needed in order to create a program that run pseudographic(semigraphic or whatever they called it) that has menu like BIOS wizard did??I always see some program run in console but it could have graphical-like looking , for example blue environment , and user can use keyboard to choose a list of setting in a menu.
Thanks for spending time reading my question.
It's called Text-based user interface. There're several libraries for doing this. I think this is what you're looking for. :)
Cross platform, Interactive text-based interface with command completion
http://www.gnu.org/s/ncurses/
Ncurses(or maybe pdcurses) is probably what you need.
In the days of 16-bit Windows console windows used to support ANSI escape sequences (via the ansi.sys driver), but they no longer do.
For the apparent line graphics you need to use a platform specific solution anyway, so I recommend just writing an abstraction (functions, class) over the Windows APIs console functions.
The line graphics is done by using characters from the original IBM PC character set, codepage 437. At first you can just hardcode the various patterns. In order to make it seem more like line drawing to the code, or from the code's perspective, so to speak, you'll have to abstract things again. As I remember there is some partial but not complete system in the original codepage 437 character codes. But for Windows console you will need to use the Unicode character codes, which probably do not preserve the original system, so perhaps just define a map where these graphics characters are placed more systematically.
Possibly that already exists.
If you don't care about portability, the Windows API for this can be found here. It will supply all the functions you need, without the need to pack additional libraries with your application.
You can also look in to graphics.h, a non-standard Borland extension that a lot of older graphical games used to use. It goes far beyond the normal limits of the console, but is only supported by 16 bit systems, of which Microsoft has all but removed support for from Windows. You'd also need an ancient Borland compiler, or an emulation, though you probably want the original look and feel.

Windows C++ Hex Viewer GUI component

I'm looking for a Windows C++ (or a Embarcadero Delphi/C++ Builder VCL component) GUI component for a professional looking Hex Viewer/Editor. While pretty easy to build up a rudimentary one I require a polished modern looking component. (Can handle arbitrary amounts of data, loading from some sort of stream as needed. Colors/Fonts customizable. Highlight byte selections/individual bytes)
2 of the more usable hex viewer/editor components from applications I've seen in action are below:
http://niiconsulting.com/checkmate/wp-content/uploads/2009/10/fileinsight-2.jpg
http://www.the-interweb.com/bdump/hexer/hexer-linux.png
Can anybody recommend anything?
Thanks in advance.
After a quick search on the interwebs, I found the following component for Delphi:
http://www.tkweb.eu/en/delphicomp/khexeditor.html
QHexEdit2 is now able to edit large files (> 2 GBytes) and is available for Qt4, Qt5, PyQt4, PyQt5. It is now hosted on Github
https://github.com/Simsys/qhexedit2
You didn't mention Qt as an option as a C++ library to use. But it sounds like your circumstance may be flexible. So if you're able to use it there are a couple of options I noticed.
There's a hex component that you can drop in as a replacement for QPlainTextEdit or whatever:
https://github.com/Simsys/qhexedit2
The webpage for that says that the size of data has in general to be below 10 megabytes. A heavier-weight paging solution exists as a program called LFhex (source in the download)
http://stoopidsimple.com/lfhex

How to programmatically get windows search history?

How to get the windows search history and use it in my program? For example I write ".doc" in windows search bar. Now I want in my program to find out from somewhere, that I searched for ".doc" in my system (not web).
I don't know if there's an API for it, but if you do a Windows search for an unlikely string, say "zxcvbnm", then search the registry for it, then on XP you can see it under one of the folders in:
HKEY_CURRENT_USER\Software\Microsoft\Search\ACMru
along with the rest of your recent search strings. I imagine this registry location may change between Windows versions though.
If you're targetting Windows 7 then this MSDN article looks like a good starting point.