|
You last visited: Today at 03:46
Advertisement
[C++]GetOpenFileName Problem
Discussion on [C++]GetOpenFileName Problem within the C/C++ forum part of the Coders Den category.
03/09/2013, 22:57
|
#1
|
elite*gold: 35
Join Date: Jun 2009
Posts: 2,187
Received Thanks: 6,906
|
[C++]GetOpenFileName Problem
Hallo Leute,
wie der Titel bereits sagt, habe ich ein kleines Problemchen mit "GetOpenFileName"...
Und zwar habe ich vor eine DLL zu schreiben (schien mir der einfachste Weg zu sein), welche ich in jeden Prozess injecte, um so zu gewährleisten, dass bei jedem Aufruf von GetOpenFileName mein eigener Dialog aufgerufen wird.
Wenn ich folgendes mache, funktioniert der Code einwandfrei:
Code:
#include <Windows.h>
#include <detours.h>
typedef BOOL (__stdcall* GetOpenFileName_DetourType)(LPOPENFILENAMEW lpOpfn);
GetOpenFileName_DetourType GetOpenFileName_Orig;
BOOL __stdcall GetOpenFileName_Detour(LPOPENFILENAMEW lpOpfn)
{
return GetOpenFileName_Orig(lpOpfn);
}
BOOL WINAPI DllMain(HINSTANCE hiDLL, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
GetOpenFileName_Orig = reinterpret_cast<GetOpenFileName_DetourType>(DetourFunction((PBYTE)GetOpenFileName, (PBYTE)GetOpenFileName_Detour));
return TRUE;
case DLL_PROCESS_DETACH:
return TRUE;
}
}
Wenn ich nun aber folgendes mache, wir der Dialog beim 1. öffnen nicht angezeigt. Wenn ich dann versuche den Dialog ein 2. mal zu öffnen, stürzt der Prozess ab. Habe bereits gelesen, dass es daran liegen kann, dass der Dialog zwar erstellt wird, aber keine Größe hat ( width = 0) und somit nicht sichtbar ist. Jedoch habe ich das Gefühl, dass mein Callback gar nicht erst aufgerufen wird, da ich auch keine MessageBox zu Gesicht bekomme.
Hier der Code:
Code:
#include <Windows.h>
#include <detours.h>
typedef BOOL (__stdcall* GetOpenFileName_DetourType)(LPOPENFILENAMEW lpOpfn);
GetOpenFileName_DetourType GetOpenFileName_Orig;
UINT CALLBACK OFNHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
MessageBox(0, "LALAAL", "1", 0);
switch (uMsg)
{
case WM_INITDIALOG:
{
MessageBox(0, "LALAAL", "2", 0);
return 1;
}
}
}
BOOL __stdcall GetOpenFileName_Detour(LPOPENFILENAMEW lpOpfn)
{
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.nMaxFile = MAX_PATH;
ofn.hwndOwner = NULL;
ofn.Flags = OFN_ENABLEHOOK|OFN_EXPLORER;
ofn.lpfnHook = OFNHookProc;
return GetOpenFileName(&ofn);
}
BOOL WINAPI DllMain(HINSTANCE hiDLL, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
GetOpenFileName_Orig = reinterpret_cast<GetOpenFileName_DetourType>(DetourFunction((PBYTE)GetOpenFileName, (PBYTE)GetOpenFileName_Detour));
return TRUE;
case DLL_PROCESS_DETACH:
return TRUE;
}
}
Freue mich über jede Hilfe.
MfG
|
|
|
03/11/2013, 19:35
|
#2
|
elite*gold: 1
Join Date: Apr 2010
Posts: 13,772
Received Thanks: 15,036
|
Code:
BOOL __stdcall GetOpenFileName_Detour(LPOPENFILENAMEW lpOpfn)
{
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.nMaxFile = MAX_PATH;
ofn.hwndOwner = NULL;
ofn.Flags = OFN_ENABLEHOOK|OFN_EXPLORER;
ofn.lpfnHook = OFNHookProc;
return [B]GetOpenFileName[/B](&ofn);
}
Müsste das nicht GetOpenFileName_Orig heißen  ?
Code:
BOOL __stdcall GetOpenFileName_Detour(LPOPENFILENAMEW lpOpfn)
{
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.nMaxFile = MAX_PATH;
ofn.hwndOwner = NULL;
ofn.Flags = OFN_ENABLEHOOK|OFN_EXPLORER;
ofn.lpfnHook = OFNHookProc;
return GetOpenFileName(&ofn);
}
Anstatt eine neue Struktur zu erstellen und die mit der alten zu ersetzen, würde ich einfach die vorhanden Struktur benutzen
Code:
BOOL __stdcall GetOpenFileName_Detour(LPOPENFILENAMEW lpOpfn)
{
lpOpfn->lStructSize = sizeof(OPENFILENAME);
lpOpfn->nMaxFile = MAX_PATH;
lpOpfn->hwndOwner = NULL;
lpOpfn->Flags = OFN_ENABLEHOOK|OFN_EXPLORER;
lpOpfn->lpfnHook = OFNHookProc;
return GetOpenFileName(lpOpfn);
}
|
|
|
03/11/2013, 20:09
|
#3
|
elite*gold: 35
Join Date: Jun 2009
Posts: 2,187
Received Thanks: 6,906
|
Quote:
Originally Posted by Neeya Nanaa
Code:
BOOL __stdcall GetOpenFileName_Detour(LPOPENFILENAMEW lpOpfn)
{
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.nMaxFile = MAX_PATH;
ofn.hwndOwner = NULL;
ofn.Flags = OFN_ENABLEHOOK|OFN_EXPLORER;
ofn.lpfnHook = OFNHookProc;
return [B]GetOpenFileName[/B](&ofn);
}
Müsste das nicht GetOpenFileName_Orig heißen  ?
Code:
BOOL __stdcall GetOpenFileName_Detour(LPOPENFILENAMEW lpOpfn)
{
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.nMaxFile = MAX_PATH;
ofn.hwndOwner = NULL;
ofn.Flags = OFN_ENABLEHOOK|OFN_EXPLORER;
ofn.lpfnHook = OFNHookProc;
return GetOpenFileName(&ofn);
}
Anstatt eine neue Struktur zu erstellen und die mit der alten zu ersetzen, würde ich einfach die vorhanden Struktur benutzen
Code:
BOOL __stdcall GetOpenFileName_Detour(LPOPENFILENAMEW lpOpfn)
{
lpOpfn->lStructSize = sizeof(OPENFILENAME);
lpOpfn->nMaxFile = MAX_PATH;
lpOpfn->hwndOwner = NULL;
lpOpfn->Flags = OFN_ENABLEHOOK|OFN_EXPLORER;
lpOpfn->lpfnHook = OFNHookProc;
return GetOpenFileName(lpOpfn);
}
|
Ach natürlich.... xD
Der Kack endet immer in einer Endlosschleife...
Danke vielmals für deine Hilfe
|
|
|
Similar Threads
|
::GetOpenFileName/::GetSaveFileName
04/02/2010 - General Coding - 7 Replies
da ich mich jetz endlich ma mit gui beschäftige (also nich nur aus resourcen, oder mit mfc), habe ich jetz ein problem!
wenn ich auf nen button klicke, und eine von den funktionen aufrufe, dann öffnet sich das fenster. aber wenn ich im menü die funktion mit den gleichen parametern aufrufe, dann passiert garnix :confused:
kann mir dabei irgendwer helfen?
|
GetOpenFileName-hilfe
10/19/2009 - AutoIt - 4 Replies
hey leute.
bin grad am bot schreiben und hänge jetzt am simplem problem fest.
ich habe $input 1 und durchsuchen func
wie kann ich nun auswählen,das dieser dies dann auch einfügt,nach dem er es ausgewählt hat
mit GuiCtrlSetData?
wenn ja wie^^
|
All times are GMT +1. The time now is 03:46.
|
|