|
How to get Windows user's Login and Logout time?
Nigah M Manzoor
|
|
|
|
|
Using COM it's possible, though I haven't used it at all, just did a quick search and found this for you...
IADsUser COM interface provides these methods for you, google for more information...
get_LastLogin
get_LastLogoff
Nibu thomas
Microsoft MVP for VC++
Code must be written to be read, not by the compiler, but by another human being.
Programming Blog: http://nibuthomas.wordpress.com
|
|
|
|
|
|
thanx,
its working
Nigah M Manzoor
|
|
|
|
|
leonigah wrote: thanx,
its working
Welcome.
I am curious to see the code! Is it possible?
Nibu thomas
Microsoft MVP for VC++
Code must be written to be read, not by the compiler, but by another human being.
Programming Blog: http://nibuthomas.wordpress.com
|
|
|
|
|
You might look into the ISensLogon interface.
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
#include <comdef.h>
#include <iads.h>
#include <adshlp.h>
#pragma comment (lib, "ActiveDS.lib")
#pragma comment (lib, "Adsiid.lib")
void CSysInfoDlg::OnOK()
{
IADsContainer *pCont = NULL;
CString str = "WinNT://DOMEN_NAME";
HRESULT hr = ADsGetObject(str.AllocSysString(), IID_IADsContainer, (void**) &pCont );
if(!SUCCEEDED(hr))
return;
ULONG ulFetched = 0L;
_variant_t var;
_variant_t vChild;
IEnumVARIANTPtr pEnum;
ADsBuildEnumerator(pCont,&pEnum);
while((SUCCEEDED(ADsEnumerateNext(pEnum, 1, &vChild, &ulFetched)) && ulFetched==1))
{
IADsUser* pADs = NULL;
hr = V_DISPATCH(&vChild)->QueryInterface(IID_IADsUser, (void**)&pADs);
if(hr!=S_OK)
break;
DATE din = 0;
pADs->get_LastLogin(&din);
COleDateTime d(din);
CString strIn = d.Format("%d-%m-%Y %H:%M");
DATE dout = 0;
pADs->get_LastLogoff(&dout);
COleDateTime d1(dout);
CString strOut = d1.Format("%d-%m-%Y %H:%M");
BSTR bstrName;
pADs->get_Name(&bstrName);
CString strName = bstrName;
SysFreeString(bstrName);
pADs->Release();
pADs = NULL;
MessageBox(strIn+"=="+strOut, strName);
}
if(pCont)
pCont->Release();
}
Nigah M Manzoor
|
|
|
|
|
Hi all,
how can i get the value of pressed key of keyboard .
how can check it is is "A to Z" or "0 tp 9" of special character.
Thanks in advance.
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
Handle WM_CHAR [^] notification.
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
|
|
|
|
|
CPallini wrote: Handle WM_CHAR[^] notification.
What if the window had controls like editbox on it? (which is usually the case)
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Rajesh R Subramanian wrote: What if the window had controls like editbox on it? (which is usually the case)
yes sir
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
You may over-ride PreTranslateMessage()
BOOL CTrialDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN){
if(pMsg->wParam >= 0x41 && pMsg->wParam <= 0x5A)
{
}
else if(pMsg->wParam >= 0x30 && pMsg->wParam <= 0x39)
{
}
}
return CDialog::PreTranslateMessage(pMsg);
}
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Rajesh R Subramanian wrote: BOOL CTrialDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->lParam == WM_KEYDOWN){ if(pMsg->wParam >= 0x41 && pMsg->wParam <= 0x5A) { //something between a and z was pressed } else if(pMsg->wParam >= 0x30 && pMsg->wParam <= 0x39) { //a number was pressed //check 0x60 through 0x69 to trap numbers //from the numpad keys as well } } return CDialog::PreTranslateMessage(pMsg);}
How can use it on purticular EditBox.
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
if(pMsg->hwnd == <youredit>.m_hWnd)
in your PreTranslateMessage
-@SuDhIrKuMaR@-
|
|
|
|
|
change the initial if condition to something like this:
if(pMsg->message == WM_KEYDOWN && GetFocus()==GetDlgItem(IDC_EDIT1))
{
...
}
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
if(pMsg->hwnd == GetDlgItem(IDC_EDIT1)->m_hWnd)
ptimization!
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
Do you mean to say that it isn't optimized? Have you examined the generated assembly? It would be essentially the same. Or, is that you're just kidding?
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
I was kidding but it has to be true too.
See, How come a getfocus() "call" be equivalent to a structure that's already coming in? Why do want to make an extra call to get the hwnd? Moreover getFocus() deals with CWnd* And how would the assemblies just match in parallel?
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
It is not the assemblies being a "match". The essence of my statement is that the compiler will optimize it to a very reasonable extent, thereby making it the same. Simply because it "knows" what I'm trying to do. Everything becomes assembler instructions there. There's no API call or CWnd pointer to deal with.
Do you agree that the following two snippets are essentially equally optimized? (not by way of code, but by way of the assembly the compiler generates)
while(condition)
{
CStringArray str;
__int64 nBigAss[10];
}
CStringArray str;
__int64 nBigAss[10];
while(condition)
{
}
One may argue "There is an allocation every time the loop runs". Well, I don't think so. (No, I ain't going to kill time generating and rearranging assembly with the PreTranslateMessage() stuff, but I can almost say it for sure)
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Yes modern compiler does these. But it will never optimize the way you say about "getfocus()". When you ask a compiler to make a call, it has to call. It doesn't know what you are going to do with the CWnd*. Not that intelligent dude . So I still can't agree.
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
Actually, you were right the first time. I was just farting making up things, only because I said it. Probably you knew it too. And yes, I could have avoided a function call. You caught me there.
But ya know? I typed an answer on reading the query immediately. No opening of visual studio, no cheating. It couldn't be the most optimized answer and optimization can be left to the OP, right? You can understand, can't you?
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Rajesh R Subramanian wrote: Actually, you were right the first time. I was just farting making up things, only because I said it. Probably you knew it too. And yes, I could have avoided a function call. You caught me there
I was actually kidding + tried to provoke you
Rajesh R Subramanian wrote: But ya know? I typed an answer on reading the query immediately. No opening of visual studio, no cheating. It couldn't be the most optimized answer and optimization can be left to the OP, right? You can understand, can't you?
lol . Now I'm free to agre that you know more MFC than me. That's true.
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
Rajesh R Subramanian wrote: It couldn't be the most optimized answer and optimization can be left to the OP, right?
I think it's not just about optimization here. GetFocus and GetDlgItem can potentially return temporary CWnd objects - so comparing them won't always be the right thing to do. So Vunic's code seems to be the right way here.
|
|
|
|
|
Indeed, look at my previous reply (and vote) to him.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Hey man!
I hope that you don't take this too seriously. Actually, I knew Vivek was right right at his first message, but it was the eight year kid within me that was arguing for fun. But however, when I look at it all again, I feel bad because my contributions are recognized here and I've been awarded, which means people would expect a lot more from me than having funny chats. I realised it and felt bad. I am also feeling that I am a lot matured than what I was earlier, but then I know it that I still need to work even more on this. There's a very long way for me. I hope you'd wish me good luck. Because if I didn't know it, that was a different thing. But knowing it and doing funny things on a public forum is unacceptable. I'm sorry about it (to everyone). I'll try to keep my message standards higher.
I feel a lot relieved after posting this message. See ya.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|