|
store the user preferred volume (usually 0 [mute] - 10) and send/check this whenever you play sound. the exact code depends on what/how you are playing audio
|
|
|
|
|
I have run into a problem with registration keys ".Default\\.Default". WHat I am trying to do is read the "Apps\\Events\\.Default\\.Default" value. I am trying to identify System sound events that are attached to a .wav file for inclusion in a list box.
The Means Justifies the Ends
|
|
|
|
|
oldmirco wrote: I have run into a problem
What is the problem?
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
Do you need to read with RegEnumValue?
|
|
|
|
|
When I try:
RegOpenKeyEx(HKEY_CURRENT_USER,"AppEvents\\EventLabels", 0L,KEY_READ, &SoundsKey);
and use:
RegEnumKeyEx(SoundsKey,dwIndex,lpSubKey,&dwSubKeysz,
NULL, lpData, &dwDatasz, &ftLastWriteTime);
to return the next level in the chain, and use:
RegOpenKeyEx(HKEY_CURRENT_USER,
("AppEvents\\EventLabels\\"+lpData),
0L,KEY_READ, &SoundsKey);
(the strings concatenated in code)
I get an error code.
The Means Justifies the Ends
|
|
|
|
|
oldmirco,
you get this error "AppEvents\\EventLabels\\"+lpData
or you get runtime error
|
|
|
|
|
char buffer80[80];
char buffer256[256];
char buffer512[512];
LONG retValue;
CString EventKey;
CStringList EventKeyList;
CString DisplayValue;
FILETIME ftLastWriteTime;
HKEY SoundsKey;
DWORD dwIndex = 0;
DWORD dwSubKeysz;
char * lpSubKey = buffer256;
char * lpData = buffer512;
DWORD dwDatasz;
// "HKEY_CURRENT_USER\AppEvents\"
if (RegOpenKeyEx(HKEY_CURRENT_USER,"AppEvents\\EventLabels", 0L,
KEY_READ, &SoundsKey)==ERROR_SUCCESS)
{
do
{
*lpSubKey = 0;
dwSubKeysz = 256;
*lpData = 0;
dwDatasz = 512;
retValue = RegEnumKeyEx(SoundsKey,dwIndex,lpSubKey,&dwSubKeysz,
NULL, lpData, &dwDatasz, &ftLastWriteTime);
switch(retValue)
{
case ERROR_SUCCESS:
//add sub Key to a CStringList
EventKeyList.AddTail(lpSubKey);
/* the values should include ".Default", "Close", "Minimise", "Open"
"Start", "SystemAsterisk" etc. w/o the full key hierarchy
*/
break;
case ERROR_NO_MORE_ITEMS:
AfxMessageBox("No More Items", MB_OK);
break;
default:
if (AfxMessageBox("Try Again?", MB_OKCANCEL)!=IDOK) return TRUE;
}
dwIndex++;
} while(retValue!=ERROR_NO_MORE_ITEMS);
}
//Look in HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default
if (RegOpenKeyEx(HKEY_CURRENT_USER,"AppEvents\\Schemes\Apps\\.Default", 0L,
KEY_READ, &SoundsKey)==ERROR_SUCCESS)
{
// get key values
dwIndex = 0;
POSITION Ip = EventKeyList.GetHeadPosition();
while (Ip!=NULL)
{
*lpData = 0;
dwDatasz = 512;
DisplayValue = EventKeyList.GetNext(Ip);
strcpy(lpSubKey, DisplayValue);
/*
the keys that are stored in the EventKey list: ".Default", "Close", "Minimise", "Open"
"Start", "SystemAsterisk" either will or will not have a file name
(with a ".wav") as a data value. Those that have a value are
system sounds that will play, and that I want in the list box.
*/
retValue = RegQueryValueEx(SoundsKey,lpSubKey,NULL,NULL,(unsigned char*)lpData,&dwDatasz);
switch(retValue)
{
case ERROR_SUCCESS:
DisplayValue += " = ";
if (*lpData) DisplayValue += lpData;
if (AfxMessageBox(DisplayValue, MB_OK)!=IDOK);
break;
case ERROR_NO_MORE_ITEMS:
DisplayValue += " Not here";
AfxMessageBox(DisplayValue, MB_OK);
break;
default:
// This is the message for every item:
DisplayValue += " Error!";
if (AfxMessageBox(DisplayValue, MB_OKCANCEL)!=IDOK) return TRUE;
}
dwIndex++;
}
}
The Means Justifies the Ends
|
|
|
|
|
Hope I understood your question
I guess when I see RegEnumValue in title that you need to read value from keys
I find your problem you want run this way(I suggest) maybe you find a good way
...
...
... code is ok
//Look in HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default
then I suggest use this way
these keys are with subkey (example .Default with .Current and .Default
1- you want read first root that is HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default(RegOpenKeyEx)
then read first subkey with RegEnumKeyEx(.Default)
2-now you want concat root with current key
TCHAR test[256];
test[0]='\0';
strcat(test,"AppEvents\\Schemes\\Apps\\.Default");
strcat(test,"\\");
strcat(test,lpSubKey);//.Default
3-RegCloseKey(SoundsKey);
4-open new path with RegOpenKeyEx (test )
5-now you want subkeys from .Default that are .Default and .Current
6-RegCloseKey(SoundsKey);
7-now you need to loop for read subkeys from
HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\.Default that are two keys
and hold in one Array
now you want concat these subkeys with current path but first close RegCloseKey(SoundsKey);
in the loop
<br />
for(int i=0;i<m_Array.GetCount();i++)<br />
{<br />
CString str;<br />
str=m_Array.GetAt(i);<br />
now concat current path with current subkey that is <br />
strcat(HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\.Default\.Current<br />
<br />
and use RegEnumValue for read value that is one path .wav<br />
next key is .Default<br />
}<br />
maybe it is some helpful to you
|
|
|
|
|
CWnd has no such RegEnumValue() method.
oldmirco wrote: WHat I am trying to do is read the "Apps\\Events\\.Default\\.Default" value.
So what's the problem? Are you using RegQueryValueEx() ?
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"We will be known forever by the tracks we leave." - Native American Proverb
|
|
|
|
|
Hi everybody!
Sorry for my bad english.
I would like to programmatically prevent from powering of the computer with the power off button. but I dont care about holding the power off button 5 second to hard shut the computer. Just the smooth shutdown.
in microsoft word, when you edit a document and do not save it. If you press the power down button ( digital type ), a Dialog will pop and ask you to save the document. If you press cancel, the System will not shut down and the application will stay active. I would like to do the same with my application.
Thanks in advance for your help!
Sébastien Nadeau
Security Software Developper
|
|
|
|
|
|
|
Hi All,
I am doing a project which deals with the basic file operations, like creating a file, renaming a file, copying a file, deleting a file etc.
can anyone suggest me a best way to do this without impacting the performance.
i have to do these operations 10000 times.
thanks
peruv
|
|
|
|
|
File I/O is going to impact performance.
For create/writing the file use CFile. For rename/delete just use the standard Win32 API calls.
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
Try std::fstream .
Maxwell Chen
|
|
|
|
|
In addition to the previous two good ideas, also consider a background app that has no GUI interface of its own, perhaps a dll.
The Means Justifies the Ends
|
|
|
|
|
Hi,
I'm trying to follow the example described at http://www.codeproject.com/dll/XDllPt1.asp to create and use the contents of a DLL from a VC++ application. Problem is that i'm using Visual Studio .NET 2003 instead of Visual Studio 6 in the example.
It seems my project wizard does not have the "Win32 Dynamic Link Library" option. The only kind of project that look like a DLL is named "MFC DLL" and has 3 possible options. 2 of them create an instance of a class that derives from CWinApp and I guess I don't want that. The last option creates a project with a DllMain entry point (just like the example) but there are also some differences (see cpp file below).
So I'm wondering if I can get VS .NET 2003 to behave as VS 6 does (something I didn't see in the project wizard or in the installation setup) or if I must go on using the provided template (meaning there are some good reasons why the template file for a dll has changed in VS .NET 2003).
Thanks for your help.
cpp template file :
#include "stdafx.h"
#include <afxdllx.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
static AFX_EXTENSION_MODULE testdll02DLL = { NULL, NULL };
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("testdll02.DLL Initializing!\n");
// Extension DLL one-time initialization
if (!AfxInitExtensionModule(testdll02DLL, hInstance))
return 0;
// Insert this DLL into the resource chain
// NOTE: If this Extension DLL is being implicitly linked to by
// an MFC Regular DLL (such as an ActiveX Control)
// instead of an MFC application, then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL. The Regular DLL
// that uses this Extension DLL should then explicitly call that
// function to initialize this Extension DLL. Otherwise,
// the CDynLinkLibrary object will not be attached to the
// Regular DLL's resource chain, and serious problems will
// result.
new CDynLinkLibrary(testdll02DLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("testdll02.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(testdll02DLL);
}
return 1; // ok
}
|
|
|
|
|
Hi! I've got such a question.
Prog using ODBC MS Access (.mdb) (appWizard-SDI-DatabaseView).
In DB I Have a field with time format. So in MySet.h it's Ctime m_MyTime;
I must put this value into edit box. But DDX_FieldText doesn't support CTime (any time) vars.
DDX_FieldText(pDX, IDC_MYTIME, m_pSet->m_MyTime, m_pSet); - prohibited.
I've tried this:
1) changed type of m_MyTime to TIMESTAMP_STRUCT
2) converted time struct to string:
CString strConv;
strConv.Format("%u:%u:%u",m_pSet->m_PlanTime.hour,
m_pSet->m_PlanTime.minute, m_pSet->m_PlanTime.second);
3)call DDX:
DDX_FieldText(pDX, IDC_MYTIME, strConv, m_pSet);
It worked but, when calling MoveNext it asserts dbcore.cpp line 2029
It means (from file):
// If no field found, m_nFieldFound will still be zero
ASSERT(fx.m_nFieldFound != 0);
Any ideas?
Thank you.
|
|
|
|
|
SwordeR wrote: But DDX_FieldText doesn't support CTime (any time) vars.
You need to use RFX_Date() . ClassWizard should have done this for you when the record set was created.
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"We will be known forever by the tracks we leave." - Native American Proverb
|
|
|
|
|
RFX_Date() is present. I meant how to make editbox-recorset exchange with DDX_FieldText. Now i'm using through SetWindowText/GetWindowText.
|
|
|
|
|
Is it easily possible to change the exponent bits of a double?
"There are 10 types of people, those who understand binary, and those who don't."
- Somebody, not me.
|
|
|
|
|
In the sense that I want to take the value and decrement it...
"There are 10 types of people, those who understand binary, and those who don't."
- Somebody, not me.
|
|
|
|
|
Maybe this[^] may be of help.
|
|
|
|
|
I'm not exactly sure what you mean. Can't you just multiple or divide by 10 (or 2, depending on what you mean)?
Steve
|
|
|
|
|
Jader89 wrote: Is it easily possible to change the exponent bits of a double?
Yes you can. But before that you have to deduce the meaning of the bits of a double .
THIS (IEEE)[^] should help you a lot.
Maxwell Chen
|
|
|
|
|