Tried SetIcon? I couldn't easily find anything that allows you to create a Win32::GUI object around a HWND. You might have to look in the source of Win32::GUI and figure out what a Window object is and how to fake one for SetIcon and ChangeIcon.
considered checking the return value of ->ChangeIcon() and then checking GetLastError? per
HWND and HICON objects are either a hash ref with a "-handle" slice with a integer in that slice, or just an integer like 123. ChangeIcon isnt really method either, its a sub. You should use it as a sub not a method. Although method will maybe sometimes work. Win32::GUI's docs do a poor job of explaining the return values of anything and method vs sub call syntax.