kotofeich, создаете контейнер (div), стилизуете его под кнопку. В него кладете форму с элементом file. Форму делаете абсолютно прозрачной. При ounmousemove над контейнером передвигаете элемент file так, чтобы кнопка "Открыть" (она невидима, ибо прозрачна) находилась всегда под курсором. На событие onchange элемента file вешаете нужное вам действие.
Код писать не буду, ибо долго. Готовый код есть, но он написан для своего фрэймворка, и там мало кто чего поймет. Пример реализации есть здесь
http://www.seanalyzer.ru/tools/randomizer/