Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. QueryDosDevice("S:", buf, sizeof(buf)); //buf=\Device\HarddiskVolume1 vs buf=\??\C:\www
2. DefineDosDevice(0, "S:", "C:\\www"); , DefineDosDevice(DDD_REMOVE_DEFINITION, "S:", NULL);

Всего записей: 1570 | Зарегистр. 01-11-2004 | Отправлено: 12:59 03-05-2015
PaNov

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
спасибо!!
 
Добавлено:
тогда еще один, "на засыпку" :
если у нас Windows 7 Home edition, то в ней отсутствует утилита subst
будут ли в таком случае работать вышеприведенные механизмы или произойдет отказ в обслуживании?

Всего записей: 34 | Зарегистр. 25-02-2003 | Отправлено: 13:16 03-05-2015
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PaNov
Цитата:
будут ли в таком случае работать вышеприведенные механизмы  
Утилита subst использует вышеприведенные WinAPI  функции, а не наоборот.
Более того, если взять subst.exe из других версий и положить в Windows\System32,
то эта  команда по идее должна работать.


----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17282 | Зарегистр. 13-06-2007 | Отправлено: 14:11 03-05-2015
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как бы мне почистить очередь сообщений клавы для того чтобы изъять оттуда нажатия после вызова GetAsyncKeyState(VK_KEY)
 
пробовал
PeekMessage(msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE or PM_NOYIELD)
но как-то не работает или я её неправильно зову...
 
?

Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 23:52 23-07-2018 | Исправлено: akaGM, 00:01 24-07-2018
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
А что именно не работает?

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6092 | Зарегистр. 22-10-2005 | Отправлено: 00:19 24-07-2018
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
 
ну нажатие проносится в вызывающее приложение,
типа из-под ФАРа вызываю, давлю ESC, возвращаюсь в ФАР, этот ESC отрабатывается...
приложение -- консоль...
хочу как в ДОС :)
 

Код:

     if GetAsyncKeyState(VK_ESCAPE) and $8000 <> 0 then begin
      while PeekMessage(msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE or PM_NOYIELD) do;
 
      writeln('ESC pressed, exiting...');
      halt;
    end;

 
Добавлено:
 
чёрт, соррь за паскаль...
 
а с другой стороны...
почему только кресты? у меня на фортране уже туева хуча АПИ используется, надо тайтл поправить...
 
Добавлено:
 
 
и ещё, сама GetAsyncKeyState() тоже какая-то глобально-сквозная: где бы не нажалась ESC -- срабатывает :)
 
неужели окно придётся ловить или вообще хуки использовать...

Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 00:47 24-07-2018
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Хм. Тут желательно посмотреть, какие сообщения вытаскивает PeekMessage(). Потому как процесс извлечения начинается, когда Esc нажата. И скорее всего, WM_KEYUP придёт уже после того, как он завершится.

Цитата:
и ещё, сама GetAsyncKeyState() тоже какая-то глобально-сквозная: где бы не нажалась ESC -- срабатывает

Она определяет текущее состояние клавиши. Вопрос "где" тут просто неуместен.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6092 | Зарегистр. 22-10-2005 | Отправлено: 01:08 24-07-2018
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
 
ясно...
может проще поступим...
 
присоветуй плиз как решить такую задачу :)
 
в бесконечном цикле (== длительный счёт) следить за конкретной клавишей (комбинацией),
при нажатии -- экзит?
 
while (1) {
 
...работаем
 
  if (keypressed) {
    if (нажата_нужная) {
    ...
      exit(1)
    }
  }
 
...продолжаем работать
}
 
никаких форм, никаких сторонних библиотек, никаких MFC, VCL, только РТЛ и АПИ
 
?

Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 01:37 24-07-2018
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ctrl-C,
SetConsoleControlHandler();

Всего записей: 1570 | Зарегистр. 01-11-2004 | Отправлено: 07:40 24-07-2018
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Покопай в сторону GetNumberOfConsoleInputEvents() и ReadConsoleInput().


----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6092 | Зарегистр. 22-10-2005 | Отправлено: 07:54 24-07-2018
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
в бесконечном цикле (== длительный счёт) следить за конкретной клавишей (комбинацией),
при нажатии -- экзит?
 

Код:
 
  switch( wmsg){
  case WM_CREATE:
    fhkswf= -1;
    static long hHotKey;
    hHotKey= RegisterHotKey( hWnd, 1001, 8, VK_UP);
    hHotKey= RegisterHotKey( hWnd, 1002, 8, VK_DOWN);
::::::::::
  case WM_HOTKEY:
    //DialogBox hInst,  5001, hWnd, CODEPTR( AboutProc)
    if( wparam ==1001){
      PostMessage( GetForegroundWindow(), WM_SIZE, SIZE_MAXIMIZED, 0);
    }// if
    if( wparam ==1002){
      PostMessage( GetForegroundWindow(), WM_SIZE, SIZE_MINIMIZED, 0);
    }// if
    break;
:::::::::
  case WM_DESTROY:
    UnregisterHotKey( hWnd, HK_SWF);
 

 
Добавлено:
или я тчо то не так понял?

Всего записей: 11754 | Зарегистр. 03-08-2008 | Отправлено: 10:48 24-07-2018
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
 
звучит не очень оптимистично...
 
 
ne_viens
 
уже лучше, но можно чуть подробнее?
 
 
 
MERCURY127
 
пoнял может быть и так, это я так фигово объяснил...
 
в main'e нет ни одного окна и не обрабатываются/не получаются никакие сообщения...
 
вот формальный дельфи-код:

Код:
{$APPTYPE CONSOLE}
 
begin
  init;
 
  for i := 1 to MaxInt do begin
 
     do_one_iteration();
 
// вот тут бы клаву и ... опросить :)
 
  end;
 
  done;
end.

 
 
сейчас вожусь с GetKeyboardState() и с её отдельными элементами в виде хитрых комбинациями типа Ctrl-Alt-Shift-F12
 
но, идея с Сtrl-C мне запала в душу :)

Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 11:12 24-07-2018
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
#include <windows.h>
 
volatile int g_stopFlag;
 
BOOL __stdcall handlerProc(DWORD type)
{
    g_stopFlag = 1;
    return 1;
}
 
main()
{
    SetConsoleCtrlHandler(handlerProc, TRUE);
 
    while(!g_stopFlag)
    {
//        factorRSA4096();
    }
}

Всего записей: 1570 | Зарегистр. 01-11-2004 | Отправлено: 11:17 24-07-2018
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
звучит не очень оптимистично...

Почему?

Код:
#include <windows.h>
 
bool EscKeyPressed(HANDLE inHandle)
{
  DWORD num;
  bool ret = false;
  if( GetNumberOfConsoleInputEvents(inHandle, &num) )
  {
    INPUT_RECORD event;
    for( DWORD i = 0; i < num; i++ )
    {
      DWORD n;
      if( ReadConsoleInput(inHandle, &event, 1, &n))
      {
        if( event.EventType == KEY_EVENT && event.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE )
          ret = true;
      }
    }
  }
  return ret;
}
 
int main()
{
  HANDLE inHandle = GetStdHandle(STD_INPUT_HANDLE);
  for( ; ; )
  {
    if( EscKeyPressed(inHandle) )
      break;
  }
  return 0;
}


----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6092 | Зарегистр. 22-10-2005 | Отправлено: 11:58 24-07-2018
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens,
Abs62
 
о, братцы, спасибо большое!
 
сейчас выберу что попроще :)
 
 
 
ne_viens

Цитата:
//        factorRSA4096();
;)

Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 13:57 24-07-2018
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
 
так, твой вариант работает, вполне устраивает,
тебе спасибо и низачот за lowercase :)
 
смотрим дальше...
 
Добавлено:
 
 
ne_viens
 
у тебя тоже всё прекрасно работает...
но:
вся история нажатий остаётся в "буфере", который и высыпается по завершению,
а т.к. программа отдаётся во внешнее пользование, и там может быть чёрте чё, то для меня это критично...

Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 16:58 24-07-2018
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
ne_viens
 
 
во, победил :)
 
доработал твой вариант, добавив такие две строчки в конце:
 
 
  HANDLE stdhandle = GetStdHandle(STD_INPUT_HANDLE);
  FlushConsoleInputBuffer(stdhandle);
 
 
и всё заработало как надо, заодно научился "чистить кбд-буфер",
а то "нет такого в винде, нет!" :)
 
всем ещё раз большой, большой (десятикратный ) 10ks :)

Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 19:38 24-07-2018
SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем добрый день. Не подскажите поднимался ли на форуме вопрос по поднятию клавиатуры в callback API в вк на PHP?

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 10:25 30-08-2018 | Исправлено: SergioEmpasaDeParado, 10:26 30-08-2018
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
с ПыХаПы в "веб-программирование" лучше...

Всего записей: 24844 | Зарегистр. 06-12-2002 | Отправлено: 12:19 30-08-2018
SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Понял сяп

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 12:29 30-08-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru