|
Hi
I'm trying to get some information about the windows that working in the background.
I'm using the GetWindowRect function and it's never show me information.
here is the relevant part of my code:
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam) {<br />
<br />
LPRECT lprect=NULL;<br />
cout << "hwnd_Child = " << hwnd << endl;<br />
SetWindowText(hwnd,NULL);<br />
if(GetWindowRect(hwnd,lprect))<br />
cout<< lprect->bottom<< endl;<br />
<br />
<br />
<br />
<br />
return TRUE;
}
it does change the window's text but doesn't go into the if. any idea why?
by the way how can i find the buttons inside the window?
thanks
Itay
|
|
|
|
|
Using this code : LPRECT lprect=NULL; You are sending a NULL pointer so that will cause GetWindowRect() to fail. Try the following instead:
RECT cRect;
if(GetWindowRect(hwnd, &cRect))
...
and on return cRect should contain the cx and cy values
|
|
|
|
|
Richard MacCutchan wrote:
RECT cRect;
if(GetWindowRect(hwnd, &cRect))
...
thanks. now it is working.
|
|
|
|
|
You can't get the rectangle of windows which do not belong to your own process. However, GetWindowText and SetWindowText do work between different processes. (in case you are enumerating windows of other processes also)
Additionally to what Richard MacCutchan said.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Sometimes you just have to hate coding to do it well. <
modified on Tuesday, November 17, 2009 9:34 AM
|
|
|
|
|
Code-o-mat wrote: You can't get the rectangle of windows which do not belong to your own process.
Strange, this restriction is not noted in the MSDN documentation, but it is noted in the doc for Get/SetWindowText() !
|
|
|
|
|
I might be wrong but i think i once wanted to get the rectangle of such windows too and i couldn't get it to work so i googled around and found out that the reason was indeed that GetWindowRect can't cross processes.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Sometimes you just have to hate coding to do it well. <
|
|
|
|
|
itay10 wrote: LPRECT lprect=NULL;
itay10 wrote: if(GetWindowRect(hwnd,lprect))
You cannot do this.
The pointer must hold the address of a valid struct.
change to:
RECT rect;
if(GetWindowRect(hwnd ,&rect))
BTW: why aren't you calling GetLastError ?
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]
|
|
|
|
|
thanks all it worked!
CPallini wrote: BTW: why aren't you calling GetLastError?
I don't know, never tried. how can it help?
|
|
|
|
|
itay10 wrote: how can it help?
Seriously? Did you read the docs to see what it does? Since the condition in the if test evaluated to false , that would indicate that GetWindowRect() returned zero.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
i debugged it and i knew the returned value was zero, the question was why?
|
|
|
|
|
Calling GetLastError() would have likely told you why.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
itay10 wrote: CPallini wrote:
BTW: why aren't you calling GetLastError?
I don't know, never tried. how can it help?
Oh, don't worry about, it's a decorative function...
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: BTW: why aren't you calling GetLastError?
Real men don't need GetLastError() ; what do you think CodeProject is for?
|
|
|
|
|
Richard MacCutchan wrote: Real men don't need GetLastError();
You're right: real women need GetHisLastError , while real men do need AdmitLastError .
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]
|
|
|
|
|
Hi, I'm aiming to do something like instance a save as dialogue box have a user add input. Retrieve the file name and create the file based on the input. This is what I have so far:
OPENFILENAME _openfile;
ZeroMemory(&_openfile, sizeof(OPENFILENAME));
_openfile.lStructSize = sizeof(OPENFILENAME);
_openfile.lCustData = (DWORD)NULL;
_openfile.hwndOwner = GetFocus();
_openfile.lpstrFile = tmp;
_openfile.lpstrInitialDir = strcat(buffer, "\\Desktop\\");
_openfile.lpstrDefExt = ".xml";
_openfile.lpstrFilter = "Extensible Markup Language (*.xml)";
bool success = false;
success = GetSaveFileName(&_openfile);
HANDLE file = CreateFile(_openfile.lpstrFile, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL,
NULL);
What I was wondering is if anyone knew of an example of how to do this on codeproject. I can't seem to find one. Thanks for anything you can suggest. Nicola x
|
|
|
|
|
What is your trouble about?
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]
|
|
|
|
|
I cant find a full example of using GetSaveFileName, and how I can then get the file name from that (which I assumed was supposed to be passed by reference back to me?)
Have you come across an article that might help? Effectively, All i want to achieve is
Click Save as button -> GetSaveFileName()
CreateFile(filename);
but I don't know how to get the file name from the dialogue.
|
|
|
|
|
Not sure I got you, anyway an usage example is here [^].
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]
|
|
|
|
|
OMG I dispare! The reason it wasn't working is because I'm a moron....I mean because I wasn't adding .xml to the end of the supplied file name in the gui. Doh!
|
|
|
|
|
No wait, maybe it was something else....Here is the working code for any searching people:
char buffer[256]={""};
char tmp[256]={""};
tmp[0] = '\0';
GetEnvironmentVariable("USERPROFILE", buffer, sizeof(buffer));
OPENFILENAME _openfile;
ZeroMemory(&_openfile, sizeof(OPENFILENAME));
_openfile.lStructSize = sizeof(OPENFILENAME);
_openfile.hwndOwner = GetFocus();
_openfile.lpstrFilter = "Extensible Markup Language (*.xml)";
_openfile.lpstrFile = tmp;
_openfile.nMaxFile = sizeof(tmp)/sizeof(*tmp);
_openfile.lpstrFileTitle = "Save As ...";
_openfile.lCustData = (DWORD)NULL;
_openfile.lpstrInitialDir = strcat(buffer, "\\Desktop\\"); /*virtalis_diagnostic_info.xml");*/
_openfile.lpstrDefExt = "xml";
bool success = false;
success = GetSaveFileName(&_openfile);
DWORD error = CommDlgExtendedError();
HANDLE file = CreateFile((LPTSTR)_openfile.lpstrFile,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL,
NULL);
I hope this helps some idot n00b like myself!
|
|
|
|
|
Also, thank you very much.
|
|
|
|
|
In VC++,
When the Application is installed and opened for the first time and after performing Test in the panel and report(Report tab- it has been created based upon excel tab view) is viewed and while going back to the any test panel ABC.exe – Application error is coming and application gets quited once OK is given in that error message or Dont send error message is occureed.
It has been occurred only once. Again i have uninstalled and installed the application. I have executed the same sequence, but the error has not occurred for the next time. I have installed and uninstalled the application for 10 times, but the problem occurred only one. it is not occurring every time. i have stored all reports in the file.
In Report panel, i get the last test report and will be displayed.
Please give me the solution for this problem.
|
|
|
|
|
thippipriya wrote: Please give me the solution for this problem.
What C/C++/MFC problem are you having?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
it is in MFC.
My application is causing problems now and again, but only after creating setup mode so I am having
trouble finding the cause of it.
"The instruction at "0x73dd1351" referenced at "0x00000004". The memory could not be "read".
above is message I receive when the crash happens.
Any suggestions on how I may go about finding this little blighter!
The strange thing is that I may try it 100 time and it works fine, or 9 times and get error on 10th.
There really is no pattern to it. The code is doing the same thing with the same hardcoded data
each time. Sometimes yeah but sometimes no
modified on Wednesday, November 18, 2009 1:04 AM
|
|
|
|
|
Hi all,
I have made a Regular dll using shared mfc dll in that dll i have made a generic class in that class i have made a function SayHello
in .cpp file
CString CMyClass::SayHello(CString str)
{
return (_T("Hello") + str);
}
in .h file
_declspec(dllimport) CString SayHello(CString str);
now i want to call this function in my clients application.
i have copied its .dll file and .lib file in applications debug folder.
and in properties\Linker\input\Additional Dependencies\..\Debug\MyDll.lib
now in code
HINSTANCE hDll = ::LoadLibrary(_T("MyDll.dll"));
now i want to call SayHello Function
How to do it?
Thanks in advance
To accomplish great things, we must not only act, but also dream;
not only plan, but also believe.
|
|
|
|