Проблема в том, что когда вы делаете это таким образом, вы получаете кешированную версию иконки, первую, которую система загрузила.Это будет иконка большого размера, обычно 32x32.Не имеет значения, какой размер вы указали.
Что вы можете сделать, это найти идентификатор нужного ресурса в user32.dll и использовать что-то вроде этого:
LoadImage(GetModuleHandle('user32'), MAKEINTRESOURCE(103), IMAGE_ICON,
16, 16, LR_DEFAULTCOLOR);
Вам лучшепозвоните GetSystemMetrics(SM_CXSMICON)
, чтобы узнать размер значка, а не жесткий код 16, но вы, вероятно, уже знаете это.
Я не уверен, откуда вы берете идентификаторы ресурсов для ресурсов в user32, илидаже если они являются какой-либо гарантией того, что они будут постоянными в разных версиях Windows.Я думаю, что они будут, потому что слишком много программ сломалось бы, но это просто догадки.