|
I am trying to create a System Wide hook to listen to Window Creation events in the system .
For this purpose , I set up a new Project - > an regular MFC DLL
I have created SHARED regions where I Store the hook id created , the module and the HOOKPROC values .
The problem is that I am still not able to intercept any Window Creation Events .
Clearly am missing something
Help is appreciated.
Below is the main code of my DLL
<br />
<br />
#include "stdafx.h"<br />
#include "HookEg.h"<br />
#include "HookCommon.h"<br />
<br />
#ifdef _DEBUG<br />
#define new DEBUG_NEW<br />
#undef THIS_FILE<br />
static char THIS_FILE[] = __FILE__;<br />
#endif<br />
<br />
<br />
<br />
<br />
#pragma data_seg(".SHARED")<br />
<br />
HHOOK hookid = 0;
HINSTANCE mod =NULL;
HOOKPROC proc =NULL;
<br />
#pragma data_seg()<br />
#pragma comment(linker, "/section:.SHARED,rws")<br />
<br />
<br />
static LRESULT CALLBACK ShellProc(int nCode,WPARAM wParam,LPARAM lParam)<br />
{ <br />
TRACE("Shell message rcvd nCode = %d wParam = %d lParam=%d \n",nCode,wParam,lParam);<br />
if(nCode == HSHELL_WINDOWCREATED )<br />
{<br />
TRACE("new window created \n");<br />
<br />
}<br />
else if(nCode == HSHELL_WINDOWDESTROYED)<br />
{ <br />
<br />
}<br />
<br />
return CallNextHookEx(hookid, nCode, wParam, lParam); <br />
}<br />
<br />
<br />
<br />
<br />
BEGIN_MESSAGE_MAP(CHookEgApp, CWinApp)<br />
END_MESSAGE_MAP()<br />
<br />
<br />
CHookEgApp::CHookEgApp()<br />
{<br />
}<br />
<br />
<br />
CHookEgApp theApp;<br />
<br />
BOOL CHookEgApp::InitInstance() <br />
{<br />
<br />
<br />
return CWinApp::InitInstance();<br />
}<br />
<br />
int CHookEgApp::ExitInstance() <br />
{<br />
if(hookid)<br />
{<br />
if(UnhookWindowsHookEx(hookid))<br />
hookid = 0; <br />
else<br />
TRACE("Error = %d\n",GetLastError());<br />
}<br />
<br />
return CWinApp::ExitInstance();<br />
}<br />
<br />
<br />
HOOKEG_API void HookegInit() <br />
{<br />
<br />
hookid = 0;<br />
<br />
mod = GetModuleHandle("HookEg.dll");<br />
<br />
proc = ShellProc;<br />
<br />
hookid = SetWindowsHookEx(WH_SHELL , proc , mod , NULL);<br />
<br />
<br />
}<br />
<br />
|
|
|
|
|
Try using WH_CBT instead of WH_SHELL, and watch for the HCBT_CREATEWND code.
You may be right
I may be crazy
-- Billy Joel --
Within you lies the power for good - Use it!
|
|
|
|
|
I didnt realize
1. You cannot debug a Hook or expect TRACE statements in the IDE while debugging
2. I was adding the Hook creation in the InitInstance method so even though my app exited the Hook was alive !!!
Just learnt these the HARD way !
Engineering is the effort !
|
|
|
|
|
Using the Dialog Editor, I've started a new Dialog Box.
(The OK/CANCEL buttons were placed on the form by the Editor.)
Then I added a picture control, stuck the BMP into the resources, gave the BMP a name, and finally set the picture control to use the BMP. I also stretched the form to give the picture enough room.
The picture has nothing going on in the south-east and south-west corners, so I would like the OK and CANCEL buttons to be located in those corners.
However, the picture covers the OK and CANCEL buttons... I would like the picture to be under the buttons.
When the (MFC) project is built and executed, running the mouse over the picture where it's covering the buttons will make the buttons redraw ontop of the picture - but this behavior is not not a useful design.
Is there any way to change the Z-order of the buttons and picture control ?
(In Visual Basic it's as easy as "Send to Back" when right-clicking on a control)
|
|
|
|
|
You should be able to change the order of the controls in the dialog resource.
You can use Format/Tab Order or do it by hand in the .rc file.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I exited VS8, edited the .rc so that the picturebox is listed after the buttons, reloaded the project and all is well thanks !
(note: when I left or right-click either button, the Dialog Editor always selects the picturebox under the button. This seems like a bug in the Dialog Editor)
|
|
|
|
|
abiemann wrote: so that the picturebox is listed after the buttons
Didn't you want it before ("under") the buttons?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
indeed, I got it mixed up. This is what it looks like in the .rc:
BEGIN
CONTROL 130,IDC_STATIC,"Static",SS_BITMAP,1,1,446,345
DEFPUSHBUTTON "PASS",IDOK,2,332,50,14
PUSHBUTTON "FAIL",IDCANCEL,397,332,50,14,BS_TOP
END
now I just wish that the Dialog Editor would select one of the buttons when I left/right-click them (instead of the picture). To select either button I need to Tab through.
|
|
|
|
|
abiemann wrote: now I just wish that the Dialog Editor would select one of the buttons when I left/right-click them (instead of the picture). To select either button I need to Tab through.
I see what you mean That's pretty annoying!
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
abiemann wrote: now I just wish that the Dialog Editor would select one of the buttons when I left/right-click them (instead of the picture). To select either button I need to Tab through.
I'm going to submit this to MS. Should be easy enough for them to hittest from
the "top-down" (reverse tab order) instead of tab order...right?
Because that's just silly
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I'm working with VC++ MFC application ..
I want to display a message box with value of a membervariable which i'm using in mi program.To do this whether i need to include any headerfile?.ifso please help me by giving the code or format as i'm a beginner.Anyone please help mi in this regard.
Thanks in Advance,
Saravana...
|
|
|
|
|
No header file needed. Message boxes only show strings, but there are plenty of ways to turn a (eg) number into a string.
eg...
CString s;
s.Format ("%i", m_nMyMemberInteger);
AfxMessageBox (s);
Iain.
|
|
|
|
|
look at wsprintf too!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief
|
|
|
|
|
Hello,
How could I change only the menu background color?
I have subscribed the DrawItem method of CMyMenu class (derived from CMenu).
Could any show me the code to do this?
Thanks,
Cris.
|
|
|
|
|
Hello,
Anybody have an idea?
I have find in the net, but nothing found.
Please take a look in this problem
Thanks again,
Cris.
|
|
|
|
|
hi all, i am new to this code project.could you please any one help me regarding how to capute yahoo mail using vc++.
Thanks in advance.
|
|
|
|
|
karthipollachi@gmail.com wrote: i am new to this code project
Welcome. Try reading the first thread in this forum titled "How to get an answer to your question"
|
|
|
|
|
karthipollachi@gmail.com wrote: ...capute yahoo mail...
What exactly do you mean by "capture?" Are you wanting to retrieve mail from a POP3 server?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Thanks for asking here basically i need to retrieve yahoo users mail. by the time of clicking send button.
Thanks
karthik
|
|
|
|
|
karthipollachi@gmail.com wrote: ...i need to retrieve yahoo users mail.
So are you wanting to retrieve mail from a POP3 server?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
|
Thanks for help.i read mail monitor article i am getting some idea's.
|
|
|
|
|
You are wellcome
Russell
|
|
|
|
|
Hi everybody,
i created a CFormView-derived class which encapsulates all basic-functionalities of all my views.
If i create a new dialog-based view i add to the view a new CFormView-derived class and change
all CFormView with UniView (=my class)
Is it possible to create a template which is available on the "Create new class" menu?
Example: I create a view with the dialog designer and click on "Create new class", there i need to choose CFormView, for that the window is a FormView derived window and not a CDialog-derived.
Just at this point i like to choose my own basic class "UniView"
Is it possible? If yes, how can i find doc's about it?
Big thanks
|
|
|
|
|
Hi,
take a look in my answer to other similar question and follow the lins, I'm not sure if this is what you ask for, but it maybe gives you an idea.
Here[^]
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
|
|
|
|