{"id":217779,"date":"2014-04-01T03:09:02","date_gmt":"2014-03-31T23:09:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=217779"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=217779","title":{"rendered":"<span class=\"post_title\">\u042d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 \u0432 Windows, Linux \u0438 Mac OS X<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/1f7\/38a\/910\/1f738a910803f7f4e372d65e8aa28657.jpg\"\/><\/div>\n<p>  \u0412 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 Qt::Key \u0434\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f QKeyEvent \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b 15 \u0442\u0438\u043f\u043e\u0432 \u043a\u043b\u0430\u0432\u0438\u0448 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 (\u0441\u043c. \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438). \u0412\u0441\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (installEventFilter) \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u043d\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435 (\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0430\u0443\u0434\u0438\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c). <br \/>  \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u043f\u0443\u0442\u0435\u043c \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 \u0432 Windows, Linux \u0438 MacOSX (\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044f). \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c\u0443 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0446\u0438\u043a\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0433\u0434\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<ul>\n<li>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0434\u0438\u043e;<\/li>\n<li>\u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439;<\/li>\n<li>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u0443\u0434\u0438\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d. \u0422\u0430\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e \u043d\u0435 \u0432\u0441\u0442\u0430\u0432\u0430\u044f \u0441 \u0434\u0438\u0432\u0430\u043d\u0430 \u0438\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0437\u0432\u043e\u043d\u043a\u0430;<\/li>\n<li>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u00ab\u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e\u00bb \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 \u0438 \u043c\u044b\u0448\u044c \u043d\u0430 \u0434\u0432\u0430 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u043f\u043e \u0441\u0435\u0442\u0438 (\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043b\u0430\u0432\u0438\u0448);<\/li>\n<li>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c \u00ab\u0443\u043c\u043d\u044b\u0439 \u0434\u043e\u043c\u00bb, \u043d\u043e\u0432\u044b\u0445 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e-\u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0438 \u0434\u0440.).<\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a QEvent \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u00ab\u0432\u043d\u0443\u0442\u0440\u0438\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 Qt \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b Api (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Windows) \u0438\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (X Window System \u0432 Linux \u0438 \u0440\u044f\u0434 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0432 Mac OS X).<br \/>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>sendKeyEventToSystem(Qt::Key qtKey)<\/i>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f Qt::Key. \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u0441\u043b\u043e\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">void playPauseToogle() {  \/\/\u0441\u043b\u043e\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0438 \u043f\u0430\u0443\u0437\u043e\u0439 \tpostKeyEventToSystem(Qt::Key_MediaTogglePlayPause); } <\/code><\/pre>\n<p>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430\u043c\u0438 <i>#ifdef OS_TYPE<\/i> \u0438 <i>#endif<\/i> (\u0435\u0449\u0435 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043d\u0430 Objective-C \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b macx.mm, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435).<\/p>\n<h4>\u042d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0432 Windows<\/h4>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0437\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms646310%28v=vs.85%29.aspx\">SendInput<\/a>. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u043a\u043e\u0434\u0430\u043c\u0438, \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 MSDN <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/dd375731%28v=vs.85%29.aspx\">Virtual-Key Codes<\/a>.<br \/>  \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b &lt;Windows.h&gt;.   <\/p>\n<pre><code class=\"cpp\">#ifdef Q_OS_WIN32     #define WINVER 0x0500     #include &lt;Windows.h&gt; #endif <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0438 \u0435\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u043a\u043e\u0434 (\u0432 \u0447\u0430\u0441\u0442\u0438 Windows):   <\/p>\n<pre><code class=\"cpp\">sendKeyEventToSystem(Qt::Key qtKey) { \/\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0438. qtKey - \u0442\u0438\u043f \u043a\u043b\u0430\u0432\u0438\u0448\u0438 #ifdef Q_OS_WIN32     INPUT ip; \/\/\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u0432\u043e\u0434\u0430     ip.type = INPUT_KEYBOARD;     ip.ki.wScan = 0;     ip.ki.time = 0;     ip.ki.dwExtraInfo = 0; \/\/\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0438     switch (qtKey) {     case Qt::Key_MediaPrevious:         ip.ki.wVk = VK_MEDIA_PREV_TRACK; \/\/\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0442\u0440\u0435\u043a         break;     case Qt::Key_MediaTogglePlayPause:         ip.ki.wVk = VK_MEDIA_PLAY_PAUSE; \/\/\u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f         break;     case Qt::Key_MediaNext:         ip.ki.wVk = VK_MEDIA_NEXT_TRACK; \/\/\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0440\u0435\u043a         break;     default:         return;         break;     } \t\/\/\u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0438     ip.ki.dwFlags = 0;     SendInput(1, &ip, sizeof(INPUT));     \/\/\u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0438     ip.ki.dwFlags = KEYEVENTF_KEYUP;     SendInput(1, &ip, sizeof(INPUT)); #endif } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435\u0433\u043e 3 \u043a\u043b\u0430\u0432\u0438\u0448\u0438. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u0434\u043e\u0432.<\/p>\n<h4>\u042d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0432 Linux<\/h4>\n<p>  \u0414\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448 \u0432 Linux, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 libXtst (<a href=\"https:\/\/packages.debian.org\/ru\/sid\/libxtst-dev\">X11 Record extension library<\/a>).<br \/>  \u0414\u043b\u044f \u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">sudo apt-get install libxtst-dev <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:  <\/p>\n<pre><code class=\"cpp\">unix:!macx:LIBS += -lXtst -lX11 <\/code><\/pre>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0440\u044f\u0434 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u0434\u0430\u043c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 (\u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 X11\/keysymdef.h \u043a\u043e\u0434\u044b \u0434\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442).  <\/p>\n<pre><code class=\"cpp\">#ifdef Q_OS_LINUX     #include &lt;X11\/Xlib.h&gt;     #include &lt;X11\/extensions\/XTest.h&gt;     #define XF86AudioLowerVolume   0x1008ff11     #define XF86AudioMute                0x1008ff12      #define XF86AudioRaiseVolume   0x1008ff13     #define XF86AudioPlay               0x1008ff14     #define XF86AudioStop               0x1008ff15     #define XF86AudioPrev                0x1008ff16     #define XF86AudioNext                0x1008ff17     #define XF86AudioPause            0x1008ff31 #endif <\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0432 \u0447\u0430\u0441\u0442\u0438 Linux:  <\/p>\n<pre><code class=\"cpp\">#ifdef Q_OS_LINUX     unsigned int key;     unsigned int keycode;     switch (qtKey) {     case Qt::Key_MediaPrevious:         key = XF86AudioPrev;         break;     case Qt::Key_MediaTogglePlayPause:         key = XF86AudioPlay;         break;     case Qt::Key_MediaNext:         key = XF86AudioNext;         break;     default:         return;         break;     }     \/\/ \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a X     Display *display;     display = XOpenDisplay(NULL);     \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u0434 \u043a\u043b\u0430\u0432\u0438\u0448\u0438     keycode = XKeysymToKeycode(display, key);     \/\/ \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438     XTestFakeKeyEvent(display, keycode, 1, 0);     \/\/ \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u0436\u0430\u0442\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438     XTestFakeKeyEvent(display, keycode, 0, 0);     \/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0431\u0443\u0444\u0435\u0440 X     XFlush(display);     \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043e\u0442 X     XCloseDisplay(display); #endif <\/code><\/pre>\n<p>  <\/p>\n<h4>\u042d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0432 Mac OS X<\/h4>\n<p>  \u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u043d\u0430\u0439\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f MacOS X \u043d\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u043b\u0438 \u043f\u043b\u043e\u0434\u043e\u0432 (\u0441\u043a\u0443\u043f\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 Objective-C), \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0432 \u0433\u0443\u0433\u043b\u0435 \u043d\u0435 \u043d\u0430\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u0445\u0430\u0431\u0440\u0430 <a href=\"http:\/\/habrahabr.ru\/post\/133700\/\">\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Qt \u0432 \u0441\u0440\u0435\u0434\u0443 Mac OS X (\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Cocoa \u0438 Objective-C++)<\/a>. \u041c\u043d\u0435 \u0443\u0436\u0435 \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0430\u0441\u044c \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u043e\u0441\u044c, \u043a\u0430\u043a \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 C++ \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Objective-C \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041c\u043d\u0435 \u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0435 \u2014 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c Objective-C \u043a\u043e\u0434 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0443\u0433\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u043b\u044f\u0442\u043e\u0440). \u0412\u0441\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<br \/>  1. \u0441\u043e\u0437\u0434\u0430\u043b \u0444\u0430\u0439\u043b macx.mm \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u0432 \u043d\u0435\u043c Objective-\u0421 \u043a\u043e\u0434 (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u0442\u0440\u043e\u043a\u0430 <\/p>\n<pre><code class=\"cpp\">OBJECTIVE_SOURCES += macx.mm <\/code><\/pre>\n<p>  2. \u0441\u043e\u0437\u0434\u0430\u043b \u0444\u0430\u0439\u043b macx.h \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u0432 \u043d\u0435\u043c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 macx.mm (\u0434\u043e\u0431\u0430\u0432\u0438\u0432 #include \u00abmacx.h\u00bb \u0432 macx.mm).<br \/>  3. \u0432 \u0444\u0430\u0439\u043b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438:  <\/p>\n<pre><code class=\"cpp\">macx:LIBS += -framework ApplicationServices -framework IOKit<\/code><\/pre>\n<p>  4. \u0412\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0434\u043b\u044f Mac OS X \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0445\u0438\u0434\u0435\u0440\u044b \u0438 macx.h.<br \/>  5. \u0412 \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0439 \u0432\u0430\u043c switch-case \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u043b \u0432\u044b\u0437\u043e\u0432\u044b \u043d\u043e\u0432\u043e\u0438\u0441\u043f\u0435\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043b\u044f Mac OS X:  <\/p>\n<pre><code class=\"cpp\">#ifdef Q_OS_MAC     #include &lt;ApplicationServices\/ApplicationServices.h&gt; \/\/\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u043b\u044f \u0442\u0438\u043f\u0430 UInt8     #include &lt;IOKit\/hidsystem\/ev_keymap.h&gt; \/\/\u043a\u043e\u0434\u044b \u043a\u043b\u0430\u0432\u0438\u0448     #include &quot;mac.h&quot; \/\/\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 Objective-C \u043a\u043e\u0434\u0430 #endif <\/code><\/pre>\n<p>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <i>sendKeyEventToSystem<\/i> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cpp\">#ifdef Q_OS_MAC     switch (qtKey) {     case Qt::Key_MediaPrevious:         HIDPostAuxKey( NX_KEYTYPE_PREVIOUS );         break;     case Qt::Key_MediaTogglePlayPause:         HIDPostAuxKey( NX_KEYTYPE_PLAY );         break;     case Qt::Key_MediaNext:         HIDPostAuxKey( NX_KEYTYPE_NEXT );         break;     default:         return;         break;     } #endif <\/code><\/pre>\n<p>  C\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 mac.mm:  <\/p>\n<pre><code class=\"cpp\">#import &lt;Cocoa\/Cocoa.h&gt; #import &lt;IOKit\/hidsystem\/IOHIDLib.h&gt; #import &lt;IOKit\/hidsystem\/ev_keymap.h&gt; #include &quot;macx.h&quot;  static io_connect_t get_event_driver(void) {     static  mach_port_t sEventDrvrRef = 0;     mach_port_t masterPort, service, iter;     kern_return_t    kr;     if (!sEventDrvrRef)     {         \/\/ Get master device port         kr = IOMasterPort( bootstrap_port, &masterPort );         check( KERN_SUCCESS == kr);          kr = IOServiceGetMatchingServices( masterPort, IOServiceMatching( kIOHIDSystemClass ), &iter );         check( KERN_SUCCESS == kr);          service = IOIteratorNext( iter );         check( service );          kr = IOServiceOpen( service, mach_task_self(),                             kIOHIDParamConnectType, &sEventDrvrRef );         check( KERN_SUCCESS == kr );          IOObjectRelease( service );         IOObjectRelease( iter );     }     return sEventDrvrRef; }  void HIDPostAuxKey(const UInt8 auxKeyCode ) {   NXEventData   event;   kern_return_t kr;   IOGPoint      loc = { 0, 0 };    \/\/ \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0438   UInt32      evtInfo = auxKeyCode &lt;&lt; 16 | NX_KEYDOWN &lt;&lt; 8;   bzero(&event, sizeof(NXEventData));   event.compound.subType = NX_SUBTYPE_AUX_CONTROL_BUTTONS;   event.compound.misc.L[0] = evtInfo;   kr = IOHIDPostEvent( get_event_driver(), NX_SYSDEFINED, loc, &event, kNXEventDataVersion, 0, FALSE );   check( KERN_SUCCESS == kr );    \/\/ \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u043e\u0442\u0436\u0430\u0442\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0438   evtInfo = auxKeyCode &lt;&lt; 16 | NX_KEYUP &lt;&lt; 8;   bzero(&event, sizeof(NXEventData));   event.compound.subType = NX_SUBTYPE_AUX_CONTROL_BUTTONS;   event.compound.misc.L[0] = evtInfo;   kr = IOHIDPostEvent( get_event_driver(), NX_SYSDEFINED, loc, &event, kNXEventDataVersion, 0, FALSE );   check( KERN_SUCCESS == kr ); } <\/code><\/pre>\n<p>  <\/p>\n<h5>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435:<\/h5>\n<p>  \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0447\u0442\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u043c\u044b\u0448\u0438 \u0438 \u0434.\u0440.). \u0412\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043d\u0435 \u0442\u0430\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u0430\u043b\u0435\u043a \u043e\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u0430 (\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e, \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0435\u0442\u0441\u044f switch-case \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448). \u041d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043e\u0431\u0449\u0443\u044e \u043a\u043e\u043f\u0438\u043b\u043a\u0443 \u0431\u0430\u0437\u044b \u0437\u043d\u0430\u043d\u0438\u0439 \u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u0440\u043e\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<br \/>  \u0412 \u0445\u043e\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e, \u0447\u0442\u043e VirtualBox <a href=\"https:\/\/www.virtualbox.org\/ticket\/4263\">\u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448<\/a> (\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u043d\u0430 Ubuntu \u2014 c \u00ab\u0436\u0435\u043b\u0435\u0437\u0430\u00bb \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e). \u0414\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u043b\u0438\u0448\u0435\u043d\u0430 WMWare (\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u043d\u0430 Mac OS X).<\/p>\n<p>  \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435: \u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 \u0438 \u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e #define).<\/p>\n<table>\n<tr>\n<th>Qt::Key<\/th>\n<th>Windows<\/th>\n<th>Linux<\/th>\n<th>Mac OS X<\/th>\n<\/tr>\n<tr>\n<td>Qt::Key_VolumeDown<\/td>\n<td>VK_VOLUME_DOWN<\/td>\n<td>XF86AudioLowerVolume<\/td>\n<td>NX_KEYTYPE_SOUND_DOWN<\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_VolumeMute<\/td>\n<td>VK_VOLUME_MUTE<\/td>\n<td>XF86AudioMute<\/td>\n<td>NX_KEYTYPE_MUTE<\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_VolumeUp<\/td>\n<td>VK_VOLUME_UP<\/td>\n<td>XF86AudioRaiseVolume<\/td>\n<td>NX_KEYTYPE_SOUND_UP<\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_BassBoost<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_BassUp<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_BassDown<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_TrebleUp<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_TrebleDown<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_MediaPlay<\/td>\n<td>VK_MEDIA_PLAY_PAUSE<\/td>\n<td>XF86AudioPlay<\/td>\n<td>NX_KEYTYPE_PLAY<\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_MediaStop<\/td>\n<td>VK_MEDIA_STOP<\/td>\n<td>XF86AudioStop<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_MediaPrevious<\/td>\n<td>VK_MEDIA_PREV_TRACK<\/td>\n<td>XF86AudioPrev<\/td>\n<td>NX_KEYTYPE_PREVIOUS<\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_MediaNext<\/td>\n<td>VK_MEDIA_NEXT_TRACK<\/td>\n<td>XF86AudioNext<\/td>\n<td>NX_KEYTYPE_NEXT<\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_MediaRecord<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_MediaPause<\/td>\n<td><\/td>\n<td>XF86AudioPause<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Qt::Key_MediaTogglePlayPause<\/td>\n<td>VK_MEDIA_PLAY_PAUSE<\/td>\n<td>XF86AudioPlay<\/td>\n<td>NX_KEYTYPE_PLAY<\/td>\n<\/tr>\n<\/table>\n<p>  \u0421\u0441\u044b\u043b\u043a\u0438 \u043f\u043e \u0442\u0435\u043c\u0435:<br \/>  1. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: <a href=\"http:\/\/stackoverflow.com\/questions\/9409011\/c-qt-cross-platform-library-for-simulating-keyboard-input-sendkeys-send-ke\">C++ (Qt) cross-platform library for simulating keyboard input, sendkeys, send kestrokes, etc<\/a><br \/>  2. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ms646310%28v=vs.85%29.aspx\">SendInput<\/a> \u0438 <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/dd375731%28v=vs.85%29.aspx\">\u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043a\u043e\u0434\u043e\u0432 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b<\/a> \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 MSDN.<br \/>  3. <a href=\"https:\/\/shanetully.com\/2012\/07\/simulating-mediakey-presses-in-x11\/\">Simulating Mediakey Presses in C &#038; X11<\/a> \u2014 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0432 Linux \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u00abxev\u00bb (\u0432 Ubuntu: \u00absudo apt-get install x11-utils\u00bb) \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u043e\u0434\u044b \u043a\u043b\u0430\u0432\u0438\u0448, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <a href=\"https:\/\/wiki.archlinux.org\/index.php\/Extra_Keyboard_Keys\">\u0441\u0442\u0430\u0442\u044c\u044f \u0441 archlinux.org<\/a>.<br \/>  4. \u042d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 <a href=\"http:\/\/stackoverflow.com\/questions\/11045814\/emulate-media-key-press-on-mac\">\u0432 MacOS X \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Python<\/a>.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/217779\/\"> http:\/\/habrahabr.ru\/post\/217779\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/1f7\/38a\/910\/1f738a910803f7f4e372d65e8aa28657.jpg\"\/><\/div>\n<p>  \u0412 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 Qt::Key \u0434\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f QKeyEvent \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b 15 \u0442\u0438\u043f\u043e\u0432 \u043a\u043b\u0430\u0432\u0438\u0448 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 (\u0441\u043c. \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438). \u0412\u0441\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (installEventFilter) \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u043d\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0439\u043d\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435 (\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0430\u0443\u0434\u0438\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c). <br \/>  \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u043f\u0443\u0442\u0435\u043c \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 \u0432 Windows, Linux \u0438 MacOSX (\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044f). \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043a \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c\u0443 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0446\u0438\u043a\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-217779","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/217779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=217779"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/217779\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=217779"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=217779"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=217779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}