Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich habe folgendes Programm:


meine Dll:

#define WINVER				0x501

#define _WIN32_WINNT		0x501


#include <windows.h>



HINSTANCE	g_hInstance;

HHOOK		g_hHook;



BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)

{

	switch(dwReason)

	{

	case DLL_PROCESS_ATTACH:

		g_hInstance = hInstance;

		break;

	case DLL_THREAD_ATTACH:

		g_hInstance = hInstance;

		break;

	case DLL_THREAD_DETACH:

		break;

	case DLL_PROCESS_DETACH:

		break;

	}

	return TRUE;

}



LRESULT HookProc(int nCode, WPARAM wParam, LPARAM lParam)

{

	return CallNextHookEx(g_hHook, nCode, wParam, lParam);

}



BOOL InstallHook()

{

	g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)HookProc, g_hInstance, 0);

	return g_hHook != NULL;

}


mein Programm:


#define WINVER				0x501

#define _WIN32_WINNT		0x501


#include <windows.h>



typedef BOOL (*InstallHook)();



int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)

{

	HMODULE hDll = LoadLibrary("SysMnuExtDll.dll");


	InstallHook ProcAdd = (InstallHook)GetProcAddress(hDll, "InstallHook");


	ProcAdd();


	for (int i = 0; i < 30; i++)

		Sleep(1000);


	FreeLibrary(hDll);


	return 0;

}

Das Problem ist, dass meine Hook Funktion nicht aufgerufen wird. Weiß vielleicht jemand warum?

Woran merkst du, dass die Hook-Funktion nicht aufgerufen wird?

Wenn du damit diese Funktion meinst:


LRESULT HookProc(int nCode, WPARAM wParam, LPARAM lParam)

{

 return CallNextHookEx(g_hHook, nCode, wParam, lParam);

}

dann würde ja eh nicht viel passieren da die Ereignisse (meinem Verständnis nach) nur an den nächsten Hook weitergereicht werden...

Hi

Ich kann leider nicht direkt auf deine Frage antworten.

Lass mal in der DllMain des InstanceHandle in ne Datei protokolieren, weil

mich würds mal interessieren wie oft die DLL geladen wird. Bei nem Systemweiten

Hook in alle Prozessräume? Oder etwa sogar in den Speicherbereich des Systems?

Protokolier das mal mit, wenn mehrere Instanzen deiner DLL geladen werden kanns

sein das deine CallNextHookEx nicht funktioniert weil du dir dein HANDLE nur

in der aktuellen Instanz merkst, aber nicht in allen, da brauchst nen SharedMem

Bereich.

Und protokolier doch mal in ne Datei mit ob deine Hook-prozedur aufgerufen wird.

Wenn du versuchst mit dem Debugger da stehenzubleiben wirst du scheitern, aber

du kannst nen Interrupt 3 aufrufen, dann holt das System den Debugger

automatisch...

Hoffe das hilft dir ein wenig...

Gruß

Diablo999

Noch was...

Du solltest unbedingt UnhookBlaBla aufrufen, snsonsten musst neu booten um

den Hook wegzubekommen...

Ich hatte an diversen Stellen im Programm und in der Dll einen Aufruf der Funktion "OutputDebugString("Aufruf blablabla\n"); eingefügt, um zu merken, ob die Funktionen aufgerufen werden oder nicht. Dabei kam heraus, das die DllMain einmal, die Funktion InstallHook ebenfalls einmal und eben die HookProc keinmal aufgerufen wurde.

Ein Aufruf von GetLastError nach dem Aufruf von SetWindowsHookEx gibt 6 zurück (ungültiger Handle).

Damit kann ja nur g_hInstance gemeint sein, oder???. Wie kann ich das Problem den umgehen? Hat jemand eine Lösung?

Hat das Problem nicht gelöst.

vieleicht wirst du hier fündig

www.codeproject.com/dll/keyboardhook.asp

dir fehlt wahrscheinlich einmal

__declspec(dllexport)__stdcall

und (viel wichtiger)

#pragma data_seg

für

g_hHoook,g_hInstance

weil die globalen Variablen aus unterschiedlichen Threads bze Prozessen

aufgerufen werden

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.