gmz Опубликовано 9 июля, 2016 Поделиться Опубликовано 9 июля, 2016 В 08.07.2016в19:35, afro228offical сказал: А id я буду загружать в вектор . И выбирать вектор с тем номером , который выбрал юзер в listbox зачем так все усложнять, эт прям бредокод какой то lol юзай SendMessage + CB_GETCURSEL + SendMessage LB_GETTEXT+ конверт ид 21 часа назад, holy сказал: То что студии не нравится swprintf это я знаю, по этому и не люблю Visual Studio, слишком много на себя берет. дада bufferoverflow был запланирован Ссылка на комментарий Поделиться на другие сайты Поделиться
holy Опубликовано 9 июля, 2016 Поделиться Опубликовано 9 июля, 2016 1 hour ago, gmz said: дада bufferoverflow был запланирован Память выделяется динамически, в зависимости от входных данных ) А это значит, что: 1. Эти данные хранятся не в стеке, а в куче 2. Эти данные всегда имеют соответствующий входным строкам размер, а значит переполнения не может быть И именно по этому я не люблю когда Visual Studio что-то пытается решить за меня, по этому юзаю Code::Blocks и GCC компилятор ) Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 10 июля, 2016 Поделиться Опубликовано 10 июля, 2016 (изменено) вариант SendMessage и LB_GETTEXT: Скрытый текст #include "windows.h" #include "wchar.h" #include "tlhelp32.h" LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){ static HWND hProcessList; static HWND hCurrentProcess; HFONT hFont; WCHAR Buffer[300]; PROCESSENTRY32 ProcessEntry; HANDLE hSnapshot; switch (uMsg){ case WM_CREATE: hFont = CreateFontW(15,6,0,0,FW_MEDIUM,0,0,0,DEFAULT_CHARSET,0,0,PROOF_QUALITY,DEFAULT_PITCH,L"Tahoma"); hProcessList = CreateWindowExW(WS_EX_CLIENTEDGE,L"LISTBOX",0,WS_VISIBLE+WS_CHILD+WS_VSCROLL+LBS_NOTIFY,4,4,276,200,hWnd,(HMENU)1,0,0); SendMessageW(hProcessList,WM_SETFONT,(WPARAM)hFont,1); ProcessEntry.dwSize = sizeof(PROCESSENTRY32); hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); while (Process32NextW(hSnapshot,&ProcessEntry)){ swprintf(Buffer,L"Id: %d %s",ProcessEntry.th32ProcessID,ProcessEntry.szExeFile); SendMessageW(hProcessList,LB_ADDSTRING,0,(LPARAM)Buffer); } CloseHandle(hSnapshot); break; case WM_COMMAND: if (LOWORD(wParam) == 1){ if (HIWORD(wParam) == LBN_SELCHANGE){ SendMessageW(hProcessList,LB_GETTEXT,SendMessageW(hProcessList,LB_GETCURSEL,0,0),(LPARAM)Buffer); MessageBoxW(hWnd,Buffer,L"",MB_OK); DWORD Id = _wtoi(Buffer+4); //skip "Id: " }} break; case WM_GETMINMAXINFO: MINMAXINFO *lpMinMaxInfo; lpMinMaxInfo = (MINMAXINFO*)lParam; lpMinMaxInfo->ptMinTrackSize.x = 300; lpMinMaxInfo->ptMinTrackSize.y = 250; break; case WM_LBUTTONDOWN: PostMessageW(hWnd,WM_NCLBUTTONDOWN,MK_RBUTTON,0); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProcW(hWnd,uMsg,wParam,lParam); } return 0; } void wmain(){ WNDCLASSEXW wcx; MSG msg; wcx.cbSize = sizeof(WNDCLASSEXW); wcx.style = 0; wcx.lpfnWndProc = WndProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = 0; wcx.hIcon = 0; wcx.hCursor = LoadCursorW(0,IDC_ARROW); wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcx.lpszMenuName = 0; wcx.lpszClassName = L"test window"; wcx.hIconSm = 0; RegisterClassExW(&wcx); ShowWindow(CreateWindowExW(0,L"test window",L"test window",WS_SYSMENU+WS_MINIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,0,0,0,0,0,0),SW_SHOW); while (GetMessageW(&msg,0,0,0)){TranslateMessage(&msg);DispatchMessageW(&msg);} ExitProcess(msg.wParam); } 17 час назад, holy сказал: Память выделяется динамически, в зависимости от входных данных ) апи имел ввиду. вс страхует нубов и прочих эпик идиотов xD Изменено 10 июля, 2016 пользователем gmz Ссылка на комментарий Поделиться на другие сайты Поделиться
afro228offical Опубликовано 10 июля, 2016 Автор Поделиться Опубликовано 10 июля, 2016 Придётся в платные запросы кидать проблему... Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения