Ich habe die Variablen aber ausserhalb von
Code:
#pragma data_seg ("shared")
#pragma data_seg ()
deklariert.
Um das noch mal zu prüfeb, habe ich folgendes Beispiel:
Code:
#define MAKE_DLL
// INCLUDES //////////////////////////////////////////////////////////////
#include <windows.h>
#include <stdio.h>
#include <fstream>
#include <String.h>
#include "Hook.h"
using namespace std;
#pragma data_seg ("shared")
//iNumInstances = 0;
//HHOOK hMouseHook =0;
#pragma data_seg ()
#pragma comment(linker,"/SECTION:shared,RWS")
// PROTOTYPES ////////////////////////////////////////////////////////////
LRESULT CALLBACK MouseHookProc(int, WPARAM, LPARAM);
// VARIABLES /////////////////////////////////////////////////////////////
HINSTANCE hDllInstance;
HHOOK hMouseHook =0;
int x, y=0;
char message[10];
// METHODS ///////////////////////////////////////////////////////////////
// FUNCTIONS /////////////////////////////////////////////////////////////
int APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
hDllInstance = hInstance;
return TRUE;
}
BOOL CALLBACK InstallHooks(void)
{
if (hMouseHook ==0)
{
hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseHookProc, hDllInstance, NULL);
if(hMouseHook!=NULL)//succesfully installed
{
OutputDebugString("Install");
return TRUE;
}else
{
OutputDebugString("Fehler bei Install");// not installed
return FALSE;
}
}
return FALSE;
}
//WINVER
BOOL CALLBACK UnInstallHooks(void)
{
if (UnhookWindowsHookEx(hMouseHook))//succesfully deinstalled
{
hMouseHook=NULL;
OutputDebugString("De_Install");
return TRUE;
}else
{
OutputDebugString("Fehler bei De_Install");// not deinstalled
return FALSE;
}
}
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam,LPARAM lParam)
{
if(nCode < 0) return CallNextHookEx(hMouseHook, nCode, wParam, lParam); //if not allowed to work ->CallNextHook
//else:start filtering...
if (wParam==WM_RBUTTONDOWN)
{
//MOUSEHOOKSTRUCT* pMouseStruct = (MOUSEHOOKSTRUCT*)lParam;
//if (pMouseStructex);
//x=pMouseStruct->pt.x;
//x=GET_X_LPARAM(lParam);
//mouse_event(MOUSEEVENTF_MOVE,50,50,0,0);
x++;
sprintf(message,"%d",x); //convert integer to string
OutputDebugString(message);
}
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}
Hier wird x nicht in einem shared segment gehalten, sondern lokal.
Dadurch kannst Du auch beim testen sehen, das beim klicken auf Programm A von 0 bis 5 gezählt wird ( wenn man 5 mal klickt).
Klickt man nun auf Programm B wird wieder von 0 gezählt ( z.B. von 0 bis 3)
Klick auf Programm A -> 6
Klick auf Programm A ->7
Klick auf Programm B ->4
Klick auf Programm A ->8
usw.
Dadurch habe ich gedacht (und denke es auch immer noch), das hier die Daten in einem lokalen Bereich gehalten werden.
Währe für eine Belehrung überaus dankbar....
[edit=sakura] [delphi]->[c] Tags Mfg, sakura[/edit]