|
Thank you for your reply.
I've eventually tested the hook in a small console application first. The DLL is getting loaded properly, the hook works ok.
Concerning the service, I allow it to interact with desktop and use the following code to switch the desktop before setting hook:
HDESK hUserDesktop = ::OpenInputDesktop( DF_ALLOWOTHERACCOUNTHOOK, FALSE, GENERIC_ALL );
::SwitchDesktop( hUserDesktop );
HHOOK hHook = ::SetWindowsHookEx( WH_KEYBOARD, prHook, bfInst, 0 );
All of these function return successful results. I'm aware I'm missing some important stuff to do.
|
|
|
|
|
Are you sure the hook is really not getting executed? You cannot set a breakpoint in the debugger with the service loaded and expect to see it fire from within the service, because the hook is getting loaded into the target processes, and it will fire under the context of those processes.
If you do something like using OutputDebugString(...) to write out a string to the debugger (do not use TRACE/TRACEx(...) ). Using the console application under the debugger, you should be able to see the output from that function if it is being fired.
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
Thank you for your reply!
I use ::OutputDebugStringA() to enable debug output and DbgView from sysinternals to capture this output. This pair works, as I receive debug output during serivce initialization. But still no output from hook.
|
|
|
|
|
Sorry - no other idea other than that the hook is just not getting across to the different desktop...
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
I've got it at last! The problem was with security settings of some of synchronization objects. Being created withing a service, they had their owner set to SYSTEM and none of user code could ever open them (although, this code works if it is run from a test application under my account)
Anyway, thank you for your ideas!
|
|
|
|
|
i am working in MFC. i have taken a file name with file path from user how to check whether that file exist or not
prashant jain
|
|
|
|
|
BOOL PathFileExists(LPCTSTR pszPath);
Regards,
FarPointer
Blog:FARPOINTER
|
|
|
|
|
thanx
prashant jain malviya national institute of technology
|
|
|
|
|
See
WIN32_FIND_DATA m_data;
HANDLE hFile;
hFile=FindFirstFile(filename,&m_data)
if(hFile==INVALID_HANDLE_VALUE)
else
FindClose(hFile);
</code>
or see _access
whitesky
|
|
|
|
|
hi everyone,
can anyone give me information regarding peer to peer file sharing
Regards
venu
|
|
|
|
|
Im not sure seeHere[^] maybe it is some helpful to you
whitesky
|
|
|
|
|
Does anyone know the correct grammar for allocating a multidimensional array on the heap?
I have tried:
CHAR **Z = new CHAR[15][10];
CHAR *Z = new CHAR[15][10];
Upon further investigation is appears that C++ treats multidimensional arrays as distinct data types. This means that the problem in the above examples is that it can't assign a multidimensional array TYPE to any of the pointer types I have tried.
It has no problem, however translating between simple pointer types and SINGLE dimensional arrays. I suppose that the language is required to keep track of the number of elements in each dimension, so that it can perform the proper indexing when you supply subscript operators. So this must be the reason that the arrays are incompatible with simple pointer types, because simple pointer types do not carry such information around with them.
|
|
|
|
|
I think if you declare a pointer in this manner:
CHAR (*Z3)[10];
then you can assign any bi-direction array having 10 columns:
Z3 = new CHAR[15][10];
. . .
Z3 = new CHAR[50][10];
. . .
CHAR tab[30][10];
Z3 = tab;
It is easy to access an element:
I = Z3[2][7];
This approach can be used for multi-dimensional arrays too:
CHAR (*Z4)[10][30] = new CHAR[15][10][30];
int k = Z4[1][2][3];
Since for indexing the compiler does not need to know the first size of the arrays, it can be a variable:
Z4 = new CHAR[m][10][30];
|
|
|
|
|
Hi, it works! Thank you so much.
I wish I knew the theory behind why the declaration has a different meaning if you put the pointer name inside parenthesis.
Thanks again!
|
|
|
|
|
SeeHere[^]I think its good
whitesky
|
|
|
|
|
Thanks, Mr. Whitesky, that is a very useful article!
|
|
|
|
|
can any one tell me the ftp link library in VC++
|
|
|
|
|
creation of XML in vc++.
plz send me as early as possible
|
|
|
|
|
printf() will do the job.
0 bottles of beer on the wall, 0 bottles of beer, you take 1 down, pass it around, 4294967295 bottles of beer on the wall.
Awasu 2.2.2 [^]: A free RSS/Atom feed reader with support for Code Project.
|
|
|
|
|
I didn't get that answer so plz send me clearly. In my program iam created XML file I want to add the files to that.plz any one give me the solution
|
|
|
|
|
This is Brute force method in which you can use the Format of CString to put the value in the text using the xml format and save it in .xml format .
fstream m_fXmlWrite;
sAddHeader.Format(""<"?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"); m_fXmlWrite<<sAddHeader<<endl;
Regards,
FarPointer
Blog:FARPOINTER
|
|
|
|
|
Hey, I'm in a good mood tonight
void
main()
{
printf( "<foo>\n") ;
printf( " <bar> Eazy if ur l33t!!! </bar>\n") ;
printf( "</foo>\n") ;
}
0 bottles of beer on the wall, 0 bottles of beer, you take 1 down, pass it around, 4294967295 bottles of beer on the wall.
Awasu 2.2.2 [^]: A free RSS/Atom feed reader with support for Code Project.
|
|
|
|
|
hello every1!
I am creating a simple static library file. I hava a string table in a library. These is a function getString which retrieves string from a string-table.
Now i have to use LoadString function in getString.
int LoadString( HINSTANCE hInstance,<br />
UINT uID,<br />
LPTSTR lpBuffer,<br />
int nBufferMax<br />
);
Then in this case what should be the first argument for the LoadString(). n how should i get this hInstance??
Thanks in advance!
|
|
|
|
|
hi,
use AfxGetInstanceHandle() to get the first value of LoadString()
chawda
|
|
|
|
|
In addition, note that instead of ::LoadString you can use the similar member of CString class. In this case is easier to load strings of any length.
-- modified at 5:57 Tuesday 27th June, 2006
|
|
|
|