This script captures the current system lock in a temp table, then builds a temp translation table for database and object id by iterating through all of the databases. It then produces a report by joining the two tables.
For better performance, you could make the translation table perminante and only update it when you are going to be looking at locking.
One of the issues you'll face with SQL Server is blocking which is caused by other processes that are holding locks on objects. Until the locks are removed on an object the next process will wait before proceeding. This is a common process that runs within SQL Server to ensure data integrity, but depending on how transactions are run this can cause some issues. Are there ways to get around blocking by using different indexes to cover the queries that may be running?