Перейти к содержанию

wcscat_s для динамического массива типа wchar_t.


Рекомендуемые сообщения

В 08.07.2016в19:35, afro228offical сказал:

А id я буду загружать в вектор . И выбирать вектор с тем номером , который выбрал юзер в listbox

зачем так все усложнять, эт прям бредокод какой то lol

юзай SendMessage + CB_GETCURSEL + SendMessage LB_GETTEXT+ конверт ид

 

21 часа назад, holy сказал:

То что студии не нравится swprintf это я знаю, по этому и не люблю Visual Studio, слишком много на себя берет.

дада bufferoverflow был запланирован :D

 

Ссылка на комментарий
Поделиться на другие сайты

1 hour ago, gmz said:

дада bufferoverflow был запланирован

 

Память выделяется динамически, в зависимости от входных данных )

А это значит, что:

1. Эти данные хранятся не в стеке, а в куче

2. Эти данные всегда имеют соответствующий входным строкам размер, а значит переполнения не может быть :D

 

И именно по этому я не люблю когда Visual Studio что-то пытается решить за меня, по этому юзаю Code::Blocks и GCC компилятор )

Ссылка на комментарий
Поделиться на другие сайты

вариант 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

 

Изменено пользователем gmz
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.