Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2011, 14:05   #1
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию Вызвать приложение сочетанием клавишь

В общем у меня в винде (XP sp3) работают такие сочетания клавишь:
пуск(Эмблема Windows) + R вызывает окно "выполнить"
пуск(Эмблема Windows) + D показывает рабочий стол.

Я думаю что всё они где-то прописаны,
в експлорере к пирмеру или в реестре или ещё гденить.
хотя... скорее всего в експлорере, по тому что когда explorer.exe на зупущен сочетания клавишь не работают.
кароче я хочу запускать своё приложение сочетанием клавишь.

мб из автозапуска залезать в explorer и какнить перехватывать нажатия клавишь?
но после переподрубления експлорера дллки в нём уже не будет(

никто не знает способ по проще?
пыжок

Последний раз редактировалось maloun; 24.02.2011 в 14:39.
maloun вне форума Ответить с цитированием
Старый 24.02.2011, 17:20   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Это надо регистрировать глобальные горячии клавиши в системе. RegisterHotKeys
FaTaL вне форума Ответить с цитированием
Старый 24.02.2011, 19:04   #3
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Вот, баловался...
создаёшь console application и убираешь строку {$APPTYPE CONSOLE}
На F4 открывается Google Chrome.
Код:
program MyResident;
uses
  Windows,
  ShellAPI,
  Messages;

const
  ClassName = 'MyResident'; { Имя класса }
  WM_NOTIFYTRAYICON = WM_USER + 1; { Это сообщение будет
    генерироваться при событиях с tray }

var
  menu: hMenu; { Всплывающее меню }
  mywnd: hWnd; { Окно программы }

function MyWndProc(wnd: hWnd; msg, wParam,
  lParam: longint): longint; stdcall;
var
  p: TPoint;
//  s: array [0..255] of char;
  tray: TNotifyIconData;
  h:HWND;
begin
  case msg of    
    WM_NOTIFYTRAYICON: begin { Событие tray }
      { Если нажата правая кнопка, показать меню: }
      if lparam = WM_RBUTTONUP then begin
        GetCursorPos(p);
        TrackPopupMenu(menu, TPM_LEFTALIGN, p.x, p.x, 0, wnd, nil);
      end;
      result := 0;
    end;
    WM_COMMAND: begin { Выбран пункт меню }
      { Если выбран нулевой пункт (здесь - единственный) -
        закрыть программу: }
      if lo(lparam) = 0 then SendMessage(mywnd, WM_CLOSE, 0, 0);
      result := 0;
    end;
    WM_HOTKEY: begin { Нажата горячая клавиша }
      { Запуск проги по нажатию: }
      ShellExecute(h, 'open', pchar('chrome.exe'), nil,
 nil, SW_SHOWNORMAL);;
      result := 0;
    end;
    WM_DESTROY: begin { Закрытие программы }
       { Удаление tray: }
      with tray do begin
        cbSize := sizeof(TNotifyIconData);
        wnd := mywnd;
        uID := 0;
      end;
      Shell_NotifyIcon(NIM_DELETE, @tray);
      PostQuitMessage(0);
      result := 0;
    end;
    else Result := DefWindowProc(wnd, msg, WParam, LParam);
  end;
end;

function CreateMyWnd: hWnd;
var
  wc: WndClass;
begin
  { Гегистрация класса: }
  wc.style := 0;
  wc.lpfnWndProc := @MyWndProc;
  wc.cbClsExtra := 0;
  wc.cbWndExtra := 0;
  wc.hInstance := hInstance;
  wc.hIcon := 0;
  wc.hCursor := 0;
  wc.hbrBackground := COLOR_WINDOW;
  wc.lpszMenuName := nil;
  wc.lpszClassName := ClassName;
  if RegisterClass(wc) = 0 then halt(0);
  { Создание окна: }
  result := CreateWindowEx(WS_EX_APPWINDOW, ClassName,
    'My Window', WS_POPUP, 0, 0, 0, 0, 0, 0, hInstance, nil);
  if result = 0 then halt(0);
end;

procedure CreateTray;
var
  tray: TNotifyIconData;
begin
  { Создание tray: }
  with tray do begin
    cbSize := sizeof(TNotifyIconData);
    wnd := mywnd;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallBackMessage := WM_NOTIFYTRAYICON;
    hIcon := LoadIcon(0, IDI_ASTERISK);
    szTip := ('My Resident');
  end;
  Shell_NotifyIcon(NIM_ADD, @tray);
end;

function CreateMyMenu: hMenu;
begin
  { Создание меню: }
  result := CreatePopupMenu;
  if result = 0 then halt(0);
  if not AppendMenu(result, MF_STRING, 0, 'Exit') then halt(0)
  else
  if not AppendMenu(result, MF_STRING, 1, 'Close') then halt(0);
end;

var
  msg: TMsg;

begin
  mywnd := CreateMyWnd; // Создание окна
  CreateTray; // Создание tray
  menu := CreateMyMenu; // Создание меню
  SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_IDLE); { Установка
    низкого приоритета }
  RegisterHotKey(mywnd, 0, 0,VK_F4); // Регистрация "горячей клавиши"
  while (GetMessage(msg, 0, 0, 0)) do begin
    TranslateMessage(msg);
    DispatchMessage(msg);
  end;
  UnregisterHotKey(mywnd, 0); // "Уничтожение" горячей клавиши
end.
теперь о реестре)))
выполнить-> regedit -> LOCAL_MACHINE-> SoftWare->Microsoft->Windows->Current Version->Run

Там создаёшь строковый параметр (правой кнопкой жмякнуть в общем).
обзывай как хошь. Далее правой кнопкой на твой параметр и выбираешь "изменить". Там пишешь путь к твоей проге. Вот собственно и всё.

Ну и собственно напоминание про УК РФ не повредит))))
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 24.02.2011 в 20:10.
Rin вне форума Ответить с цитированием
Старый 24.02.2011, 20:20   #4
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение

теперь о реестре)))
выполнить-> regedit -> LOCAL_MACHINE-> SoftWare->Microsoft->Windows->Current Version->Run

Там создаёшь строковый параметр (правой кнопкой жмякнуть в общем).
обзывай как хошь. Далее правой кнопкой на твой параметр и выбираешь "изменить". Там пишешь путь к твоей проге. Вот собственно и всё.

Ну и собственно напоминание про УК РФ не повредит))))
теперь мой exe файл к которому указан путь в реестре,
будет запускатся каждый раз когда я... войду в комп?
пыжок
maloun вне форума Ответить с цитированием
Старый 24.02.2011, 20:33   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

да, теперь твоя прога будет запускаться наряду с антивирем и другими прогами, которые записаны в той папке. И при нажатии на клавишу F4 будет открываться то , что ты укажешь в функции:
Код:
ShellExecute(h, 'open', pchar({Твой путь к запуску другой проги при нажатии клавиши, например} 'C:\Program Files\Skype\Phone\Skype.exe'), nil,
 nil, SW_SHOWNORMAL);;
Как сделать так, чтобы это запускалось ещё до explorer`a я не скажу, а то уже достали вот такие картинки
Изображения
Тип файла: png winlock.png (9.2 Кб, 76 просмотров)
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 24.02.2011, 20:49   #6
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

не ну нифига се...
я между прочим для себя пишу!!!
кароче...
у меня до**ще(много) ярлыков от разных прог...
я их запихнул в папку, и сделал exe файл который отображает их из папки, (для удобства) что бы всё время не лесть в панель быстрого запуска. хочется открывать его сочетанием клавишь (пуск+Q), про хук explorer.exe - это был вариант контроля нажатия клавишь. никакого крименала... только мудёж
пыжок
maloun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В тех словах, которые оканчиваются сочетанием букв “ing”, заменить это окончание на “ed”. Sh@rky Паскаль, Turbo Pascal, PascalABC.NET 8 20.12.2015 18:23
Как вызвать приложение? DimOn4Ik Помощь студентам 1 20.01.2010 21:26
Задача:в вижуал с++ Разработать приложение-сервер и приложение (смотри дальше сообщение) Мила777 Фриланс 2 21.10.2009 11:05
Комбинация клавишь IVANSour Общие вопросы Delphi 3 18.01.2009 13:58
Нажатие клавишь Slash Общие вопросы Delphi 2 06.06.2008 08:15