|
Rickard Andersson wrote:
I never learn to use that!
So now's your chance.
But I seriously thought when you said C, you meant C. What else would I think ?
Christian
No offense, but I don't really want to encourage the creation of another VB developer.
- Larry Antram 22 Oct 2002
C# will attract all comers, where VB is for IT Journalists and managers - Michael
P Butler 05-12-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not
as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
Christian Graus wrote:
What else would I think ?
You would think C!
I will update my socket class library to usec std::string instead of char* to make it more objectoriented.
Mary christmas every one!
Rickard Andersson@Suza Computing
C# and C++ programmer from SWEDEN!
UIN: 50302279
E-Mail: nikado@pc.nu
Speciality: I love C#, ASP.NET and C++!
|
|
|
|
|
_splitpath ?
Cheers,
Fredrik
"Felix qui potuit rerum cognoscere causas."
|
|
|
|
|
using namespace std;
string string strExtension;
string strFileName = "myfile.jpg";
size_t nLastDotIndex = strFileName.find_last_of('.');
if(npos == nLastDotIndex)
cout << "Error! No extension" << endl;
else
strExtension = strFileName.substr(nLastDotIndex + 1);
--
Only in a world this sh*tty could you even try to say these were innocent people and keep a straight face.
|
|
|
|
|
I agree, use _splitpath. You may not want it, but it will give you the drive, dir, filename, and ext. It is only one line of code...
|
|
|
|
|
hi guys, I want to be able to detect mouse click on the desktop(not just any particular application window) , how do I do that? any sample code/suggestion is appreciated
|
|
|
|
|
SetWindowsHookEx() with WH_MOUSE is probably what you want.
he he he. I like it in the kitchen! - Marc Clifton (on taking the heat when being flamed)
Awasu v0.4a[^]: A free RSS reader with support for Code Project.
|
|
|
|
|
would you elaborate on it a little? sorry I'm a bit new to windows programming
thanks
|
|
|
|
|
Have a look in the MSDN.
You call SetWindowsHookEx() with a pointer to a function that you supply. Windows will then call this function every time something mouse-related happens, giving you the HWND that the event is for, where the mouse is on screen, etc.
Since there may be more than one program listening for these mouse events, you need to make sure that you pass the event on, by calling CallNextHookEx().
he he he. I like it in the kitchen! - Marc Clifton (on taking the heat when being flamed)
Awasu v0.4a[^]: A free RSS reader with support for Code Project.
|
|
|
|
|
thanks for the pointer, now I still have some problem of getting it to work,
I have the following callback procedure that tries to show the mouse position
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lparam){
MOUSEHOOKSTRUCT* mousehook=(MOUSEHOOKSTRUCT*)lparam;
POINT p=mousehook->pt;
char temp[20];
sprintf(temp,"mouse position is %d %d",p.x,p.y);
MessageBox(hWnd,temp,"",MB_OK);
return 0;
}
and I did SetWindowsHookEx(WH_MOUSE, 0,hInstance,0); but MouseProc was never been called for some reason, what did I do wrong, the following is my code in detail:
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int Cmd) {
MSG msg;
// Setup and register the window class;
WNDCLASS wClass;
wClass.style =CS_HREDRAW|CS_VREDRAW;
wClass.lpfnWndProc =WindowProcedure; // callback-function;
wClass.cbClsExtra =0;
wClass.cbWndExtra =0;
wClass.hInstance =hInstance;
wClass.hIcon =LoadIcon(hInstance,IDI_APPLICATION);
wClass.hCursor =LoadCursor(NULL,IDC_ARROW);
wClass.hbrBackground =(HBRUSH)(COLOR_WINDOW+3);
wClass.lpszMenuName =NULL;
wClass.lpszClassName =WINDOWNAME;
RegisterClass(&wClass);
// Create the window and store the handle;
hWnd = CreateWindow(WINDOWNAME, // class name;
WINDOWNAME, // window name;
WS_OVERLAPPEDWINDOW, // window style;
CW_USEDEFAULT, CW_USEDEFAULT, // starting position (x,y);
320, 240, // width and height;
NULL, // parent handle;
NULL, // menu handle;
hInstance, // instance handle;
NULL); // other parameters;
// Check if window creation failed; otherwise show and update;
if(hWnd==NULL) return FALSE;
else {
ShowWindow (hWnd, Cmd);
UpdateWindow(hWnd);
}
HOOKPROC hookproc;
//static HINSTANCE hinstDLL;
static HHOOK hhook;
SetWindowsHookEx(WH_MOUSE, 0,hInstance,0);
// Message loop;
while(GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
|
|
|
|
|
I was actually playing with this stuff the other day and couldn't get it work like this either I had to pass in the current thread ID when setting the hook i.e. call GetCurrentThreadId(). So it should work OK as long as everything is in the one thread, which it is for me. If you really want a global hook or for this work for multiple threads, you're on your own!
BTW, I wouldn't call MessageBox() inside your hook procedure. This function is going to get called a *lot*, from deep inside Windows, and it's probably not going to like you trying to display a dialog box. Log it to a file instead,
he he he. I like it in the kitchen! - Marc Clifton (on taking the heat when being flamed)
Awasu v0.4a[^]: A free RSS reader with support for Code Project.
|
|
|
|
|
thanks, that worked, but now I have a seg fault due to the HHOOK i m passing to SetWIndowsHookEx, the following is what I have, I simply create a new HHOOK, is this wrong?
what is the HHOOK for? I read the msdn doc on it but still kind of fuzzy, thanks.
static HHOOK hhook;
SetWindowsHookEx(WH_MOUSE, hookproc,hInstance,GetCurrentThreadId());
|
|
|
|
|
sorry a correct to my previous post, when I say HHOOK, I meant HOOKPROC
|
|
|
|
|
Go back and read my original post. The crash is probably happening because you're not calling CallNextHookEx().
he he he. I like it in the kitchen! - Marc Clifton (on taking the heat when being flamed)
Awasu v0.4a[^]: A free RSS reader with support for Code Project.
|
|
|
|
|
I put CallNextHookEx(0,nCode,wParam,lparam); in my callback function MouseProc, but it still crashed. Actually how do I obtain the first argument to CallNextBookEx inside MouseProc, the first argument is a handle to the current hook?
thanks
|
|
|
|
|
Since there may be more than 1 program wanting to receive these events, Windows keeps a list of everyone who is interested in receiving them. When you register for these events by calling SetWindowsHookEx(), the return value is a handle for the next person in the list. This is what you pass into CallNextHookEx() so that Windows can let him know about the event as well. He is then responsible for passing it on to the next guy and so on until everyone has received the event.
he he he. I like it in the kitchen! - Marc Clifton (on taking the heat when being flamed)
Awasu v0.4a[^]: A free RSS reader with support for Code Project.
|
|
|
|
|
yes, my question was how to obtain the HOOKPROC that points to the current hookproc in my callback function in order to pass it to CallNextHookEx
CallNextHookEx(currentHookProc,nCode,wParam,lparam);
thanks
|
|
|
|
|
If you call SetCapture, you'll get notification of the next mouse click and your window will recieve all mouse move messages until that click occurs.
Christian
No offense, but I don't really want to encourage the creation of another VB developer.
- Larry Antram 22 Oct 2002
C# will attract all comers, where VB is for IT Journalists and managers - Michael
P Butler 05-12-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not
as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
if I select from the inserted items(Properties->Data)
the MessageBox() shows the selected item
but when I enter text(item) to the EditBox of the Combo at run time (I want it shown on MessageBox too), the MessageBox is empty. Help me with this please.
the piece of code is:
void CComboView::OnButton1()
{
// TODO: Add your control notification handler code here
int x;
if (x=m_ComboCtrl.GetCurSel() == CB_ERR)
{
m_ComboCtrl.GetWindowText((LPSTR)(LPCSTR) m_Combostr, x);
}
else
{
m_ComboCtrl.GetLBText(x, m_Combostr);
}
MessageBox(m_Combostr, "Simple");
}
|
|
|
|
|
Have you try this?
void CComboView::OnButton1() <br />
{<br />
CString strText;<br />
<br />
m_ComboCtrl.GetWindowText(strText);<br />
if(!strText.IsEmpty())<br />
MessageBox(strText, "Simple");<br />
}
HTH,
K.
One small village of indomitable geeks still holds out against the invaders. And life is not easy for the managers legionaries who garrison the fortified camps of Microsoftum, Javum, Ceplumplum and Vebasum
|
|
|
|
|
hi,
I'm developing ATL ActiveX DLL that used by ASP/VBScript client.
This server uses VARIANT as a parameter input :
HRESULT UseThis([in] VARIANT StringParam, [out, retval] long *ret);<br />
<br />
STDMETHODIMP CObj::UseThis(VARIANT StringParam, long *ret)<br />
{<br />
*ret = 1;<br />
<br />
if((StringParam.vt & VT_ARRAY) && (StringParam.vt & VT_BSTR))<br />
{ <br />
SAFEARRAY *pString = StringParam.parray;<br />
BSTR *bstrArray;<br />
CComBSTR bstrRet;<br />
SafeArrayAccessData(pString, (void**)&bstrArray);<br />
<br />
for(ULONG i = 0; i < pString->rgsabound->cElements; i++)<br />
{<br />
bstrRet = bstrArray[i]; <br />
}<br />
SafeArrayUnaccessData(pString);<br />
SafeArrayDestroy(pString);<br />
<br />
*ret = 0;<br />
}<br />
<br />
return S_OK;<br />
}
When I try to use the function from VB client it OK, but when used from ASP/VBScript client it just FAILED !
VBscript client running on IIS:
Dim obj<br />
Dim ret<br />
Dim strParam(2)<br />
<br />
Set obj = Server.CreateObject("MyATL.Obj") <br />
<br />
strParam(0) = "We"<br />
strParam(1) = "love"<br />
strParam(2) = "COM" <br />
<br />
ret = obj.UseThis(strParam)<br />
<br />
Response.Write "Result is : " & ret<br />
<br />
Set obj = Nothing
Thank u very very much in advance . Any advice, help and suggestions strongly aprreciated.
Regards.
|
|
|
|
|
My initial suspicion is that if it runs fine in VB, but not in a script, that the problem might actually be in the script, not the COM server. I have had headaches debugging scripts, so are you sure execution is reaching obj.UseThis(strParam) without any errors?
|
|
|
|
|
hi,
thanx for ur reply.
I'm very sure it reach obj.UseThis(strParam) but with error.
In ASP I cannot declare variable like Dim strParam(2) as String .
regards.
|
|
|
|
|
Ah yes, a script would give you a SafeArray of Variants which contain BSTRs, not simply an array of BSTRs as with VB. Sorry I didn't notice that.
|
|
|
|
|
Here is my situation, I am using GetDiskFreeSpaceEx to grab drive information from mulitple servers across the network. When for some reason or another that the server is down/unavailable, it can take GetDiskFreeSpaceEx up to 60-180 seconds to "TimeOut". Does anyone know how to change the time out value or how I should go about implementing some timeout code?
Environment VC6
Platform writing for: NT4, W2K, XP
Thanks in advance.
|
|
|
|
|