|
If you're in the code that scrapes text, and you know the window class, and you can check the style, why can't you just avoid the GetWindowText call, and set the text to display in your app as "<password -="" i="" aint="" showing="" you!="">", or such.
Iain.
Iain Clarke appears because CPallini still cares.
|
|
|
|
|
thanks but i do not know how to implement this if statement as during the window operation it checks combo boxes and checkboxes, and this new one will be called passwordcheck.
|
|
|
|
|
What's wrong with going through the code you showed in your first post line by line with a debugger?
It's already got If we are a combobox if, and an if we are a checkboxetc.
Just add another one in the same way for the edit class. You can even use cut and paste.
Write a small app, with an edit box with it's ES_PASSWORD style set.
If you don't know the name of that class (I'm fairly sure it's [gasp!] EDIT), then the debugger will tell you.
So.... (crudely)
If (!lstrcmp (ClassName, _T("EDIT"))
{
DWORD dwStyle = ::GetWindowLong (hWnd, GWL_STYLE);
if (dwStyle & ES_PASSWORD)
{
StringReturn = "Mind your own business";
return StringReturn;
}
}
I hope that helps more.
Iain.
Iain Clarke appears because CPallini still cares.
|
|
|
|
|
I think its cedit but ill find out.
thanks for your help
|
|
|
|
|
CEdit is the MFC Class name.
You want the Windows Class name - as used by ::RegisterWindowClass, ::CreateWindow, etc.
Anyway, by now you should have had some answers, so I hope it went well for you.
Iain.
Iain Clarke appears because CPallini still cares.
|
|
|
|
|
Can i use pocket PC to run exe file generated by C++ code written with Microsoft Visual Studio 2005 ?
How ?????
Please help me .
ahmed.rayan@hotmail.com
|
|
|
|
|
But only if it is compiled for the pocket PC. Do you have the emulator for your pocket pc installed on your machine?
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Rajesh R Subramanian wrote: But only if it is compiled for the pocket PC. Do you have the emulator for your pocket pc installed on your machine?
When installing Visual Studio 2005 Pro, there is "Microsoft Device Emulator Version 1.0" installed. See Control Panel | Add/Remove programs.
But I don't know how to launch it.
Maxwell Chen
|
|
|
|
|
Maxwell Chen wrote: But I don't know how to launch it.
Simple is to create a pocket PC smart device project and run it.
to just lanch the emulator, Visual Studio->Tools->Device Emulator Manager. Then in the available emulator box, right click one and select connect. or Visual Studio->Tools->Connect to Device.
you can use Active Sync to explore the device file system.
|
|
|
|
|
I'm developing an animated game.
For various reasons, we port the version to use DirectDraw interfaces.
I'm having a hard time to draw bitmaps with transparent white parts.
I'm doing this to every bitmap:
DDCOLORKEY ddck;
ddck.dwColorSpaceLowValue = 0x00 ;
ddck.dwColorSpaceHighValue = 0x00 ;
lpDDSSomeBitmapSurface->SetColorKey( DDCKEY_SRCBLT, &ddck );
But it doesn't make it.
Is it something to do with palettes ?
|
|
|
|
|
Hanan888 wrote: ddck.dwColorSpaceLowValue = 0x00 /* 0xff */;ddck.dwColorSpaceHighValue = 0x00 /* 0xff */;
Hanan888 wrote: But it doesn't make it.
Means, it transparent blitting is not happening? possibly you are setting the palette index as 0x00 which may not contain the white color. why don't you use 0xff only and set the color white in the palette entry at 0xff when the palette is created.
|
|
|
|
|
Hi, anyone can help me. I have xml like this :
<kdproject>999999
<nmproject>Other Project
<kdproject>901561
<nmproject>Bussan - 2891000497 - Citrix
<kdproject>901559
<nmproject>Acer - 2881001136 - LAN Switching
<kdproject>901560
<nmproject>Microsoft - 2881001136 - LAN Switching
I want to delete this nodes
<kdproject>901561
<nmproject>Bussan - 2891000497 - Citrix
<kdproject>901559
<nmproject>Acer - 2881001136 - LAN Switching
I use this code :
XmlDocument myXml = new XmlDocument();
myXml.Load(pathXML + "Project.XML");
XmlNodeList nodes = myXml.GetElementsByTagName("KdProject");
for (int i = 0; i < nodes.Count; i++)
{
DataTable dt = dsProject.Tables[0];
foreach (DataRow row in dt.Rows)
{
if (nodes[i].InnerText == Convert.ToString(row["KdProject"]))
{
XmlNode xmlnode = myXml.DocumentElement.ChildNodes.Item(i);
xmlnode.ParentNode.RemoveChild(xmlnode);
}
}
}
myXml.Save(pathXML + "Project.XML");
But I have error messages in
if (nodes[i].InnerText == Convert.ToString(row["KdProject"]))
that nodes[i].InnerText is null
Can anyone help me?
Thx
|
|
|
|
|
Try again, my dear.
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
|
|
|
|
|
Hi Experts,
I have tried to implement WM_ENDSESSION in my CMainFrame class.
But I could not track it niether system logoff or system shutdown.
Please let me know how to implement and track this?
|
|
|
|
|
I find WM_ENDSESSION message's [^] wParam and lParam are quite informative about. Don't you?
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
|
|
|
|
|
I added WM_ENDSESSION handler to CMainFrame class of SDI application:
void CMainFrame::OnEndSession(BOOL bEnding)
{
CFrameWnd::OnEndSession(bEnding);
if(bEnding)
AfxMessageBox(_T("System is getting shutdown"));
else
AfxMessageBox(_T("System is getting log off"));
}
I am getting AfxMessageBox(_T("System is getting shutdown")) on system log off but not getiing any message at system shutdown.
When I click on shutdown button I am not getting any message. How could I get it?
|
|
|
|
|
Use the WM_QUERYENDSESSION message instead.
Best Wishes,
-David Delaune
|
|
|
|
|
Hello everyone,
Two questions about message pump in COM STA.
1. The term "message pump", means message queue? Pushing message into the message queue? Or retrieve message from the message queue?
2. What is the impact if the message pump is not alive in STA? It will block method invocation from other apartment?
thanks in advance,
George
|
|
|
|
|
I've never know message pump to mean anything other than extracting messages from the queue in an ordinary fashion.
All sorts of things can post messages into the queue, but you only handle then in a controlled fashion.
As for COM. I've never implemented a message queue - just Interfaces with methods, so I can't help you there.
But if I'm right STA stands for *single* threaded apartment. Wouldn't other apartments get their own copy of the com object, so it wouldn't block? If you start doing singleton tricks, then that would be your own problem, and you should only do tricks with your eyes open.
Iain.
Iain Clarke appears because CPallini still cares.
|
|
|
|
|
Thanks Iain!
Informative reply. I am not doing any tricks, I mean for general implementation for STA, if the message pump is blocked by STA owning thread, invocation from other apartment to the current STA will be block? Right?
regards,
George
|
|
|
|
|
George_George wrote: for general implementation for STA, if the message pump is blocked by STA owning thread, invocation from other apartment to the current STA will be block? Right?
Yes.
Calls from other apartments implies that the interface has to be marshalled.
When the call is made the RPC will send(!) a message to the STA thread. If that STA doesn't pump messages the call will block. This can happen even if the STA has a message pump but the thread is already inside a message handler or doing something else instead of pumping messages.
This is the same problem as sending messages from one thread to another instead of posting them. The difference between sending and posting is that posting doesn't wait until the message is handled, which means that you cannot deadlock when posting messages but you certainly can when sending them.
However, the RPC in this aspect send messages since all calls return a HRESULT which means that it has to wait for the result before it returns to the caller.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Thanks Roger,
You mean marshelling from one apartment will use SendMessage other than PostMesssage? Do you have any documents for that? (I have not learned that before)
regards,
George
|
|
|
|
|
George_George wrote: You mean marshelling from one apartment will use SendMessage other than PostMesssage?
I think you misunderstood me a little bit...
It's not setting up the actual marshalling with calls to e.g. ::CoMarshalInterThreadInterfaceInStream() or using the GIT that results in a sent message, it's the function call from the other apartment via the marshalled interface that causes this. The message sending happens behind the scenes of the proxy/stub implementation, unless we're talking about free-threaded apartments and that's way too early to talk about so forget about that for now.
Concentrate on using the STA and calling servers inside it from other apartments.
As for documents regarding this, I assume you've already found a great place to start in Lim Bio Liong's article[^] since you've posted a comment there.
Other good references are the books that he refers to in the article.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Thanks Roger!
I have read Lim's article and also the book Inside COM. But they both not mentioned whether a call from other apartment to STA will use SendMessage or PostMessage in stub/proxy.
Since you mentioned it in last post, I am just interested how do you think it will use SendMessage?
(not PostMessage or anything else?)
regards,
George
|
|
|
|
|
Well, in a technical detail calls between apartments may, or may not, use ::SendMessage() . Whether it's an actual ::SendMessage() or ::PostMessage() call doesn't matter and is irrelevant.
The behaviour from the client point of view is the same; it works as if you've used ::SendMessage() .
This is my point:
You asked if the call would block and the answer to that is simply 'yes'.
The RPC runtime will actually use ::PostMessage() to place a COM message in the message queue of the server, BUT the proxy will wait for the answer until the server responds.
This can be read in e.g. "Essential COM" by Don Box, chapter 5. If you have a MSDN Library (2005) installation you will also find this chapter as a book excerpt below "Win32 and COM Development". However, I was unable to find it at MSDN online.
Keep in mind that the server and client may not be located on the same machine which would make it impossible to use communication between the server and the client based on window messages. The network has to be involved.
But even if the network is involved, the same rules apply; the call from the client will block and the server must have a message loop that's not deadlocked.
According to my experience it seems to help programmers starting with COM calls crossing apartment boundaries to think of the call as if the message was sent using ::SendMessage() . The reason to even bring that up is that even a beginner have to know that an apartment exposing interfaces must have a message loop. It also assumes that the programmer is familiar with the problems using ::SendMessage() . If the COM beginner is told from the start that ::PostMessage() is used, chances are that he/she would believe that the call somehow would not block.
Regarding why the call is blocking, the simple reason is that each COM interface call must return a HRESULT and the result is unknown until the call has been serviced. For lengthy operations the server should, and usually would, use a callback interface to inform the client about the progress of the asynchronous operation. But this is asynchronous and non-blocking at a higher level.
If you still have question, please explain what you're trying to do that make you ask these questions.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|