Well I modified the code as such:

[pascal][background=#FFFFFF][comment=#8080FF][normal=#000080][number=#C00000][reserved=#000000][string=#00C000]
Procedure Tfrm_Main.FormActivate(Sender: TObject);
Var
FJoyList: TStringList;
iCount: Integer;
Begin
//Create the DirectInput object
DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, FDirectInput, nil);

//Create primary keyboard interface
FillChar(DIKeyBuffer[0], (Length(DIKeyBuffer) * SizeOf(Byte)), 0);
FDirectInput.CreateDevice(GUID_SysKeyboard, FKeyDevice, nil);
FKeyDevice.SetDataFormat(@c_dfDIKeyboard);
FKeyDevice.SetCooperativeLevel(Handle, DISCL_NONEXCLUSIVE or DISCL_FOREGROUND);
FKeyDevice.Acquire;

//Enumerate attached game controllers
FJoyList := TStringList.Create;
FDirectInput.EnumDevices(DIDEVTYPE_JOYSTICK, EnumInputDevs, FJoyList, DIEDFL_ATTACHEDONLY);

//Create associated DirectInput devices
SetLength(FJoyDevice, FJoyList.Count);
FillChar(FJoyDevice[0], (Length(FJoyDevice) * SizeOf(IDirectInputDevice), 0);
SetLength(FJoyCaps, FJoyList.Count);
FillChar(FJoyCaps[0], (Length(FJoyCaps) * SizeOf(TDIDevCaps)), 0);
for iCount := 0 to (FJoyList.Count - 1) do begin
FDirectInput.CreateDevice(PGUID(FJoyList.Objects[iCount])^, FJoyDevice[iCount], nil);
FJoyDevice[iCount].SetDataFormat(@c_dfDIJoystick2);
FJoyDevice[iCount].SetCooperativeLevel(Handle, DISCL_EXCLUSIVE or DISCL_FOREGROUND);
FJoyCaps[iCount].dwSize := SizeOf(TDIDevCaps);
FJoyDevice[iCount].GetCapabilities(FJoyCaps[iCount]);
DevNum := iCount;
FJoyDevice[iCount].EnumObjects(EnumInputAxis, nil, DIDFT_AXIS);
FJoyDevice[iCount].Acquire;
end;

//Cleanup and free local objects
for iCount := 0 to (FJoyList.Count - 1) do begin
Dispose(PGUID(FJoyList.Objects[iCount]));
end;
FJoyList.Free;

//Refresh Main Window
RefreshWindow;
End;

[/pascal]

and it seems to have fixed the immediate problems I was having, thanks. Now it's time for an extended testing process. I'll let you know how it goes.