|
Hi, thanks for the suggestion, but the DoDragDrop is only called on the begining of the drag and drop process. And i will never known where is the source and if is a move or copy operation.
I tried to hook the SHFileOperationW and i can get all the things that i needed, but the problem is that the FO_DELETE operation allways crash the explorer process, even if i don't have any code inside my hook function implementation:
int MySHFileOperation(LPSHFILEOPSTRUCT lpFileOp)
{
VirtualProtect((LPVOID)pOrigSHFOPAddress, SIZE, myProtect, NULL); //ReadWrite again
memcpy(pOrigSHFOPAddress, oldBytes, SIZE); //Unhook API
int nRes = SHFileOperation(lpFileOp);
memcpy(pOrigSHFOPAddress, JMP, SIZE); //Rehook API
VirtualProtect((LPVOID)pOrigSHFOPAddress, SIZE, oldProtect, NULL); //Normal setts
return nRes;
}
PS: i used the technique described by AlexAbramov in "API Hooking with MS Detours" without the detours
I think i will try another approach for my problem... there are a few problems with the hook approach, one is that the SHFileOperation is deprecated in vista, and another i think that this approach is a little unorthodox..
So i will try to find another way of doing this, if anyone has some better suggestion please feel free to post it
Thanks
Nuno
|
|
|
|
|
Hi everybody
in my application i open a view to display the "products information"
In this view i have a TabControl within 3 Views.
Each of these Views has more than 100 controls (labels with textboxes)
So over 350 controls totally.
If i open this window i freeze the Desktop-Screen
and at the last execution point of my code, i release the Screen and redraw.
I measured the elapsed time for all the work to show this window.
It takes 0,3 seconds.
If i remove all controls from the views, i get a time less than 0,1 seconds.
Is there a possibility to speed up the traitment ( < 0,3seconds )
If not, why does it take exactly so long?
Big thanks for any information.
|
|
|
|
|
You could try to put the 100 controls into a dialog and add the dialog into the view instead of the controls.
«_Superman_»
|
|
|
|
|
I dont exactly know what you mean.
But i use a CFormView as View.
There is a Ressource Dialog with the textboxes.
So i create the view with the dialog ressource.
Thanks for your help
|
|
|
|
|
I'm not sure if this will improve the speed, but what I'm saying is that, instead of placing the 100 odd controls in the form view directly, place them in a new dialog and then place this dialog in the form view as a child dialog. The child dialog will need its border set to none.
«_Superman_»
|
|
|
|
|
Hi,
Is there any method to create a file of desired size whenever I create a file using CreateFile().
|
|
|
|
|
SetEndOfFile can be used to extend or truncate a file.
«_Superman_»
|
|
|
|
|
Hi,
I am using IShellFolder to create tree like explorer. I got the ITEMIDLIST
for all item but I am confused to add to ITEMIDLIST list into one. because Desktop is has empty ITEMIDLIST (Root Folder) then how to add Child (say My computer )ITEMIDLIST to parent(Desktop) ITEMIDLIST ?
|
|
|
|
|
This article[^] has code for a 'concatenate ITEMIDLISTs' function.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi All,
I am using an ActiveX control for Thermal Printing in my website.... It is working fine for most of the client but now it is causig am unarthodox problem....
Once the activex is installed... it prints the label for first time only but when I issues the command for second time... the website hangs...
Closing the browser and logging again solve the purpose but only for the first print command... for second print command it hangs.
please sugest what is causing the problem???
Thanks in advance,
Vishav
ce
|
|
|
|
|
Hi there.
I want to connect to SQL Server 2008 through my C++ code.
As of now, I am doing the same as below
HRESULT hr = S_OK;
hr = m_pConnection->Open(L"DRIVER={sql server};SERVER=Server_Name;Database=DB_Name;" L"UID=UserID; PWD=Password;", L"", L"", adOpenUnspecified);
But above call throws an exception.
FYI, I am using msado15.dll to establish the connection.
I have also tried...
hr = m_pConnection->Open(L"Driver={SQL Server};Server=Server_Name;Database=DB_Name;", L"UID=UserID;", L"PWD=Password;", adOpenUnspecified);
But I am at the same stage.
Please let me know, if I need to implement the same by any other way.
Thanks
PanB
|
|
|
|
|
Hows about you mention what exception gets thrown - that usually gives you information about what error's occurred. Also, what's the type of m_pConnection is?
Oh - and have you verified you can connect to the database through some other utility?
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Thanks for the reply buddy.
m_pConnection is of _ConnectionPtr type. I am able to test the connection using Visual Studio's Server Explorer option.
I am getting an error "Invalid Connection"
Any pointers on this.
Just a question...Do you think that there is no problem with my connection string or I need some modification do be done?
PanB
|
|
|
|
|
May be very stupid questions but
1. Are you calling CoInitialize?
2. How did you create instance of m_pConnection?
3. Did you verify that m_pConnection is not null?
4. Did you try to catch the exception using _com_error catch block to get the exact description of the problem?
Regards,
Sandip.
|
|
|
|
|
Anyway, Its always good to ask questions.
1. Are you calling CoInitialize?
PanB> Yes, I have a call to ::CoInitialize(NULL); in the constructor itself.
2. How did you create instance of m_pConnection?
PanB> Its a public member in my class.
_ConnectionPtr m_pConnection;
and in the CDataAccessManager::OpenDB() fucntions, I am initializing the same.
3. Did you verify that m_pConnection is not null?
PanB> I think, that is what you are talking about. In the CTor... I am initializing and calling CreateInstance as below...
m_pConnection = NULL;
m_strConnection = _T("");
m_pConnection.CreateInstance(__uuidof(Connection));
Am I suppose to first allocate memory for the same? please sugegst.
4. Did you try to catch the exception using _com_error catch block to get the exact description of the problem?
PanB> Yes, I have something like...
try
{
hr = m_pConnection->Open(L"Driver={SQL Server};Server=Server_Name;Database=Database_Name;", L"UID=UserName;", L"PWD=Password;", adOpenUnspecified);
return hr == S_OK;
}
catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
}
How can I get more information regarding the exception? Please sugegst that as well.
Thanks
PanB
|
|
|
|
|
As an exception I am getting...
{E_FAIL}
m_hresult E_FAIL
m_perrinfo 0x02228530
m_pszMsg 0x00000000 <bad ptr="">
Above info. may help you...
|
|
|
|
|
PankajB wrote: catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
}
instead you can try
e.Description()
it returns _bstr_t that might explain what is causing exception.
Regards,
Sandip.
|
|
|
|
|
PankajB wrote: I am able to test the connection using Visual Studio's Server Explorer option.
If server explorer is able to connect using your connection string, that implies your connection string is valid.
PankajB wrote: m_pConnection is of _ConnectionPtr type
PankajB wrote: I am getting an error "Invalid Connection"
Looking at this article[^], you need to create the connection like this before opening it:
_ConnectionPtr m_pConn;
m_pConn.CreateInstance (__uuidof(Connection));
Maybe that's missing?
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
I already have that in the CTor Stuart.
|
|
|
|
|
Let me share full code with you.
ado2.h
#if !defined(AFX_ADO2_H_INCLUDED_)
#define AFX_ADO2_H_INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include <afx.h>
#include <afxdisp.h>
#include <math.h>
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
CString IntToStr(int nVal);
CString LongToStr(long lVal);
CString ULongToStr(unsigned long ulVal);
CString DblToStr(double dblVal, int ndigits = 20);
CString DblToStr(float fltVal);
class CDataAccessManager
{
public:
CDataAccessManager()
{
::CoInitialize(NULL);
m_pConnection = NULL;
m_strConnection = _T("");
m_pConnection.CreateInstance(__uuidof(Connection));
}
virtual ~CDataAccessManager()
{
CloseDB();
m_pConnection.Release();
m_pConnection = NULL;
m_strConnection = _T("");
::CoUninitialize();
}
BOOL OpenDB(LPCTSTR lpstrConnection = _T(""), LPCTSTR lpstrUserID = _T(""), LPCTSTR lpstrPassword = _T(""));
_ConnectionPtr GetActiveConnection()
{return m_pConnection;};
BOOL Execute(LPCTSTR lpstrExec);
BOOL IsOpenDB();
void CloseDB();
void SetConnectionString(LPCTSTR lpstrConnection)
{m_strConnection = lpstrConnection;};
CString GetConnectionString()
{return m_strConnection;};
protected:
void dump_com_error(_com_error &e);
public:
_ConnectionPtr m_pConnection;
protected:
CString m_strConnection;
};
#endif //AFX_ADO2_H_INCLUDED_
ado2.cpp
#include "ado2.h"
CString IntToStr(int nVal)
{
CString strRet;
char buff[10];
itoa(nVal, buff, 10);
strRet = buff;
return strRet;
}
CString LongToStr(long lVal)
{
CString strRet;
char buff[20];
ltoa(lVal, buff, 10);
strRet = buff;
return strRet;
}
CString ULongToStr(unsigned long ulVal)
{
CString strRet;
char buff[20];
ultoa(ulVal, buff, 10);
strRet = buff;
return strRet;
}
CString DblToStr(double dblVal, int ndigits)
{
CString strRet;
char buff[50];
_gcvt(dblVal, ndigits, buff);
strRet = buff;
return strRet;
}
CString DblToStr(float fltVal)
{
CString strRet;
char buff[50];
_gcvt(fltVal, 10, buff);
strRet = buff;
return strRet;
}
BOOL CDataAccessManager::OpenDB(LPCTSTR lpstrConnection, LPCTSTR lpstrUserID, LPCTSTR lpstrPassword)
{
HRESULT hr = S_OK;
if(IsOpenDB())
CloseDB();
if(lstrcmp(lpstrConnection, _T("")) != 0)
m_strConnection = lpstrConnection;
ASSERT(!m_strConnection.IsEmpty());
try
{
hr = m_pConnection->Open(L"DRIVER={sql server};SERVER=ASHISH-DB\ULXDBSERVER;Database=eDiscoveryDEV;" L"UID=edm; PWD=Password;", L"", L"", adOpenUnspecified);
return hr == S_OK;
}
catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
}
}
BOOL CDataAccessManager::Execute(LPCTSTR lpstrExec)
{
ASSERT(m_pConnection != NULL);
ASSERT(lstrcmp(lpstrExec, _T("")) != 0);
_variant_t vRecords;
try
{
m_pConnection->CursorLocation = adUseClient;
m_pConnection->Execute(_bstr_t(lpstrExec), &vRecords, adExecuteNoRecords);
return TRUE;
}
catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
}
}
BOOL CDataAccessManager::IsOpenDB()
{
if(m_pConnection )
return m_pConnection->GetState() != adStateClosed;
return FALSE;
}
void CDataAccessManager::CloseDB()
{
if(IsOpenDB())
m_pConnection->Close();
}
void CDataAccessManager::dump_com_error(_com_error &e)
{
}
DAL.cpp
#include "stdafx.h"
#include "ado2.h"
int _tmain(int argc, _TCHAR* argv[])
{
CDataAccessManager objDAL;
bool bSuccess = objDAL.OpenDB(_T("DRIVER={sql server};SERVER=ASHISH-DB\ULXDBSERVER;Database=LexCoreDB"), _T("edm"), _T("Password"));
return 0;
}
|
|
|
|
|
Any updates? Please provide some pointers to me so that I can proceed further. Thanks.
|
|
|
|
|
Hi all,
I have made a dialog based application in vc2008, i want to enable some keyboard shortcuts in my application like i have displayed a message box on button click event and if i press b that same dialog box should be displayed....
how can i do this???
Thanks in advance
|
|
|
|
|
To handle key pressings in dialogs, one should override PreTranslateMessage. It's MSG argument has the necessary information about pressed keys.
--
Arman
|
|
|
|
|
Add the ampersand [&] symbol before the desired letter in the button caption. For e.g for &Click, if you press Alt + C will run the code for Click button.
|
|
|
|
|