473,395 Members | 1,975 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,395 software developers and data experts.

V C++ Help.....

Hi,
I am not totally new to programming for Windows but may have bitten off
more than I can chew.

My problem is, I would like to install a hook (using SetWindowsHookEx)
to monitor mouse movements as I am testing some new hardware we are
developing.

So, I decided to tackle the .net managed code realm for what I assumed
would be a pretty simple job (at least in my c builder exp most likely
an hour or less). Anyway two days later I am still going but am
completely stuck. See code below;
Basically, llMouseHook.h is a class that wraps up the calls to the API
function and defines an event to fire when said message is received.
The Form1.h is a visual interface with a button and a text box that I
plan to log the records of the mouse messages (assuming I can see
them). The code compiles but I don't seem to get any mouse messages
routed through, as well the important bits ie: the callback handler
aren't even linked in.....

Anyway the code is posted below, I hope someone out there takes pity on
me and gives me some pointers, as I hate being beaten by these things.
In the meantime it's off to the bookshop for some references and back
to builder to get the job done :-)

Code:
llMouseHook.h
using namespace System;
using namespace System::Runtime::InteropServices;

namespace SystemHook
{
public ref class HookEventArgs : EventArgs
{
public: int HookCode;
IntPtr wParam;
IntPtr lParam;
};

public enum class HookType : int
{
WH_KEYBOARD_LL = 13,
WH_MOUSE_LL = 14
};

public delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll")]
extern IntPtr SetWindowsHookEx(HookType code,
HookProc ^func,
IntPtr hInstance,
int threadID);

[DllImport("user32.dll")]
extern int UnhookWindowsHookEx(IntPtr hhook);

[DllImport("user32.dll")]
extern int CallNextHookEx(IntPtr hhook,
int code,
IntPtr wParam,
IntPtr lParam);
public delegate void HookEventHandler(Object^ sender, HookEventArgs^
e);

public ref class LocalWindowsHook
{
HookEventHandler^ Hooked;
public:
event HookEventHandler^ HookInvoked {
void add(HookEventHandler^ Ev) {
Hooked += Ev;
}
void remove(HookEventHandler^ Ev) {
Hooked -= Ev;
}
void raise(Object^ sender, HookEventArgs^ e) {
if (Hooked) {
Hooked->Invoke(sender, e);
}
}
}

protected:
IntPtr m_hhook;
HookProc ^ m_filterFunc;
HookType m_hookType;

public:
int CoreHookProc(int code, IntPtr wParam, IntPtr lParam)
{
if (code < 0)
return CallNextHookEx(m_hhook, code, wParam, lParam);
HookEventArgs^ e = gcnew HookEventArgs();
e->HookCode = code;
e->wParam = wParam;
e->lParam = lParam;
HookInvoked(this, e);

return CallNextHookEx(m_hhook, code, wParam, lParam);
}

LocalWindowsHook(HookType hook)
{
m_hhook = IntPtr::Zero;
m_hookType = hook;
Hooked = nullptr;
m_filterFunc = gcnew HookProc(this,
&SystemHook::LocalWindowsHook::CoreHookProc);
}

void Install()
{
Threading::Thread^ MainThread = Threading::Thread::CurrentThread;
m_hhook = SetWindowsHookEx(
m_hookType,
m_filterFunc,
IntPtr::Zero,
MainThread->ManagedThreadId);
}

void Uninstall()
{
UnhookWindowsHookEx(m_hhook);
}
};
}

<Form1>
#pragma once
namespace MouseTracker
{
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace SystemHook;

/// <summary>
/// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to
change the
/// 'Resource File Name' property for the managed resource
compiler tool
/// associated with all .resx files this class depends on.
Otherwise,
/// the designers will not be able to interact properly with
localized
/// resources associated with this form.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
LocalWindowsHook^ MseHook;
HookEventHandler^ Ev;
bool Running;
public:
Form1(void)
{
InitializeComponent();

MseHook = gcnew LocalWindowsHook(HookType::WH_MOUSE_LL);
Ev = gcnew HookEventHandler(this, &Form1::MouseEventReceived);
Running = false;
}

protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">"description of the parameter"</param>
virtual void Dispose(Boolean disposing) override
{
if (disposing && components)
{
delete components;
}
__super::Dispose(disposing);
}
private: System::Windows::Forms::RichTextBox^ rtbMouseLog;
protected:

private: System::Windows::Forms::Button^ butStart;
private: System::Windows::Forms::Button^ butClear;
private: System::Windows::Forms::Button^ butSave;
protected:
void MouseEventReceived(Object^ sender, HookEventArgs^ e)
{
System::Console::WriteLine("Mouse Event....");
}

private:
/// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
//REMOVED.......
#pragma endregion
private: System::Void butStart_Click(System::Object^ sender,
System::EventArgs^ e) {
butClear->Enabled = Running;
butSave->Enabled = Running;
Running = !Running;
if (Running) {
butStart->Text = "Stop";
MseHook->HookInvoked += Ev;
MseHook->Install();
}
else {
butStart->Text = "Start";
MseHook->HookInvoked -= Ev;
MseHook->Uninstall();
}

}
private: System::Void butClear_Click(System::Object^ sender,
System::EventArgs^ e) {
// rtbMouseLog->Lines->Clear;
}
};
}

Nov 17 '05 #1
1 1227

"a_deano" <se********@yahoo.com> wrote in message
news:11**********************@g47g2000cwa.googlegr oups.com...
Hi,
I am not totally new to programming for Windows but may have bitten off
more than I can chew.

My problem is, I would like to install a hook (using SetWindowsHookEx)
to monitor mouse movements as I am testing some new hardware we are
developing.

So, I decided to tackle the .net managed code realm for what I assumed
would be a pretty simple job (at least in my c builder exp most likely
an hour or less). Anyway two days later I am still going but am
completely stuck. See code below;


As your hook will be called each time the mouse is moved, you want to make
it as fast as possible. Managed code is not really appropriate for this,
since you incur a performance penalty to transition to/from managed code.
On top of that, it is far simpler to write a hook in native code, since
Windows supports native callbacks, and forcing it to go to a manged callback
is one more thing to worry about (and apparently is hard to get working from
your experience, besides).

-- David
http://www.dcsoft.com
Dec 3 '05 #2

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

21
by: Dave | last post by:
After following Microsofts admonition to reformat my system before doing a final compilation of my app I got many warnings/errors upon compiling an rtf file created in word. I used the Help...
9
by: Tom | last post by:
A question for gui application programmers. . . I 've got some GUI programs, written in Python/wxPython, and I've got a help button and a help menu item. Also, I've got a compiled file made with...
6
by: wukexin | last post by:
Help me, good men. I find mang books that introduce bit "mang header files",they talk too bit,in fact it is my too fool, I don't learn it, I have do a test program, but I have no correct doing...
3
by: Colin J. Williams | last post by:
Python advertises some basic service: C:\Python24>python Python 2.4.1 (#65, Mar 30 2005, 09:13:57) on win32 Type "help", "copyright", "credits" or "license" for more information. >>> With...
7
by: Corepaul | last post by:
Missing Help Files When I enter "recordset" as the keyword and search the Visual Basic Help index, I get many topics of interest in the resulting list. But there isn't any information available...
5
by: Steve | last post by:
I have written a help file (chm) for a DLL and referenced it using Help.ShowHelp My expectation is that a developer using my DLL would be able to access this help file during his development time...
8
by: Mark | last post by:
I have loaded Visual Studio .net on my home computer and my laptop, but my home computer has an abbreviated help screen not 2% of the help on my laptop. All the settings look the same on both...
10
by: JonathanOrlev | last post by:
Hello everybody, I wrote this comment in another message of mine, but decided to post it again as a standalone message. I think that Microsoft's Office 2003 help system is horrible, probably...
1
by: trunxnirvana007 | last post by:
'UPGRADE_WARNING: Array has a new behavior. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"' 'UPGRADE_WARNING: Couldn't resolve...
0
by: hitencontractor | last post by:
I am working on .NET Version 2003 making an SDI application that calls MS Excel 2003. I added a menu item called "MyApp Help" in the end of the menu bar to show Help-> About. The application...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.