Irgendwie klappt das noch nicht so ganz wie es soll.
Hier mal der DLL Code:
#pragma data_seg(".SHARDAT")
static HHOOK hkb=NULL;
static char karte[200];
static int i=0;
bool start=true;
static char* lpFeld=NULL;
#pragma data_seg()
static HANDLE hEvent=NULL;
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode,
WPARAM wParam,LPARAM lParam)
{
if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode))
{
if (start)
{
MessageBox(0,"ok","ht",MB_OK);
start=false;
}
if (i>=10)
{
MessageBox(0,"gößer","d1",MB_OK);
karte[i] = 0;
UnHook();
}
else
{
BYTE ks[256];
GetKeyboardState(ks);
WORD w;
UINT scan;
scan=0;
ToAscii(wParam,scan,ks,&w,0);
karte[i] = char(w);
karte[i+1]='\0';
MessageBox(0,karte,"d1",MB_OK);
i++;
}
}
LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}
BOOL InstallHook()
{
char t[20];
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,AfxGetInstanceHandle(),0);
if (hkb == NULL)
{
itoa(GetLastError(),t,10);
MessageBox(0,t,"ht",MB_OK);
}
return TRUE;
}
BOOL UnHook()
{
char t[20];
BOOL unhooked = UnhookWindowsHookEx(hkb);
hEvent = OpenEvent(EVENT_ALL_ACCESS,FALSE,"PS2Kartenleser");
if (!SetEvent(hEvent))
{
itoa(GetLastError(),t,10);
MessageBox(0,t,"ht",MB_OK);
}
else
{
MessageBox(0,karte,"ht",MB_OK);
strcpy(lpFeld,karte);
}
return unhooked;
}
HANDLE __stdcall Start(char *z)
{
lpFeld = z;
hEvent = CreateEvent(NULL,TRUE,FALSE,"PS2Kartenleser");
if (hEvent == NULL)
{
MessageBox(0,"dfgbn","bnsvu",MB_OK);
return false;
}
InstallHook();
return hEvent;
}
[/PHP]
Wenn ich aus meiner Exe Start() aufrufe übergebe ich der Funktion einen Zeiger auf
ein char Feld. Warum wird das Feld nicht in der Unhook Funktion gefüllt?