|
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
|
|
|
|
|
Jader89 wrote: Is it easily possible to change the exponent bits of a double?
11 bits comprise the exponent. However, I'm not sure which of the 64 those 11 come from.
"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. I need help displaying my objects properly in DX. I have an app based on the right-hand (RH)reference frame: Z-up, Y-right, X-out of screen (towards user). I would like to come up with a single pair of Rotation and Translation transformation matrices to convert all objects to LH just before display (render), but am having a pretty hard time of it.
I found a bit on this on Microsoft's website, but some parts of it are cryptic, ( "reverse the backface-culling order" and "lay out the cube maps accordingly" ) and other I don't know how to go about ( "Flip the order of triangle vertices so that the system traverses them clockwise from the front. In other words, if the vertices are v0, v1, v2, pass them to Direct3D as v0, v2, v1" ) because I use DX's CreateSphere, CreateCube type functions to create the models.
Can someone point me to a tutorial on how to display RH-based stuff in DirectX?
Thanks in advance.
-Yegor
~NastyImp
|
|
|
|
|
Is it possible to inherit in MFC, such as in...
class CMyView : public CRecordView, public ViewInterface
and then call...
CView* view = GetActiveView();
((ViewInterface*)view)->somefunction();
Regards.
|
|
|
|
|
|