For #1, what you could do is have your skill give your character a temporary (and large) buff to Perception for 1 second/round, which should cause any hidden objects nearby to show up. Make sure to give such a skill a huge AP cost so that it can only be used outside of combat.

For #2, I believe CharacterUsedSkillInTrigger is what you're looking to use if the objects you're getting info on are stationary and won't be moving at all. If your skill is named "SKILL_Lore", for example, it might look something like this (if I recall the code correctly)

IF
CharacterUsedSkillInTrigger(_, "SKILL_Lore", _Trigger)
THEN
DisplayLore(_Trigger);

PROC
DisplayLore((TRIGGER)_Trigger)
AND
ItemIsInTrigger(_item, _Trigger)
AND
DB_ItemLoreText(_item, _text)
THEN
ItemDisplayText(_item, _text);

(I don't recall if itemisintrigger is an actual function, but you just need something that links the item to the trigger).

For #3, I'm not sure of how that can be done at all.