|
Hi,
I have been using the window spy http://www.codeproject.com/KB/applications/WindowScraper_Utility.aspx[^]. I need to avoid masked input textboxes with passwords. How can this be done?
thanks
int count, nItems;<br />
BOOL bGot=FALSE;<br />
CString strItem;<br />
char winTxt[5000];<br />
memset(winTxt, 0, 5000);<br />
<br />
if(strcmp(szClassName, "ListBox") == 0)<br />
{<br />
CListBox lb;<br />
lb.Attach(hwndFoundWindow);<br />
nItems=lb.GetCount();<br />
for(count=0; count < nItems; count++)<br />
{<br />
lb.GetText(count, strItem);<br />
strItem+="\r\n";<br />
strcat_s(winTxt, strItem);<br />
}<br />
lb.Detach();<br />
bGot=TRUE;<br />
}<br />
<br />
if(strcmp(szClassName, "ComboBox") == 0)<br />
{<br />
CComboBox cb;<br />
cb.Attach(hwndFoundWindow);<br />
int nItems=cb.GetCount();<br />
for(count=0; count < nItems; count++)<br />
{<br />
cb.GetLBText(count, strItem);<br />
if(cb.GetCurSel() == count)<br />
strItem+=(" <- Selected");<br />
strItem+="\r\n";<br />
strcat_s(winTxt, strItem);<br />
}<br />
cb.Detach();<br />
bGot=TRUE;<br />
}<br />
<br />
if(!bGot)<br />
SendMessage(hwndFoundWindow, WM_GETTEXT, 5000, (LPARAM)winTxt);<br />
<br />
SetDlgItemText(hwndDialog, IDC_WINDOWTEXT_EDIT, winTxt);<br />
<br />
return lRet;<br />
}
|
|
|
|
|
Can you not use GetClassName, and compare that against EDIT (verify that!),
then if it is any edit box, use GetStyle, and check that for the ES_PASSWORD flag?
Iain.
Iain Clarke appears because CPallini still cares.
|
|
|
|
|
|
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
|
|
|
|