|
Hi,
I'm new to windows programming, and am having problems logging to the application log. In fact I can't seem to create/open a key. I picked up some example code from MSDN and tried to use it, always returns error code 87 - ERROR_INVALID_PARAMETER. I've looked at and tried other examples from the web, with the same results. The call below is the first call in main(), my app's name is vsreq2:
wsprintf(szBuf, (LPCWSTR)"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\vsreq2");
status = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
szBuf,
0, NULL, REG_OPTION_NON_VOLATILE,
KEY_WRITE, &secAttr, &hk, &dwDisp);
if (status)
{
printf("Could not create the registry key. Error Code = 0x%x", status);
return FALSE;
}
Thanks for any help!
|
|
|
|
|
win_newbie wrote:
wsprintf(szBuf, (LPCWSTR)"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\vsreq2");
The first thing that jumps out at me is the cast of an 8-bit string to a 16-bit string.
Drop the cast, and wrap your string literals in the _T("") t-char macro.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" - mYkel - 21 Jun '04
"There's not enough blatant self-congratulatory backslapping in the world today..." - HumblePie - 21 Jun '05
Within you lies the power for good - Use it!
|
|
|
|
|
Hey thanks, I'm with mYkel.
This has gotten me to my next problem, where the description field of the event
indicates "The description for Event ID [101] cannot be found....". The message
does have my app's name as the source and the correct category/event id numbers.
I have the msgs.dll file in the same directory as my app and made these API calls:
Is the placement of the text string after (LPBYTE) ok?
thanks again
// Set the name of the message file.
if (RegSetValueEx(hk, // subkey handle
(LPCWSTR)"EventMessageFile", // value name
0, // must be zero
REG_EXPAND_SZ, // value type
(LPBYTE)"msgs.dll", // pointer to value data
(DWORD) lstrlen(_T("msgs.dll"))+1)) // length of value data
{
printf("Could not set the event message file.");
RegCloseKey(hk);
return FALSE;
}
// Set the supported event types.
dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE |
EVENTLOG_INFORMATION_TYPE;
if (RegSetValueEx(hk, // subkey handle
(LPCWSTR)"TypesSupported", // value name
0, // must be zero
REG_DWORD, // value type
(LPBYTE) &dwData, // pointer to value data
sizeof(DWORD))) // length of value data
{
printf("Could not set the supported types.");
RegCloseKey(hk);
return FALSE;
}
// Set the category message file and number of categories.
if (RegSetValueEx(hk, // subkey handle
(LPCWSTR)"CategoryMessageFile", // value name
0, // must be zero
REG_EXPAND_SZ, // value type
(LPBYTE)"msgs.dll", // pointer to value data
(DWORD) lstrlen(_T("msgs.dll"))+1)) // length of value data
{
printf("Could not set the category message file.");
RegCloseKey(hk);
return FALSE;
}
if (RegSetValueEx(hk, // subkey handle
(LPCWSTR)"CategoryCount", // value name
0, // must be zero
REG_DWORD, // value type
(LPBYTE) &dwNum, // pointer to value data
sizeof(DWORD))) // length of value data
{
printf("Could not set the category count.");
RegCloseKey(hk);
return FALSE;
}
|
|
|
|
|
Same problem as before, this time with the value names.
I think you should read some of the articles here on CP about string handling. I strongly recommend http://www.codeproject.com/string/cppstringguide1.asp[^].
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" - mYkel - 21 Jun '04
"There's not enough blatant self-congratulatory backslapping in the world today..." - HumblePie - 21 Jun '05
Within you lies the power for good - Use it!
|
|
|
|
|
Anyone know why when i place a carriage return line feed in a string to be displayed in a control, that the \r\n don't get recognized?
I do something like lpzText = "CODE1 NORMAL\r\n""CODE2 HIGH\r\n"
But when i display this in an edit control or even a tooltip, the \r\n is not recognized and there for i do not get the desired line feed.
|
|
|
|
|
did you set your edit box to multiline ??
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
How is that done... Is that done from the control variable ?
|
|
|
|
|
|
in design mode, click on the edit control to have its properties, and searche for one called something like "multiline"...
to accept more than one line, your edit control must have that property engaged...
see here and here[^]
TOXCCT >>> GEII power [toxcct][VisualCalc]
-- modified at 11:40 Wednesday 31st August, 2005
|
|
|
|
|
I think it is possible they only want the \n to be in there.
Also, if you are trying to create a single string, I am not sure why you have two strings there?
Try this instead:
lpzText = "CODE1 NORMAL\nCODE2 HIGH\n";
and see if your results are better.
|
|
|
|
|
It still does not recognize
lpzText = "CODE1 NORMAL\nCODE2 HIGH\n";
I get a square box in place of the \n. I am also using this string in a tool tip and get the same result.
|
|
|
|
|
Help!!!
What should i do.
|
|
|
|
|
Edit controls have to be multiline, created with the ES_MULTILINE style, and newlines are the "\r\n".
Tooltips are by default single line only. You have to use a custom tooltip control for multiline tooltips. Do a search on CP for some excellent multiline tooltip controls.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" - mYkel - 21 Jun '04
"There's not enough blatant self-congratulatory backslapping in the world today..." - HumblePie - 21 Jun '05
Within you lies the power for good - Use it!
|
|
|
|
|
nop, it couldn't.
from the MSDN[^], "Text lines in a multiline control are separated by '\r\n' character sequences."
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
Hi,
After starting some certain applications with ShellExecuteEx() function and getting their process handles in return, on some other event I want to get the CWnd handle to those windows and bring them to the front and resize, for which I use SetWindowPos.
How I try to get the mentioned CWnd handle:
- After starting the application, I get the process ID with
OpenedThreadPID = GetProcessId(ProcessHandle);
- Then I call EnumWindows function
- and then in the callback function I check the called window's process ID with
GetWindowThreadProcessId(pWnd->m_hWnd,&FoundThreadPID);<br />
if(FoundThreadPID == OpenedThreadPID)<br />
SearchedCwnd = pWnd;
- Then I use
SetWindowPos(&SearchedCwnd->wndTopMost,StartX,StartY,Width,Height,<br />
SWP_NOREPOSITION|SWP_NOSENDCHANGING|SWP_NOZORDER|SWP_SHOWWINDOW<br />
);
The callback function is not called. What am I doing wrong? BTW, can I also reach the windows minimized to tray?
Any help appreciated. Thanks in advance
Caykahve
|
|
|
|
|
EnumWindows returns the raw HWND of the windows, not the CWnd of the windows. You should try to use raw Win32 API calls from within the EnumWindows callback instead of the MFC CWnd classes or CWnd pointers to windows. Then it will work fine.
|
|
|
|
|
Actually I do it as told in Joseph Newcomer's article (http://www.codeproject.com/cpp/callbacks.asp?msg=27622)
And the CWnd is retrieved by CWnd::FromHandle(). Why is that a problem?
|
|
|
|
|
Not necessarily a problem, it could use up memory a lot depending upon what you do in the enumeration, since each CWnd created this way is a temporary added to a map. I just try to avoid doing anything MFC related in a callback like that.
I am not sure what Joseph did. Threre might be a separate problem in your code.
BTW: I tried to e-mail you a sample, but your GMail address might be bad.
|
|
|
|
|
I created a MDI application and changed the title of the child window using the CChildFrame::OnUpdateFrameTitle(BOOL bAddToTitle) function.
When i call this function to add some text to the title, it fails when the child window is maximized. To be more precise, i call GetActiveView to get some info from the view when updating the frame title and it returns NULL if the child window is maximized. Can somebody explain to me what happens if the child frame is maximized, so i can solve this small error?
I have another question about updating the frame title. When opening/creating a document, the title is added to the window menu. I want to have a somewhat different text displayed here then the title of the document. How can i adjust that?
Greetings and thanks, Joris
|
|
|
|
|
I'm developing an image processing sdk ..I thought of using vc++..could u suggest where & how to start?what functions to learn about and what tutorials to refer to??
|
|
|
|
|
|
|
Hello
Are you planning to use C++ or managed C++ ?
If you want to use C++, you can look at existing libraries:
Intel's OpenCV[^],
CxImage (here on CP)[^],
PaintLib[^],
Image Analysis Explorer Pro[^], etc.
If you are thinking about using GDI+ (managed or unmanaged c++), then you can read a set of Christian Graus articles here on CP. Or mine "Image Processing Lab". These articles are using C#, but the idea can be used in C++ easily.
With best regards,
Andrew
|
|
|
|
|
"Programming Windows Fifth Edition" by Charles Petzold
Plus articles at CP and game programming sights.
To make it usable to the most amount of peaple, then write it in C.
What ever you chose, write as much of it as possible in standard C/C++. In other words; if it does not involve the interface (viewing), then make it as system independent as possible.
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
Hello, I have written the below code to simulate a person "typing" into a text box:
for(int i=0;i < str.GetLength();i++)
{
SetDlgItemText(MYEDIT,str.Left(i));
Sleep(100);
}
While this works with a CStatic control, a CEdit control will simply display the entire text(str) after sleeping 100 * GetLength. Why is this? More important, how can I get CEdit to achieve the same effect? Thanks.
|
|
|
|