Advertisement
Guest User

Untitled

a guest
Dec 31st, 2010
500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.98 KB | None | 0 0
  1. #include "AutoClicker.h"
  2.  
  3. CRITICAL_SECTION CriticalSection = {0};
  4.  
  5. HWND  hwndSelected        = NULL;
  6. lpWnd hwndNodeHead        = NULL;
  7. lpWnd hwndNodeTempHead    = NULL;
  8. lpWnd hwndNodeTempCurrent = NULL;
  9.  
  10. BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam ) {
  11.   lpWnd newNode = InitNode( hwnd );
  12.  
  13.   if( hwndNodeTempHead == NULL ) {
  14.     hwndNodeTempHead    = newNode;
  15.     hwndNodeTempCurrent = newNode;
  16.   } else {
  17.     AddNode( hwndNodeTempCurrent, newNode );
  18.     hwndNodeTempCurrent = newNode;
  19.   }
  20.  
  21.   return true;
  22. }
  23.  
  24. void InitWindowList( HWND hwndDlg, int nIDDlgItem ) {
  25.   LVCOLUMN lvc;
  26.   HWND hwndList = GetDlgItem( hwndDlg, nIDDlgItem );
  27.   DWORD dwStyle = SendMessage( hwndList, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0 );
  28.   SendMessage( hwndList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle | LVS_EX_FULLROWSELECT );
  29.  
  30.   lvc.fmt      = LVCFMT_LEFT;
  31.   lvc.mask     = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
  32.  
  33.   for( int iCol = 0; iCol < 3; iCol++ ) {
  34.     lvc.iSubItem = iCol;
  35.  
  36.     switch( iCol ) {
  37.       case 0:
  38.         lvc.cx      = 70;
  39.         lvc.pszText = _T("Handle");
  40.         break;
  41.       case 1:
  42.         lvc.cx      = 100;
  43.         lvc.pszText = _T("Window Name");
  44.         break;
  45.       case 2:
  46.         lvc.pszText = _T("Class Name");
  47.         break;
  48.     }
  49.  
  50.     ListView_InsertColumn( hwndList, iCol, &lvc );
  51.   }
  52.  
  53.   ListView_SetColumnWidth( hwndList, 2, LVSCW_AUTOSIZE_USEHEADER );
  54. }
  55.  
  56. void RedrawList( HWND hwndDlg, int nIDDlgItem, lpWnd hwndNode ) {
  57.   TCHAR lpClassName[64]  = {0};
  58.   TCHAR lpWindowName[64] = {0};
  59.   HWND  hwndList         = GetDlgItem( hwndDlg, nIDDlgItem );
  60.   lpWnd hwndNodeCurrent  = hwndNode;
  61.  
  62.   ListView_DeleteAllItems( hwndList );
  63.   TCHAR lpCurrentHandle[64] = {0};
  64.  
  65.   LVITEM lvi   = {0};
  66.   lvi.mask     = LVIF_TEXT;
  67.   lvi.iItem    = 0;
  68.   lvi.iSubItem = 0;
  69.  
  70.   while( hwndNodeCurrent != NULL ) {
  71.     _stprintf_s( lpCurrentHandle, _countof( lpCurrentHandle ),
  72.         _T("0x%08X"), hwndNodeCurrent -> hwnd );
  73.     lvi.pszText = lpCurrentHandle;
  74.     ListView_InsertItem( hwndList, &lvi );
  75.    
  76.     GetWindowText( hwndNodeCurrent -> hwnd, lpWindowName, _countof( lpWindowName ) );
  77.     GetClassName( hwndNodeCurrent -> hwnd, lpClassName, _countof( lpClassName ) );
  78.     ListView_SetItemText( hwndList, lvi.iItem, 1, lpWindowName );
  79.     ListView_SetItemText( hwndList, lvi.iItem, 2, lpClassName );
  80.  
  81.     lvi.iItem++;
  82.     hwndNodeCurrent = hwndNodeCurrent -> next;
  83.   }
  84. }
  85.  
  86. INT_PTR CALLBACK WindowEnumProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
  87.   switch( uMsg ) {
  88.     case WM_INITDIALOG:
  89.       SetWindowLong( hwndDlg, GWL_EXSTYLE, GetWindowLong( hwndDlg, GWL_EXSTYLE ) | WS_EX_LAYERED );
  90.       SetLayeredWindowAttributes( hwndDlg, NULL, 230, LWA_ALPHA );
  91.  
  92.       InitWindowList( hwndDlg, IDC_WINDOWLIST );
  93.       InitializeCriticalSectionAndSpinCount( &CriticalSection, 0x80000400 );
  94.       SendMessage( hwndDlg, WM_COMMAND, MAKEWPARAM( IDC_REFRESH, NULL ), NULL );
  95.       break;
  96.     case WM_COMMAND: {
  97.       switch( LOWORD( wParam ) ) {
  98.         case IDC_REFRESH:
  99.           EnumWindows( EnumWindowsProc, NULL );
  100.  
  101.           if( !CompareLinkedLists( hwndNodeHead, hwndNodeTempHead ) ) {
  102.             RedrawList( hwndDlg, IDC_WINDOWLIST, hwndNodeTempHead );
  103.           }
  104.  
  105.           EnterCriticalSection( &CriticalSection );
  106.          
  107.           if( hwndNodeHead != NULL ) {
  108.             DeleteAllNodes( hwndNodeHead );
  109.           }
  110.  
  111.           hwndNodeHead = hwndNodeTempHead;
  112.           LeaveCriticalSection( &CriticalSection );
  113.  
  114.           hwndNodeTempHead    = NULL;
  115.           hwndNodeTempCurrent = NULL;
  116.           break;
  117.         case IDC_CANCEL:
  118.           SendMessage( hwndDlg, WM_CLOSE, NULL, NULL );
  119.           break;
  120.         default:
  121.           return false;
  122.       }
  123.  
  124.       break;
  125.     }
  126.     case WM_NOTIFY: {
  127.       switch( ( ( LPNMHDR )lParam ) -> code ) {
  128.         case NM_DBLCLK: {
  129.           switch( ( ( LPNMHDR )lParam ) -> idFrom ) {
  130.             case IDC_WINDOWLIST: {
  131.               lpWnd selectedNode = GetNode( hwndNodeHead,
  132.                   ( ( LPNMITEMACTIVATE )lParam ) -> iItem );
  133.              
  134.               if( selectedNode == NULL ) {
  135.                 MessageBox( hwndDlg, _T("Selected node out of range"), NULL, MB_OK );
  136.               } else {
  137.                 hwndSelected = selectedNode -> hwnd;
  138.  
  139.                 if( !IsWindow( hwndSelected ) ) {
  140.                   MessageBox( hwndDlg, _T("Window handle no longer valid"), NULL, MB_OK );
  141.                   hwndSelected = NULL;
  142.                 } else {
  143.                   SendMessage( hwndDlg, WM_CLOSE, NULL, NULL );
  144.                 }
  145.               }
  146.               break;
  147.             }
  148.             default:
  149.               return false;
  150.           }
  151.  
  152.           break;
  153.         }
  154.         default:
  155.           return false;
  156.       }
  157.  
  158.       break;
  159.     }
  160.     case WM_CLOSE:
  161.       DeleteCriticalSection( &CriticalSection );
  162.       EndDialog( hwndDlg, ( INT_PTR )hwndSelected );
  163.       break;
  164.     default:
  165.       return false;
  166.   }
  167.  
  168.   return true;
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement