Search This Blog

Showing posts with label VCPP. Show all posts
Showing posts with label VCPP. Show all posts

Wednesday, February 20, 2013

How to Automate Button OR Check box click?

We can automate command button click or check box of another running  application using the following sample code.

To automate, first we need the window handle of the application that we need to automate. We can get the handle by using FindWindow() API.


struct stUserInterFace
{
HWND handle;
LPCTSTR lpCaption;
};



BOOL CALLBACK GetAllButtons(HWND handle,LPARAM lpParam)
{
    stUserInterFace *ptrStUI=NULL;
    ptrStUI=(stUserInterFace*)lpParam;
    HWND hwndBtn=ptrStUI->handle;

    TCHAR    szClassName[128];
    GetClassName(handle,(LPSTR)&szClassName,sizeof(szClassName));

    if (_tcscmp(szClassName,_T("ThunderRT6CommandButton")) == 0 ||_tcscmp(szClassName,_T("Button")) == 0 )
    {
        TCHAR szCaption[128];
        GetWindowText(handle,(LPSTR)&szCaption,sizeof(szCaption));

        if (_tcscmp(szCaption,ptrStUI->lpCaption) == 0)
        {
            ptrStUI->handle = handle;
            return FALSE; // no more child windows
        }
    }
return TRUE;
}


BOOL ClickButton(HWND hWnd,LPCTSTR lpButtonCaption)
{
    BOOL bRet=FALSE;
    HWND    hwndBtn=NULL;

    stUserInterFace *ptrUI=new stUserInterFace;
    ptrUI->lpCaption=lpButtonCaption;
    
    EnumChildWindows(hWnd,GetAllButtons,(LPARAM)ptrUI);
    if (ptrUI->handle != NULL) 
    {
        PostMessage(ptrUI->handle,BM_CLICK,0,0);    
        bRet=TRUE;
    }
    delete ptrUI;
    return bRet;
}
BOOL CheckBox(HWND hWnd,LPCTSTR lpButtonCaption)
{
    BOOL bRet=FALSE;
    HWND    hwndBtn=NULL;

    stUserInterFace *ptrUI=new stUserInterFace;
    ptrUI->lpCaption=lpButtonCaption;
    
    EnumChildWindows(hWnd,GetAllButtons,(LPARAM)ptrUI);
    if (ptrUI->handle != NULL) 
    {
        PostMessage(ptrUI->handle,BM_SETCHECK,1,0);    
        bRet=TRUE;
    }
    delete ptrUI;
    return bRet;
}
 
Usage: 
        ShellExecute(NULL,NULL,"Test.EXE",NULL,NULL,SW_SHOW);
 Sleep(2000);
 HWND hwnd=::FindWindow(NULL,"Test");

 if(hwnd!=NULL)
 {
  ClickButton(hwnd,"TestButton");
 }

Thursday, January 3, 2013

How to update the icon changes when installing?

BMP files can be opened using MS Paint or Windows photo viewer, or with some other programs.
But Icon of that file, is the default program that associated with that extension. you can also change the default program to open files.

Even you can create your own file extension documents for your application. To update the icon of the files and to refresh the windows after default program changed or your application installation can be done using the following code.


SHChangeNotify(SHCNE_ASSOCCHANGED,0,NULL,NULL);

How to check whether internet connection is available?

Some times we need to check the internet connection before doing updates or online license check.

How to find  it? Use the following code.



#include "intshcut.h"
#pragma comment(lib,"url.lib")

if( !InetIsOffline( 0 ))
{
    // Internet Connection is available  
}

Friday, September 7, 2012

Chat Client Cheater


Your boss and your girlfriend can able to monitor you, using the chat client installed in your computer. If you didn’t press any key or move your mouse for long time then chat client status will automatically goes to “Away”. Using that, they can find, when you are coming to or leaving the office and how much time you are spending in cafeteria.

In most of companies, they have chat clients for internal communication.  Mostly they use Microsoft Lync or some other XMPP Chat client similar to G-Talk.  We can cheat them, by sending fake mouse movement.
I have created an application, which sends the fake mouse events. So I always switch off my monitor alone and go to cafeteria or leave office early. But if anyone can, switch on the monitor and use my computer. My company policy doesn’t allow me to leave my desk without locking my computer.  So if someone touches (Mouse move or Key Press) my computer it will automatically get locked.  You can also set a secret key to deactivate this application and not to get locked when you came back.


 Source Code in VC++ (MFC):




HHOOK g_hDesktopHook; // Also declared global
HHOOK g_hKeyboardHook; // Also declared global
BOOL g_bMouseEvent=TRUE;
CWinThread *g_MouseThread=NULL;
int g_nXPos=0;
int g_nYpos=0;

void SendMouseMoveMessage()
{
    INPUT ip;

    ip.type = INPUT_MOUSE;
    ip.mi.dx = 0;
    ip.mi.dy = 0;
    ip.mi.mouseData = 0;
    ip.mi.dwFlags = (MOUSEEVENTF_MOVE || MOUSEEVENTF_ABSOLUTE);
    ip.mi.time = 0;
    ip.mi.dwExtraInfo = GetMessageExtraInfo();
    SendInput(1, &ip, sizeof(ip));
}
UINT MouseMoveThread(LPVOID lpMsg)
{
    while(g_bMouseEvent)
    {
        SendMouseMoveMessage();
        Sleep(5000);
    }
    return 0;
}
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode < 0)
        return CallNextHookEx(g_hDesktopHook, nCode, wParam, lParam);
    KBDLLHOOKSTRUCT *msg = (KBDLLHOOKSTRUCT*)lParam;
    if(nCode == HC_ACTION)
    {

        if(wParam == WM_LBUTTONDOWN ||wParam == WM_RBUTTONDOWN ||wParam ==WM_MOUSEMOVE )
        {
            LPMOUSEHOOKSTRUCT lpMouse=NULL;
            lpMouse=(LPMOUSEHOOKSTRUCT)lParam;
            if(lpMouse)
            {
                if(g_nXPos==0 && g_nYpos==0)
                {
                    g_nXPos=lpMouse->pt.x;
                    g_nYpos=lpMouse->pt.y;
                }
                if(g_nXPos!=lpMouse->pt.x||    g_nYpos!=lpMouse->pt.y)
                {
                    g_bMouseEvent=FALSE;
                    //Lock Computer
                    LockWorkStation() ;
                    AfxGetMainWnd()->PostMessage(WM_CLOSE);
                }
            }
        }
        else if (  wParam == WM_KEYUP || wParam ==WM_KEYDOWN) 
        {
            if ( msg->vkCode =='U' ) 
            {
                //If U is pressed Remain Unlocked and Exit 
                //Else lock computer
                g_bMouseEvent=FALSE;
                AfxGetMainWnd()->PostMessage(WM_CLOSE);

            }
            else
            {
                g_bMouseEvent=FALSE;
                LockWorkStation() ;
                AfxGetMainWnd()->PostMessage(WM_CLOSE);
                
            }
        }   
    }

    return CallNextHookEx(g_hDesktopHook, nCode, wParam, lParam);
}
void CChatClietCheaterDlg::OnBnClickedStart()
{
    Sleep(2000);
    if((g_hDesktopHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0)) == NULL)
    {
    // hook failed...
    }
    
    if((g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, MouseProc, NULL, 0)) == NULL)
    {
        //  hook failed....
    }
    g_MouseThread=AfxBeginThread(MouseMoveThread,NULL);
    
}

void CChatClietCheaterDlg::OnDestroy()
{
    CDialogEx::OnDestroy();
    g_bMouseEvent=FALSE;
    if(g_hDesktopHook)
        UnhookWindowsHookEx(g_hDesktopHook);

    WaitForSingleObject(g_MouseThread->m_hThread,5000);
}
 
Update: 
 
I created it as a software application. for details please visit 
http://mykodetips.blogspot.com/2013/02/chat-client-cheater-software.html