A
Ich hab jetzt die Vorschläge von cd9000 umgesetzt, und mein Sourcecode sieht folgendermaßen aus:
HINSTANCE g_hDllInstance;
//Variablen und Funktionen die in Zusammenhang mit dem Thread stehen
DWORD WINAPI ThreadProc (PVOID pParam);
HANDLE g_hThread = 0; // Handle zum Thread
HANDLE g_hEvent = 0; // Handle zum Event
DWORD g_idThread = NULL; // Thread-ID
BOOL g_bRunning = 1; // Thread rennt solange diese Variable TRUE ist
BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
// Perform actions based on the reason for calling.
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Return FALSE to fail DLL load
g_hDllInstance = hInstance;
g_hThread = CreateThread( NULL, NULL, ThreadProc, NULL /*pParam*/, NULL /*CREATE_SUSPENDED*/, &g_idThread);
if(!g_hThread)
return FALSE; // Thread konnte nicht erstellt werden
break;
case DLL_THREAD_ATTACH:
//SetThreadPriority(g_hThread, THREAD_PRIORITY_NORMAL); // Priorität des Threads einstellen
g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // Ein Event für Thread-Proc erstellen
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
g_bRunning = FALSE;
CloseHandle(g_hThread);
CloseHandle(g_hEvent);
break;
}
return TRUE; // Successful DLL_PROCESS_ATTACH.
}
DWORD WINAPI ThreadProc (PVOID pParam)
{
while(g_bRunning) //
{
WaitForSingleObject(g_hEvent, INFINITE); //if the event is signaled, the function returns immediately
keybd_event(VK_SPACE, 0x39, 0x00, 0); //SPACE DOWN
SleepEx(1, FALSE);
keybd_event(VK_SPACE, 0x39, KEYEVENTF_KEYUP, 0); //SPACE UP
SleepEx(1, FALSE);
}
return 0;
}
Wie ihr wahrscheinlich erkennen könnt, existiert dieser Thread in einer DLL. Sobald diese DLL geladen wird, wird auch der Thread erstellt, und im Nachhinein ein Event dafür. Das Problem, das ich jetzt habe ist, dass die Variable g_bRunning solange TRUE sein muss, solange die DLL geladen ist. Was meint ihr? Sind die drei Zeilen unter DLL_PROCESS_DETACH in Ordnung? (Die DLL brauche ich damit ich meinen Keyboard Hook systemweit wirken lassen kann).