Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "AutoClicker.h"
- CRITICAL_SECTION CriticalSection = {0};
- HWND hwndSelected = NULL;
- lpWnd hwndNodeHead = NULL;
- lpWnd hwndNodeTempHead = NULL;
- lpWnd hwndNodeTempCurrent = NULL;
- BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam ) {
- lpWnd newNode = InitNode( hwnd );
- if( hwndNodeTempHead == NULL ) {
- hwndNodeTempHead = newNode;
- hwndNodeTempCurrent = newNode;
- } else {
- AddNode( hwndNodeTempCurrent, newNode );
- hwndNodeTempCurrent = newNode;
- }
- return true;
- }
- void InitWindowList( HWND hwndDlg, int nIDDlgItem ) {
- LVCOLUMN lvc;
- HWND hwndList = GetDlgItem( hwndDlg, nIDDlgItem );
- DWORD dwStyle = SendMessage( hwndList, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0 );
- SendMessage( hwndList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle | LVS_EX_FULLROWSELECT );
- lvc.fmt = LVCFMT_LEFT;
- lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
- for( int iCol = 0; iCol < 3; iCol++ ) {
- lvc.iSubItem = iCol;
- switch( iCol ) {
- case 0:
- lvc.cx = 70;
- lvc.pszText = _T("Handle");
- break;
- case 1:
- lvc.cx = 100;
- lvc.pszText = _T("Window Name");
- break;
- case 2:
- lvc.pszText = _T("Class Name");
- break;
- }
- ListView_InsertColumn( hwndList, iCol, &lvc );
- }
- ListView_SetColumnWidth( hwndList, 2, LVSCW_AUTOSIZE_USEHEADER );
- }
- void RedrawList( HWND hwndDlg, int nIDDlgItem, lpWnd hwndNode ) {
- TCHAR lpClassName[64] = {0};
- TCHAR lpWindowName[64] = {0};
- HWND hwndList = GetDlgItem( hwndDlg, nIDDlgItem );
- lpWnd hwndNodeCurrent = hwndNode;
- ListView_DeleteAllItems( hwndList );
- TCHAR lpCurrentHandle[64] = {0};
- LVITEM lvi = {0};
- lvi.mask = LVIF_TEXT;
- lvi.iItem = 0;
- lvi.iSubItem = 0;
- while( hwndNodeCurrent != NULL ) {
- _stprintf_s( lpCurrentHandle, _countof( lpCurrentHandle ),
- _T("0x%08X"), hwndNodeCurrent -> hwnd );
- lvi.pszText = lpCurrentHandle;
- ListView_InsertItem( hwndList, &lvi );
- GetWindowText( hwndNodeCurrent -> hwnd, lpWindowName, _countof( lpWindowName ) );
- GetClassName( hwndNodeCurrent -> hwnd, lpClassName, _countof( lpClassName ) );
- ListView_SetItemText( hwndList, lvi.iItem, 1, lpWindowName );
- ListView_SetItemText( hwndList, lvi.iItem, 2, lpClassName );
- lvi.iItem++;
- hwndNodeCurrent = hwndNodeCurrent -> next;
- }
- }
- INT_PTR CALLBACK WindowEnumProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
- switch( uMsg ) {
- case WM_INITDIALOG:
- SetWindowLong( hwndDlg, GWL_EXSTYLE, GetWindowLong( hwndDlg, GWL_EXSTYLE ) | WS_EX_LAYERED );
- SetLayeredWindowAttributes( hwndDlg, NULL, 230, LWA_ALPHA );
- InitWindowList( hwndDlg, IDC_WINDOWLIST );
- InitializeCriticalSectionAndSpinCount( &CriticalSection, 0x80000400 );
- SendMessage( hwndDlg, WM_COMMAND, MAKEWPARAM( IDC_REFRESH, NULL ), NULL );
- break;
- case WM_COMMAND: {
- switch( LOWORD( wParam ) ) {
- case IDC_REFRESH:
- EnumWindows( EnumWindowsProc, NULL );
- if( !CompareLinkedLists( hwndNodeHead, hwndNodeTempHead ) ) {
- RedrawList( hwndDlg, IDC_WINDOWLIST, hwndNodeTempHead );
- }
- EnterCriticalSection( &CriticalSection );
- if( hwndNodeHead != NULL ) {
- DeleteAllNodes( hwndNodeHead );
- }
- hwndNodeHead = hwndNodeTempHead;
- LeaveCriticalSection( &CriticalSection );
- hwndNodeTempHead = NULL;
- hwndNodeTempCurrent = NULL;
- break;
- case IDC_CANCEL:
- SendMessage( hwndDlg, WM_CLOSE, NULL, NULL );
- break;
- default:
- return false;
- }
- break;
- }
- case WM_NOTIFY: {
- switch( ( ( LPNMHDR )lParam ) -> code ) {
- case NM_DBLCLK: {
- switch( ( ( LPNMHDR )lParam ) -> idFrom ) {
- case IDC_WINDOWLIST: {
- lpWnd selectedNode = GetNode( hwndNodeHead,
- ( ( LPNMITEMACTIVATE )lParam ) -> iItem );
- if( selectedNode == NULL ) {
- MessageBox( hwndDlg, _T("Selected node out of range"), NULL, MB_OK );
- } else {
- hwndSelected = selectedNode -> hwnd;
- if( !IsWindow( hwndSelected ) ) {
- MessageBox( hwndDlg, _T("Window handle no longer valid"), NULL, MB_OK );
- hwndSelected = NULL;
- } else {
- SendMessage( hwndDlg, WM_CLOSE, NULL, NULL );
- }
- }
- break;
- }
- default:
- return false;
- }
- break;
- }
- default:
- return false;
- }
- break;
- }
- case WM_CLOSE:
- DeleteCriticalSection( &CriticalSection );
- EndDialog( hwndDlg, ( INT_PTR )hwndSelected );
- break;
- default:
- return false;
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement