|
You can call GetLastError()[^] in case of a failure to find out what went wrong.
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche
.·´¯`·->Rajesh<-·´¯`·.
[Microsoft MVP - Visual C++]
|
|
|
|
|
I did that, but its really very hard to replicate it. I was asking for any particular scenario that might have caused the function to fail.
Any peculiar experiences regarding the function use?
Anyways Thanks.
|
|
|
|
|
No, I don't have any peculiar experience with the function. But I suggest that you log all the failures (with reasons) and that would be a good way to analyse what goes crazy.
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche
.·´¯`·->Rajesh<-·´¯`·.
[Microsoft MVP - Visual C++]
|
|
|
|
|
It fails when computer username is set as UnknownUser
|
|
|
|
|
Whats your operating system?
|
|
|
|
|
#include <windows.h>
#include <stdio.h>
#include <detours.h>
#include
#include
#include <math.h>
#include <process.h>
#include <mmsystem.h>
#include <tlhelp32.h>
#include <vector>
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "winmm.lib")
#define Client_GLDRAWELEMENTS 0x4E5DA2
typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices );
DWORD g_dwGlDrawElements = NULL;
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
// Here you can filter any textures using g_pszTextureName
CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}
// Redirect
bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
g_dwGlDrawElements = *( DWORD * )Client_GLDRAWELEMENTS;
*( DWORD * )Client_GLDRAWELEMENTS = PtrToUlong( glDrawElementsHook );
return true;
}
else if(dwReason == DLL_PROCESS_DETACH)
{
}
return false;
}
Here are the errors thnx if any could help me
C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2065: 'CAST' : undeclared identifier
C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2275: 'GLDRAWELEMENTS_TYPE' : illegal use of this type as an expression
C:\Documents and Settings\ivor\Desktop\project\main.cpp(27) : see declaration of 'GLDRAWELEMENTS_TYPE'
|
|
|
|
|
Please format your code properly using the "code block" tag and using the '<' and '>' symbols just above the emoticons. Your code is unreadable.
|
|
|
|
|
Try changing the glDrawElementsHook function as follows:
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
GLDRAWELEMENTS_TYPE *myFunc;
myFunc = MessageBox;
(*myFunc)(iMode, iCount, iType, pvIndices );
}
You just need to change the indicated line so it points to the correct function
Here's a trivial example:
typedef int ( WINAPI msgBoxFunc_Type )( HWND hwnd, LPCSTR, LPCSTR, UINT);
void DrawOKMB( char *title, char *text )
{
msgBoxFunc_Type *myFunc;
myFunc = MessageBox;
(*myFunc)(NULL, text, title, MB_OK);
}
|
|
|
|
|
Thnx for very good post but still i got 1 error
main.cpp
C:\Documents and Settings\ivor\Desktop\project\main.cpp(35) : error C2275: 'GLDRAWELEMENTS_TYPE' : illegal use of this type as an expression
C:\Documents and Settings\ivor\Desktop\project\main.cpp(27) : see declaration of 'GLDRAWELEMENTS_TYPE'
it should be this i dunno why the code block ignores it
includes should be stdio.h detours.h vector tlhelp32.h mmsystem.h process.h math.h
#include <windows.h>
#include <stdio.h>
#include <detours.h>
#include
#include
#include <math.h>
#include <process.h>
#include <mmsystem.h>
#include <tlhelp32.h>
#include <vector>
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "winmm.lib")
#define Client_GLDRAWELEMENTS 0x4E5DA2
typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices );
DWORD g_dwGlDrawElements = NULL;
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
GLDRAWELEMENTS_TYPE *CAST;
CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}
bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
g_dwGlDrawElements = *( DWORD * )Client_GLDRAWELEMENTS;
*( DWORD * )Client_GLDRAWELEMENTS = PtrToUlong( glDrawElementsHook );
return true;
}
else if(dwReason == DLL_PROCESS_DETACH)
{
}
return false;
}</vector></tlhelp32.h></mmsystem.h></process.h></math.h></detours.h></stdio.h></windows.h>
|
|
|
|
|
Ahr - that thing with the #includes being cut from the post - when you're editing the post, you have to go through and replace all instances of < & > with the characters supplied when you hit the < or > buttons below the edit box. If you don't, text between < and > will be treated as an HTML block. (not just plain text)
As for the code - it's the whole CAST thing that's giving rubbish results
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
GLDRAWELEMENTS_TYPE *CAST;
CAST( GLDRAWELEMENTS_TYPE, g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}
Here, like this, I believe. - Just chuck the CAST away and use the function pointer like I suggested earlier.
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
( g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}
|
|
|
|
|
It says the following error if i try above
C:\Documents and Settings\ivor\Desktop\project\main.cpp(40) : error C2064: term does not evaluate to a function
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
( g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}
|
|
|
|
|
Ok, please forgive me - I never really had a close look at all of the code together.
Have a look at the definition of g_dwGlDrawElements, it's defined as a DWORD?!?
I can't see all of the code in your first post because of the issue with the < and > characters, but if you'd care to post the whole lot I'll take another look at it.
I did find some code like yours, over here: http://forum.gamedeception.net/showthread.php?p=100284[^] They might be good value when it comes to looking at this problem. About 1/2 way down, somebody mentions that the code is just performing the same basic function as GetProcAddress, though their code actually overwrites pointers, etc, etc. I had immediately thought of this function when I found out your code need function pointers. It's usually a pretty neat and clean thing to do.
In any case, you can chuck a zip over at savefile.com or post the whole code here and I'll take another peek.
|
|
|
|
|
|
Well here's what I've got. It compiles, but I've no idea if it's any good. It all depends on what is sitting at 0x4E5DA2 in memory.
#include <windows.h>
#include <stdio.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <math.h>
#include <process.h>
#include <mmsystem.h>
#include <tlhelp32.h>
#include <vector>
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "winmm.lib")
#define Client_GLDRAWELEMENTS 0x4E5DA2
typedef void ( WINAPI *GLDRAWELEMENTS_TYPE )( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices );
GLDRAWELEMENTS_TYPE g_dwGlDrawElements = NULL;
void WINAPI glDrawElementsHook( GLenum iMode, GLsizei iCount, GLenum iType, const GLvoid *pvIndices )
{
( g_dwGlDrawElements )( iMode, iCount, iType, pvIndices );
}
bool WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, PVOID pvReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
g_dwGlDrawElements = *( GLDRAWELEMENTS_TYPE * )Client_GLDRAWELEMENTS;
*( DWORD*)Client_GLDRAWELEMENTS = PtrToUlong(glDrawElementsHook );
return true;
}
else if(dwReason == DLL_PROCESS_DETACH)
{
}
return false;
}
|
|
|
|
|
thnx for the help i try it later im on school now but il post the result !
|
|
|
|
|
HI all,
I m using Date Time Picker type resource in MFC and CDateTimeCtrl and COleDateTime type class for this.
Please tell me there is some limit for years.
Beacuse when i put some value in year or use spin of datetimectrl to set the year it gives an error.
Error is :: "The Parameter is incorrect."
please help me for this.
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
COleDateTime has this range (From MSDN) The COleDateTime class handles dates from 1 January 100 – 31 December 9999.
You can set the CDateTimeCtrl range with CDateTimeCtrl::SetRange();
There are two posibilities SetRange(CTime,CTime); or SetRange(COleDateTime,COleDateTime);
CTime has this range 1970-2038.
CDateTimeCtrl won't allow dates before 1752 AFAIK
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Thanks.
so please tell me the range for CDateTimeCtrl
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
BOOL SetRange( const COleDateTime* pMinRange, const COleDateTime* pMaxRange );
BOOL SetRange( const CTime* pMinRange, const CTime* pMaxRange );
u can use any of the syntax depending on the requirement.
The COleDateTime class handles dates from 1 January 100 – 31 December 9999.
and CTime can handle dates from 1970-2038.
hope this information was useful
|
|
|
|
|
Hi,
in operating systems prior to windows vista a service could easily send message to desktop as they both shared the same session.
but in windows vista services run in console session 0, hence it is not possible to send a message to desktop, as the message remains in the terminal session without being displayed on desktop.
this is all due to session 0 isolation mae in windows vista.
as specified, now in order to send a message to desktop we have to use the API "WTSSendMessage" and also use the "WTSEnumerateSession" to find out which console session are active.
can i get some help on how to implement these functions to be able to send a message to the desktop successfully??
|
|
|
|
|
There's tons of articles floating around about this...
But why not use a better IPC[^] method than messages?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Is there any website or user manual to show me how to import XML data file into Crystal Report? I have problems in XML and Web services.
|
|
|
|
|
My application (MFC MDI) launches Excel, but I would like to keep my app on top of Excel. Is there a way to do this in my app or in Excel. I have tried things like SetWindowPos() but I do not know how to get a handle to my application window.
|
|
|
|
|
Like this,
CWnd *pWnd=AfxGetMainWnd();
pWnd->SetWindowPos(&CWnd::wndTopMost,0,0,100,100,0);
system
|
|
|
|
|
It works!! Thank you so much for a complete and effective answer. I did not know how to get a pointer or handle to my current window.
Now one more question, is there a way to keep my window in focus or active after starting Excel. When Excel starts Excel has the focus or is the active window, I would like my window to stay in focus or active.
Thanks again
|
|
|
|
|