|
Sorry,
But that don't work for me do you have any more ide's?
\Larsson
|
|
|
|
|
Just one: read the VC documentation on using include files.
... you keep forgetting that sheep shagging is not a crime in Australia ...Paul Watson, The Lounge
|
|
|
|
|
Well,
I have done that butt I don't get what's wrong.
\Larsson
|
|
|
|
|
I have an app (we'll call this app "Ice") that I need to communicate with from another app (we'll call this app "Kicker") . In order to communicate between processes, I need each program's HWND.
If Ice is not already running, Kicker will run it, and can obtain the Ice HWND from the resulting ProcessInfo structure.
If Ice is already running, there are a number of ways that I can think of to obtain the running program's HWND, but these two are the ones I've settled on:.
1) Use the win api function "FindWindow()". This works fine as long as Ice hasn't loaded a file because the act of loading a file changes ICE's titlebar, and I can no longer find the window using "FindWindow()". If this attempt at finding the HWND fails, I resort to the following:
2) Use a combination of HWND_BROADCAST and WM_COPYDATA to get Ice to respond with it's HWND. This does not appear to work at all.
Ice already handles the WM_COPYDATA message. In Kicker, I'm trying to use the following code to tell Ice that Kicker is looking for it's HWND:
HWND CKickerDlg::FindThruCopyData()
{
HWND hWndIce = NULL;
m_hGlobalIceWnd = NULL;
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.cbData = 0;
cds.lpData = NULL;
WPARAM wParam = WPARAM(m_hWnd);
LPARAM lParam = LPARAM(&cds);
int nTimeout = 5000;
int nTime = 0;
int nInterval = 200;
::SendNotifyMessage(HWND_BROADCAST, WM_COPYDATA, wParam, lParam);
do
{
MSG msg;
if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
hWndIce = m_hGlobalIceWnd;
if (hWndIce == NULL)
{
Sleep(nInterval);
nTime += nInterval;
}
} while (hWndIce == NULL && nTime <= nTimeout);
return hWndIce;
}
I've also tried PostMessage with no luck. SendMessage is not really viable because it sits and waits for a response from the hwnd the message was sent to, and I just want to sit and spin while waiting for Ice torespond.
The problem is that Ice never seems to get the WM_COPYDATA message that I broadcasted.
Can anyone shed some light on this?
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
John Simmons / outlaw programmer wrote:
Can anyone shed some light on this?
Have you tried BroadcastSystemMessage() ? From the MSDN docs: The BroadcastSystemMessage function sends a message to the specified recipients. The recipients can be applications, installable drivers, network drivers, system-level device drivers, or any combination of these system components.
Available in Win95 and later.
--
"And God said, Let us make man in our image"
|
|
|
|
|
That made explorer crash.
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
Why dont you use SendMessageTimeout() if SendMessage() is not an option because it blocks?
... you keep forgetting that sheep shagging is not a crime in Australia ...Paul Watson, The Lounge
|
|
|
|
|
Probably because it tried to interpret the WM_COPYDATA message. I didn't foresee that one.
Schlaubi, in the thread below, has probably the best solution.
--
"And God said, Let us make man in our image"
|
|
|
|
|
John Simmons / outlaw programmer wrote:
) Use the win api function "FindWindow()". This works fine as long as Ice hasn't loaded a file because the act of loading a file changes ICE's titlebar, and I can no longer find the window using "FindWindow()
That's only partly true. Assign an unique class name to your window and provide it in your call to FindWindow. Then it doesn't matter what the title contains.
|
|
|
|
|
Wow - that solved every problem I was having.
Thanks mucho amigo.
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
If you are solely attempting to communicate, let me offer another way. It's kinda hacky, but it works quite well.
Create custom messages using RegisterWindowMessage. These messages should be unique.
UINT MY_READY_MSG = ::RegisterWindowMessage(_T("MY_READY_MSG--{EECA87052-A43D-4c82-835D-12776024CB70}"));
Create this id in both apps, and use
::PostMessage( HWND_BROADCAST, MY_READY_MSG, 0, 0 );
If you need to send arguments, use atoms...
just a thought....
|
|
|
|
|
Joseph M. Newcomer describes an excellent technique for finding an other app in his article at http://www.codeproject.com/cpp/avoidmultinstance.asp[^]. It involves using the EnumWindows() function and sending a registered windows message using SendMessageTimeout() function. Because registered messages are unique to the system, only the app you are looking for will respond.
CPUA 0x5041
Sonork 100.11743 Chicken Little
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
Within you lies the power for good - Use it!
|
|
|
|
|
I see how to store retrieve strings and dwords to the registry. A sample snippet on how to use REG_BINARY and REG_NONE in RegSetValueEx would be great. What qualifies as binary data?
Can you store a structure as a whole in the registry or do you store each member individually? What about an array?
Appreciate your help,
ns
|
|
|
|
|
For specifics of implementation look for CRegKey::QueryBinaryValue in ATL source. As for usage anything that could be converted to BYTE* (and that pretty much anything - arrays, struct etc) could be stored in registry as binary. First problem is memory alignment. Lets say one program with memory alignment of 8 stores some data stricture in the registry, and the second program with memory alignment of 1 retrieves this data, it might prove problematic for complex structures. By member storage could be safer. It is your decision to do or not do it. Second problem is that registry storage is relatively limited and it does affect system performance. So, if you have more than several K of data you might be better of with normal files.
|
|
|
|
|
hello,
i want to fill an EditBox of one Window with a value that i have .
i was can to have the handel with the tools "spy++" ,and i use "SetDlgItemText"
but that don't work ,can one person help me to resolve this problem?
|
|
|
|
|
I think a handle is changing with every creation of a window, thus your handle once retrieved by Spy won't be valid when the corresponding window has been closed and recreated. Beside that, a call to SetWindowText works also for EditBoxes and doesn't require any item id.
|
|
|
|
|
There are two ways I know to get handle of another window
1-EnumWindows() with a callback function. Then using EnumChildWindows() to search for the target child edit box.
2-WindowFromPoint() to get the handle of the window under the mouse cursor. ChildWindowFromPoint() to get the handle of controls
The EnumWindows() enumerate all top-level windows and pass their handle to the callback function so you can decide whether it's the needed window or not.
The MSDN would provide good information about them
EnumWindows()
EnumChildWindows()
WindowFromPoint()
ChildWindowFromPoint()
|
|
|
|
|
I want to save a BOOL to the registry. SInce I dont know how thats done or even if it can be done, I thought I'd save it as an int, either 0 or 1. SO when I retrieve it from the registry in an int vraible, how do translate it back into a BOOL? My clumsy guess is:
if (varFromRegistry == 1)myBOOL = TRUE; but is it legal to say:
BOOL myBool = (BOOL)varFromRegistry;
Of course if we can directly write a BOOL and read it out as such from the registry that would be better but how to do that?
Appreciate your help,
ns
|
|
|
|
|
Technically, there is nothing wrong with ether approach, but first one is somewhat cleaner, style wise.
|
|
|
|
|
Well, the MS defined type BOOL is an int. You can treat it in every way as an int.
If you can, it is probably better to use the c++-type bool .
bool can be converted like this:
BOOL B;<br />
bool b;<br />
b = (B != FALSE);<br />
B = b;
But if you can not help it, your BOOL can be written and read like an int.
My opinions may have changed, but not the fact that I am right.
|
|
|
|
|
Hi,
I have a very strange and frustrating SDI problem.
I have created a SDI project dealing with image display. When i create a new dialog resources and try to use the class wizard (to assign variables to the controls) , a "Out of memory.Unable to complete command" error msg would occur. Worse still after this time occur, my workspace files seems to be corrupted and i am unable to open my workspace !!! and i would have to redo everything !!
I am currently using VC 6. Anyone can tell me what happen and how can i solve this problem ??
Thank you for your kind attention !!
bk
|
|
|
|
|
I'm pretty sure this has been asked before but have no idea what topic to search on. In the VC6 IDE, when you are editing a file and put your mouse over a variable, the definition of that variable is displayed in "baloon help".
e.g. for my case I had a var declared: char m_Count[70]. So putting cursor over m_Count displays the above.
However, when I redefined the variable to be 80 elements big, the baloon help still says 70 even though I did a complete rebuild. There's probably a file, I have to delete and regenerate but besides the .clw, I'm not sure I could recover gracefully if I deleted the wrong file.
|
|
|
|
|
|
That worked great !! Thanks
|
|
|
|
|
Can anybody please tell me what message is sent from a toolbar control to the main window when a button is clicked on a toolbar?
Thanks in advance,
Paddy
|
|
|
|