|
Good Morning.
Please I have a small problem about shell in Win32 using vc++.
I want to developpe small program to create an empty directory with a shortcut F9 using Hook.
As we know windows uses WM_COMMAN message to it but WPARAM magic number change since windows NT we normally use it like this "SendMessage(hwnd,WM_COMMAND,0x00000000,0)" where 0x000000 is our magic number.I'm not able to find it in spy++.Please can you help me.
Thank you.
|
|
|
|
|
aurelcly wrote: WPARAM magic number change since windows NT
Sorry but what do you mean by magic number? The WPARAM to the WM_COMMAND message is the value associated with the command that has been invoked, e.g. a button, toolbar or menu item.
|
|
|
|
|
Hi All
i am useing Recordset for GetItem() from Mysql table.
CString strContent = (char *) (_bstr_t) pRecordset->Fields->GetItem((_bstr_t)tablecontent)->Value;
How to get proper values when table have this type value "111.0921221" .
Right now i am getting this values strContent=111.1.
How can i show strContent=111.0921221.
Plz help me
|
|
|
|
|
I have to open a registry key whose length is more than 255 charecter length. I have called RegOpenKeyEx() function to open the key. But it failed. i came to know that i can call this function recussively to open such keys of long path.But the 1st call only succeed.
code piece:
DWORD status = RegOpenKeyEx(
HKEY_CURRENT_USER ,
L"SOFTWARE\xyz\Connections\<guid>\properties\",
0,
KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,
&hKey
);
in next call
DWORD status = RegOpenKeyEx(
hKey ,
L"Fallback\server\item",
0,
KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,
subkeyhKey
);
the 2nd call failed. giving error no 6. the actuall key is SOFTWARE\xyz\Connections\<GUID>\properties\Fallback\server\item
can you help me out to fix this....
thanks in advance....
Birajendu
SonicWALL
Bangalore
India
|
|
|
|
|
birajendu wrote: i came to know that i can call this function recussively
Do you mean iteratively?
birajendu wrote: DWORD status = RegOpenKeyEx(
hKey ,
L"Fallback\server\item",
0,
KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,
subkeyhKey
);
shouldn't be
DWORD status = RegOpenKeyEx(
hKey ,
L"Fallback\server\item",
0,
KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,
&subkeyhKey
);
?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: DWORD status = RegOpenKeyEx(hKey ,L"Fallback\server\item",0,KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,&subkeyhKey);
Sorry it was a typo... I am using like this only.
status = RegOpenKeyEx(hKey ,
L"Fallback\server\item",
0,
KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,
&subkeyhKey);
Still the same error...
Birajendu
SonicWALL
Bangalore
India
|
|
|
|
|
Since error code 6 is 'invalid handle ', what is the value of the status variable immediately after the first previous call?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Value of Status variable is only 6, error i got from Getlasterror() is 0.
Birajendu
SonicWALL
Bangalore
India
|
|
|
|
|
Immediately after the first RegOpenKeyEx call is 6 ?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
After 2nd call of RegOpenKeyEx().
Birajendu
SonicWALL
Bangalore
India
|
|
|
|
|
birajendu wrote: L"SOFTWARE\xyz\Connections\\properties\"
You have a field <GUID> missing here according to your later description of the key content.
|
|
|
|
|
It appears no one has mentioned it yet, but you need to use double backslashes. Instead of
L"SOFTWARE\xyz\Connections\\properties\" you should use
L"SOFTWARE\\xyz\\Connections\\properties\\"
Hope that helps.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
Hallo, i have SDI Application i need to get a blinking cursor when i click
the Left mouse button(i have the fucntion OnLButtonUp(UINT nFlags,CPoint point) already, also i have the position where the mouse click happend, my View class is derived from CView Class.
but i do not know how to darw the cursor that blinks),Please help.
|
|
|
|
|
Why don't you make your view inherit from CEditView ? I remember that last week you asked a similar question and people asked you why you didn't to use a CEditView but you didn't reply. So, why do you want to complicate your life instead of using something that has support for everything you are trying to do ?
|
|
|
|
|
Sorry for not replaying was sick. I can not use CEditView, CRichEditView, because this is the requirments of my Boss, i would like too but it will make complicates somewhere else.
|
|
|
|
|
I gave you an answer that didn't require CEditView *or* CRecordView.
Is your boss a sadist? Either he's just being unreasonable, or there's a reason behind his restriction. If you tell us what that is, maybe we can help more?
At the moment, we give you good solutions. You say "my boss won;t let me do that". On the impression you've given me, he won'll allow you to use the keyboard soon.
Iain.
I have now moved to Sweden for love (awwww).
If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), or need cotract work done, give me a job! http://cv.imcsoft.co.uk/[ ^]
|
|
|
|
|
The reason that in the Output view will be alot of output lines over 40000 lines and the a view derived from CEditView or CRichEditView will not give it on the screen like it should without using a very complicated code, so i am must use a view derived from CView. I used CreateCaret and ShowCaret() but they did not solve the problem.
|
|
|
|
|
I'm trying to write the contents of a struct to a file in binary mode, and I'm not quite getting the output I'm expecting.
the struct looks more or less like this;
struct myStruct
{
char c[2];
unsigned int i1;
unsigned short s1;
unsigned short s2;
unsigned int i2;
};
Then I'm filling the struct with the following data...
myStruct temp = {{'A', 'B'}, 0x46, 0x0, 0x0, 0x36};
Finally, I write it to a file...
std::string path = "C:/";
std::ofstream file(path.c_str(), std::ios::out | std::ios::binary);
if(!file)
{
std::cout << "Unable to open file \"" << path << "\" for writing.\n";
return false;
}
file.write(reinterpret_cast<char *>(&temp), sizeof(myStruct));
The file writes successfully but I don't get the output I'm expecting (in hex: 4142 4600 0000 0000 0000 0000 0000 3600 0000 ). Instead I am getting 4100 4200 4600 0000 0000 0000 3600 0000 2800 (hex)
Now, I have a feeling this is something to do with the byte alignment of the struct, so I tried changing the struct's declaration to
#pragma pack(push) /* push current alignment to stack */
#pragma pack(1) /* set alignment to 1 byte boundary */
struct myStruct
{
char c[2];
unsigned int i1;
unsigned short s1;
unsigned short s2;
unsigned int i2;
};
#pragma pack(pop) /* restore original alignment from stack */
but that didn't work.
I also tried this:
__declspec(align(1)) struct myStruct
{
char c[2];
unsigned int i1;
unsigned short s1;
unsigned short s2;
unsigned int i2;
};
but that didn't have any effect either. What is going on here and how can I fix it?
modified on Monday, September 7, 2009 9:54 AM
|
|
|
|
|
The following code (i.e. your first proposal), gives the expected output on my system
#include <iostream>
#include <fstream>
#pragma pack(push) /* push current alignment to stack */
#pragma pack(1) /* set alignment to 1 byte boundary */
struct myStruct
{
char c[2];
unsigned int i1;
unsigned short s1;
unsigned short s2;
unsigned int i2;
};
#pragma pack(pop)
void main()
{
myStruct temp = {{'A', 'B'}, 0x46, 0x0, 0x0, 0x36};
std::string path = "foo.bin";
std::ofstream file(path.c_str(), std::ios::out | std::ios::binary);
if(!file)
{
std::cout << "Unable to open file \"" << path.c_str() << "\" for writing.\n";
return;
}
file.write(reinterpret_cast<const char *>(&temp), sizeof(temp));
}
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
First you create a myStruct struct called temp:
Sauce! wrote: temp = {{'A', 'B'}, 0x46, 0x0, 0x0, 0x36};
Then you write to your file from header using sizeof(headerBMP)
Sauce! wrote: file.write(reinterpret_cast<const char="" *="">(&header), sizeof(headerBMP));
This is not consistent. Where is header and what is its structure and size, and what is the size of headerBMP?
Also the characters 'A' and 'B' would appear to be Unicode hence being written as 4100 and 4200.
|
|
|
|
|
ah, you caught me!
Must have missed that bit when I was simplifying the code to make it easier on you guys. You can ignore that. The correct line should read...
file.write(reinterpret_cast(&temp), sizeof(myStruct));
with regards to 'A' and 'B', how can I make them strictly ascii? Turns out I was compiling a unicode project, but changing it to mbcs doesn't change anything.
I'm running win7 64 bit if that changes anything.
modified on Monday, September 7, 2009 10:01 AM
|
|
|
|
|
I have also run it on my (Windows 7, 32 bit) system and results are as expected. The default value for char is ASCII on this system so maybe there is something in your project settings that is forcing it to Unicode.
|
|
|
|
|
Hi,
if you can modify the struct any way you want, I suggest you reorder its content from largest to smallest item, that way no padding will be applied, hence no padding instructions will be necessary.
Like so:
unsigned int i1;
unsigned int i2;
unsigned short s1;
unsigned short s2;
char c[2];
If that is not possible, you must make sure all parties involved use the same padding rules.
modified on Monday, September 7, 2009 12:10 PM
|
|
|
|
|
Unfortunately I can't change the order of the struct's members because I'm trying to write the header for a bmp file. Is there anything else I can do?
edit: packing works fine now :S strange.
modified on Monday, September 7, 2009 12:10 PM
|
|
|
|
|
sure, one of three things:
1. explain to the compiler exactly what it is you need, using switches and/or pragma directives, as others already told you
2. write(or read) your struct with explicit code, one statement for each field, using the method/function that fits the type of the field
3. don't use a struct at all; use a byte array, and write into/read from it using methods that deal with individual bytes and perform the necessary conversion from/to multi-byte data types, such as
int x=(((array[y+3]<<8)|array[y+2])<<8)|array[y+1])<<8)|array[y+0];
BTW: if you don't like/trust such code, you can also use a local union of a small byte array and the type of interest.
|
|
|
|
|