|
What means "Make a combination"? If you want to handle Alt+F12 in the program, use WM_SYSKEYDOWN message handler. If you want to generate keyboard event, use keybd_event (Alt down, F12 down, F12 up, Alt up). If you want to handle Alt+F12 in keyboard hook procedure, all required information is in wParam and lParam.
|
|
|
|
|
I am trying to learn C++ and have the XP home edition on my computer. Does this mean I will not be able to create programs that have #include <iostream> in the include section of the code?
|
|
|
|
|
What have you read when you think something like that is impossible!
Well, #include is something that you write to include a file like windows.h to use functions and constants from that file... it works to use #include on any computer you want!
You are a very very very very very... beginner on C++, aren't you!?
------------------------------
©0d3 ©®4©k3® - That's me!
------------------------------
|
|
|
|
|
Well, the reason I asked is because I know XP hasn't got DOS and the book I just got has examples of code in it that have the include <iostream> in the begining. This is something I thought meant that the program is going to be a DOS type program. If it IS a DOS type program then I wont be able to see if it works on my machine. Right? I am really new to programming in hopes of someday being able to answer questions for people. If I CAN run these examples I'll have an easier time learning I think, right?
|
|
|
|
|
Garry,
The #include command simply includes a file into the current file and has nothing to do with the operating system. Also, you should be able to run DOS-like programs in a command window in XP.
You should check your compiler's instructions for building and running console applications.
/ravi
"There is always one more bug..."
ravib@ravib.com
http://www.ravib.com
|
|
|
|
|
Thanks a lot, I appreciate your help!!
|
|
|
|
|
Also, XP has DOS, it's just hiding the ability to boot to a comand line from you. You can still get to a command prompt from programs/accesories. This is the sort of window your console programs will bring up ( and I recommend writing some straight C++ to the console before playing with any windows stuff, which you appear to be doing ).
Christian
After all, there's nothing wrong with an elite as long as I'm allowed to be part of it!! - Mike Burston Oct 23, 2001
Sonork ID 100.10002:MeanManOzI live in Bob's HungOut now
|
|
|
|
|
Some of the confusion about DOS comes from MS marketing. In theory, NT hasn't ever had DOS. It always has DOS emulation.
What has confused people is MS marketing saying that XP is the death of DOS. Meaning XP wasn't built on top of a DOS kernel like 95/98/ME. I guess they didn't want to confuse anybody by reminding them that NT/W2K/XP never had a DOS.
Tim Smith
Descartes Systems Sciences, Inc.
|
|
|
|
|
No. Why would that be the case?
|
|
|
|
|
I guess if he knew, he wouldn't be asking.
/ravi
"There is always one more bug..."
ravib@ravib.com
http://www.ravib.com
|
|
|
|
|
Well, I've never worked with XP so I thought maybe he had some inside scoop we've all missed somehow . Just giving him the benefit of the doubt and hoping he would explain how he came to such a doubt.
Regards,
Alvaro
|
|
|
|
|
Hello,
I was just wondering whether I should order Visual Studio.NET Beta 2 or Release Candidate. Is Beta 2 better than Release Candidate, or is it buggy since it is a beta?
Do any of them have any time periods like 30 days or so?
Thanks,
vinuk.
|
|
|
|
|
The RC is time and feature limited. I'd expect they would take steps to make sure the betas are useful enough to try and not finished enough to be viable once the proper release arrives.
Christian
After all, there's nothing wrong with an elite as long as I'm allowed to be part of it!! - Mike Burston Oct 23, 2001
Sonork ID 100.10002:MeanManOzI live in Bob's HungOut now
|
|
|
|
|
I have used this code to create a CStringList linked list, once a pointer to a string in the list is found, it is changed into 4- 8bit characters, then back again... however this results in a lack of accuracy. Please help (if u run the code as it is ur likelly to get a first chance exception).
POSITION pos,poss;
char letter;
UINT a,b,c,d;
UINT p;
CStringList strl; /// create CStringlist
strl.AddTail("Line One"); /// Add a few lines
strl.AddTail("Beer Number 2 please");
pos=strl.GetHeadPosition(); /// get pointer to head position of list
p=(UINT)pos;
printf ("%s\n",strl.GetAt(pos)); /// get pointer to position of line one
/// get position pointer as a UINT
printf("p= %d\n",p); /// output position as UINT
a=p>>24; // get last 8 bits
printf("a=%d",a);
letter=(static_cast<unsigned int>(a)); /// convert to 8bit char
a=(static_cast<char>(letter)); /// convert back to UINT
printf(" %d\n",a);
a=a<<24;
b=p<<8;
b=b>>24; // get 2nd to last set of 8 bits
printf("b=%d",b);
letter=(static_cast<unsigned int>(b)); /// convert to 8bit char
b=(static_cast<char>(letter)); /// convert back to UINT
printf(" %d\n",b);
b=b<<16;
c=p<<16;
c=c>>24; // get 3rd to last set of 8 bits
printf("c=%d",c);
letter=(static_cast<unsigned int>(c)); /// convert to 8bit char
c=(static_cast<char>(letter)); /// convert back to UINT
printf(" %d\n",c);
c=c<<8;
d=p<<24;
d=p>>24; // get first set of 8 bits
printf("d=%d ",d);
letter=(static_cast<unsigned int>(d)); /// convert to 8bit char
d=(static_cast<char>(letter)); /// convert back to UINT
printf("%d\n",d);
p=(UINT)a|b|c|d; // use or to add the sets of 8 bits together
printf("p with or =%d\n",p); // display p using or (these values should be the same as
printf("p with + =%d\n",a+b+c+d); // display p using + the intitial p)
poss=(POSITION)p;
getch();
printf ("%s",strl.GetAt(poss));
getch();
}
|
|
|
|
|
I still don't get what you're trying to do. Your casts are wrong, and you're assuming a POSITION is a pointer to one of the list elements. Don't make any assumptions about opaque data types like that (or HWNDs or any handles for that matter).
Oh wait, you just want to pick out the individual bytes of the pointer address? Use the bitwise operators, that's what they're there for:
BYTE a,b,c,d;
void* p = 0x1234abcd;
a = ( p & 0xFF000000 ) >> 24;
b = ( p & 0xFF0000 ) >> 16;
c = ( p & 0xFF00 ) >> 8;
d = ( p & 0xFF ); And just FYI, if you want the value of a pointer, just do this:
printf ( "%p", p );
--Mike--
My really out-of-date homepage
Buffy's on. Gotta go, bye!
Sonork - 100.10414 AcidHelm
Big fan of Alyson Hannigan.
|
|
|
|
|
thanks thats very helpfull Happy New Year
|
|
|
|
|
You have GOT to learn how to use the debugger.
Here is the output I got prior to the crash:
Line One
p= 3089908
a=0 0
b=47 47
c=37 37
d=0 0
p with or =3089664
p with + =3089664
Press any key to continue
Now, the first thing you should have done it verify that the values of a, b, c, and d are as expected. It turns out that the hexadecimal value of p is 0x2f25f4. Now, how can d be 0 when the low byte of p is f4?
d=p<<24;
d=p>>24;
printf("d=%d ",d);
letter=(static_cast(d)); d=(static_cast(letter));
If you look at that code, there are only two lines of code prior to the display of the value of d. The first line "d=p<<24" although odd, just shifts the low 8 bits into the high 8 bits. The bits we are after are still there, just in a strange place. The second line "d=p>>24" shifts the high 8 bits down into the low 8 bits. Hmm, well since that will cause us to lose the bits we are interested in, then that line of code must be wrong. I would imagine that you ment to type "d=d>>24".
Once that error is fixed, it would be functional.
Lets clean up the code some.
First, I don't understand why you are so hell bent on casting to and from a charater. There really is little point.
a = p & 0xFF000000;
printf("a=%d",a >> 24);
b = p & 0x00FF0000;
printf("b=%d",b >> 16);
c = p & 0x0000FF00;
printf("c=%d",c >> 8);
d = p & 0x000000FF;
printf("d=%d",d);
That code isolates each byte of the address just fine without all that extra conversion. The right shifts just aren't needed at all.
Tim Smith
Descartes Systems Sciences, Inc.
|
|
|
|
|
No i dont really know why i was using the static cast i've now used the code u gave me and understand it fully, my problem was not knowing how to enter a hexadecimal number in C (amongst other things) and It did work when u pointed out the mistake but as ur code is so neat and tidy i will use that thankyou very much .
If u would like to know i've been writting scrabble, and using 2 CStringLIst's one for the dictionary a word list and the other a list of anagrams, i've crossed referenced the anagram list with the dictionary, so while searching through the anagrams it's quickly possible to reference back to the dictionary. I did try to use a CUIntArray list, but the problem with that was there seamed to be no operator function to copy the list from one list to another (not that i can remember why i needed to do that now)... anyhow my scrabble is now partially up and running at much faster speeds than before so thanks again!
|
|
|
|
|
I wrote:
********
bool IsThere_A_Modem()
{
RASCONN * lpRasConn;
DWORD dwSize, dwConnections, dwRet;
lpRasConn = (LPRASCONN) GlobalAlloc(GPTR, sizeof(RASCONN));
lpRasConn->dwSize = sizeof(RASCONN);
dwSize = sizeof(RASCONN);
dwRet = RasEnumConnections(lpRasConn, &dwSize, &dwConnections);
if ( dwRet )
{
printf("RasEnumConnections failed: Error = %d", dwRet);
GlobalFree(lpRasConn);
return 0;
}
GlobalFree(lpRasConn);
return 1;
}
RasEnumConnections() returns with Error 603 - Buffer is too small.
How/What buffer should i enlarge???!!!???
--BlackSmith--
"With the help of all mighty", 2001, Me.
|
|
|
|
|
Hello, the codegurus around the world.;)
I think that you asked the same question before.
I found this code for RasEnumEntries example to recreate the memeory size.
So, I'm not sure that this works?
if (dwRet == ERROR_BUFFER_TOO_SMALL)
{
if((lpRasEntry = (LPTASENTRYNAME)realloc(lpRasEntry, (UINT)dwBuf))
!= NULL)
dwRet = RasEnumEntries(NULL, NULL, lpRasEntry, &dwBuf, &dwEntry);
else
{
}
}
Please, don't send me your email about your questions directly.
Have a nice day!
Sonork - 100.10571:vcdeveloper
-Masaaki Onishi-
|
|
|
|
|
1). GlobalAlloc returns a HGLOBAL of which GlobalLock must be called to return a valid pointer.
2). If RasEnumConnections is trying to return two or more connections then your buffer isn't big enough. Try allocating a large number of RASCONN's and pass that in.
Joel Lucsy (jjlucsy@concentric.net)
|
|
|
|
|
This code checks if you are connected to internet, guess that is what you want (paste it into a file and include the file in the file that you call IsRasConnected()):
// It return TRUE if yes or FALSE is not
//// RAS Connect status function
////
//// Written by Gilad Novik
//// For any questions or comments, gilad@bmidas.com
#ifndef _RASSTATUS
#define _RASSTATUS
#include <ras.h>
// We need to declare the functions type
typedef DWORD (WINAPI *RasEnumConnectionsType)(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections);
typedef DWORD (WINAPI *RasGetConnectStatusType)(HRASCONN hrasconn,LPRASCONNSTATUS lprasconnstatus);
#ifdef _UNICODE
#define RasFileName L"RASAPI32.DLL"
#define RasEnumConnectionsName L"RasEnumConnectionsW"
#define RasGetConnectStatusName L"RasGetConnectStatusW"
#else
#define RasFileName "RASAPI32.DLL"
#define RasEnumConnectionsName "RasEnumConnectionsA"
#define RasGetConnectStatusName "RasGetConnectStatusA"
#endif
BOOL IsRasConnected()
{
HINSTANCE hLib = LoadLibrary(RasFileName); // Try to load the library
if (hLib == NULL)
return FALSE; // Return FALSE if we can't find it
// Get functions address
RasEnumConnectionsType _RasEnumConnections = (RasEnumConnectionsType)GetProcAddress(hLib,RasEnumConnectionsName);
RasGetConnectStatusType _RasGetConnectStatus = (RasGetConnectStatusType)GetProcAddress(hLib,RasGetConnectStatusName);
BOOL bResult = FALSE;
if (_RasEnumConnections && _RasGetConnectStatus) // Check if it is valid pointer
{
RASCONN RasConn;
RASCONNSTATUS RasConnStatus;
RasConnStatus.dwSize = sizeof(RASCONNSTATUS); // We need to set the size of the structure
DWORD dwConnSize = sizeof(RASCONN);
DWORD dwRasCount = 1; // We only retrieve one connection
RasConn.dwSize = dwConnSize; // We need to set the size of the structure
bResult = // Let's check it out !!!
(((*_RasEnumConnections)(&RasConn,&dwConnSize,&dwRasCount)) == 0)
&& (((*_RasGetConnectStatus)(RasConn.hrasconn,&RasConnStatus)) == 0)
&& (RasConnStatus.rasconnstate == RASCS_Connected);
}
FreeLibrary(hLib); // Don't forget to unload the library from memory
return bResult;
}
#endif // _RASSTATUS
------------------------------
©0d3 ©®4©k3® - That's me!
------------------------------
|
|
|
|
|
I'm having some trouble opening a file in my application. For some reason, it's throwing a debug assertion when I select File->Open from the menu. The dialog doesn't even come up. When I track it down, it looks like it is being passed some junk data that is longer than the maximum allowable length of a file name. I'm not sure how this is happening since I have not touched the code. If I save a file first and then, immediately choose File->Open from the menu, it works fine and I can open a file; but, if I do anything between saving and opening or if I just open straight away when the application starts, I get the assertion.
Any thoughts?
|
|
|
|
|
I'm assuming that this is an MDI or SDI app. How do you handle the initial File New operation when the app starts up? Just guessing that you might be doing something in OnFileNew() that causes File->Open to fail. But if you do File->Save before the File->Open, the OnFileSave() cleans up what you may have done.
|
|
|
|
|
It is an MDI application but I am just using the code provided by the app wizard for the handling of the Save and Open file messages. I'm not sure what I'm doing that would pass in incorrect information. I guess I'll just try to track down where the bad data is getting passed from. I just thought that someone might have been having the same problem as I am and might know the answer. Thanks for the help.
|
|
|
|
|