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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
Можно, думаю, занести путь к искомой папке в поле ввода и программно нажать OK (послать этой кнопке WM_LBUTTONDOWN, например, или сымитировать нажатие Enter через WM_KEYDOWN/WM_KEYUP).

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 18:01 26-12-2011
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, это самое то. Только я бы использовал PostMessage с BN_CLICKED. И очистил поле ввода имени файла после этого, чтобы было аккуратненько. =)

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 14:55 27-12-2011
V0lt



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

Всего записей: 10492 | Зарегистр. 05-02-2003 | Отправлено: 01:19 15-01-2012 | Исправлено: V0lt, 12:26 15-01-2012
HNKTO



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кто знает:
Какими функциями можно в операционке переключать раскладки клавиатуры, установки раскладки по умолчанию, добавления-удаления раскладок из списка активных?
Кто в курсе - укажите направления поиска.
Всем спасибо.

Всего записей: 2092 | Зарегистр. 30-01-2010 | Отправлено: 11:07 04-03-2012
akaGM

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

Цитата:
укажите направления поиска
направление всегда одно: MSDN
ставь DDK и играйся...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 11:46 04-03-2012
Abs62



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

Цитата:
ставь DDK

Не надо так человека пугать. Не DDK, а SDK.
 
HNKTO
Правильно сказали - MSDN. Идёшь в раздел Keyboard Input и выбираешь, что надо.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 13:22 04-03-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
может у него клава какая-нибудь хитрая и он дрова её строгает...
а вообще, просто "последняя осень" :) в shuffle моде прислалась...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 17:22 04-03-2012
HNKTO



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62, спасибо.
Понятно, что в MSDN.
Но я как-бы чайник, а MSDN оччень большой. там какую-нить функцию (из абсолютно мне не знакомого раздела) можно искать очень долго.
 
akaGM, развеиваю твоё любопытство:
хочу написать программу, автоматически перенастраивающую раскладку клавиатуры перед запуском целевой  программы (в конкретном случае компьютерной игры) на для этой программы спецефичную, и возвращающей всё на место по выходу из программы.

Всего записей: 2092 | Зарегистр. 30-01-2010 | Отправлено: 22:46 04-03-2012
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HNKTO
Дык, раздел-то небольшой. И всего шесть функций для работы с раскладками.
По факту для такой задачи, думаю, могут пригодиться:
GetKeyboardLayout - возвращает текущую раскладку для конкретного потока.
LoadKeyboardLayout - загружает нужную раскладку.
ActivateKeyboardLayout - делает указанную раскладку активной.
UnloadKeyboardLayout - выгружает ранее загруженную раскладку.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 23:17 04-03-2012
kenny5705



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Странно, почему не хочет работать CreateFile в VS2010...
Вот та часть кода:
......
        HANDLE  hD = INVALID_HANDLE_VALUE;
    hD = CreateFile(      
        (LPCWSTR)"\\\\.\\C:",
        GENERIC_READ,      
        FILE_SHARE_READ | FILE_SHARE_WRITE,      
        NULL,      
        OPEN_EXISTING,      
        0,      
        NULL);    
    if( hD == INVALID_HANDLE_VALUE )
    {
        cout << "Error is: " << GetLastError() << endl;
        return false;
    };
        .......
        return true;
.......
 
И само собой возвращает false, вместо того чтобы возвратить true.
GetLastError показывает ошибку с кодом 2, что соответствует:
ERROR_FILE_NOT_FOUND   -    2 (0x2)    -    The system cannot find the file specified.
 
При этом в другом компиляторе (MiniGW GCC) замечательно работает...
Может я не так как-то запускаю?
 
Еще может кто знает, как в Dev-Cpp сделать полную поддержку winapi, а то, как оказалось, не все функции и структуры он понимает (например, увидев имя структуры STORAGE_DEVICE_NUMBER кричит "'STORAGE_DEVICE_NUMBER' was not declared in this scope" и отказывается с ней работать)

Всего записей: 468 | Зарегистр. 15-01-2009 | Отправлено: 16:38 19-05-2012
Abs62



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

Цитата:
(LPCWSTR)"\\\\.\\C:"

Вот так делать нельзя. Если функция требует юникодную строку, ей и надо давать такую строку, а не обманывать приведением указателя.

Код:
CreateFileW(L"\\\\.\\C:",...
или
CreateFile(_T("\\\\.\\C:"),...


Цитата:
При этом в другом компиляторе (MiniGW GCC) замечательно работает...

А там юникодная программа собирается или ANSI?

Цитата:
Еще может кто знает, как в Dev-Cpp сделать полную поддержку winapi

Подсунуть ему последнюю версию w32api от MinGW, надо полагать.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 17:04 19-05-2012
kenny5705



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

Цитата:
CreateFileW(L"\\\\.\\C:",...  

А что значит эта буква L, просто не раз ее уже встречаю, хотелось бы знать в чем у меня пробелы.
И как сделать чтобы вместо константы "\\\\.\\C:" использовать переменную типа char?
С L"\\\\.\\C:" - работает, спасибо.
 

Цитата:
А там юникодная программа собирается или ANSI?  

Не знаю. Как узнать, где посмотреть? И в чем разница?
 

Цитата:
Подсунуть ему последнюю версию w32api от MinGW, надо полагать.  

Не помогло, подкинул w32api-3.17-2. Проблемка сохранилась, работает не со всей библиотекой winapi. Думаю все-таки придется на VS 2010 переходить.
 
Еще вопрос.  
Так получается тоже делать нельзя:
char fullPath[ MAX_PATH ];
GetCurrentDirectory( sizeof( fullPath ), (LPWSTR)fullPath );

Всего записей: 468 | Зарегистр. 15-01-2009 | Отправлено: 18:49 19-05-2012
akaGM

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

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 18:55 19-05-2012 | Исправлено: akaGM, 18:59 19-05-2012
Abs62



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

Цитата:
А что значит эта буква L

Она значит, что это константа не CHAR, а WCHAR. Два байта на каждый символ, а не один.

Цитата:
И в чем разница?

Разница в том, какие строки и какие функции используются. Той же функции CreateFile на самом деле не существует. Есть CreateFileA, которая работает со строками с однобайтовыми символами типа CHAR, и есть CreateFileW, которая работает с двухбайтовыми символами WCHAR. А CreateFile - это макрос, который при компиляции разворачивается либо в CreateFileA, либо в CreateFileW, в зависимости от того, определёно ли UNICODE. Примерно так:

Код:
#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif

Цитата:
Так получается тоже делать нельзя:  
char fullPath[ MAX_PATH ];  
GetCurrentDirectory( sizeof( fullPath ), (LPWSTR)fullPath );

Нельзя, конечно.

Код:
TCHAR fullPath[ MAX_PATH ];  
GetCurrentDirectory( sizeof( fullPath )/sizeof(TCHAR), fullPath );


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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 19:15 19-05-2012
kenny5705



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

Цитата:
Она значит, что это константа не CHAR, а WCHAR. Два байта на каждый символ, а не один.  

Понятно.

Цитата:
#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif  

Где-то это видел уже. В общем в принципе суть уловил
 
А если использовать многобайтовую кодировку (Use Multi-Byte Character Set) в свойствах проекта, то никаких преобразований и приведений типов делать не приходиться, и вроде всё что нужно работает. Может на этом лучше остановиться?

Всего записей: 468 | Зарегистр. 15-01-2009 | Отправлено: 19:25 19-05-2012 | Исправлено: kenny5705, 19:26 19-05-2012
Abs62



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

Цитата:
Может на этом лучше остановиться?

Тогда будут проблемы с некоторыми именами файлов. С теми, где есть символы, не входящие в однобайтовую системную кодировку.
Лучше сразу научиться правильно работать с юникодом. Тем более, что с уходом со сцены Win95/98/ME неюникодные программы по сути и не нужны.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 19:56 19-05-2012
ItsJustMe

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

Цитата:
Вот так делать нельзя.

Вообще-то можно. Ибо никто пока этого законодательно не запретил. А даже, если и запретят, то в Росии все равно будет можно. Ибо в Росии на законы, как известно...
Другое дело, что прога с очень большой вероятностью упадет. Но это ведь не запрет, это всего лишь последствие гениальности программера. Так что делать так МОЖНО. Я разрешаю. Делайте на здоровье

Цитата:
Тем более, что с уходом со сцены Win95/98/ME неюникодные программы по сути и не нужны.  

Если бы... Большинство сторонних библиотек до сих пор пишутся в ANSI. А каждый раз преобразовывать A<->W, чтобы строки, возвращенные WinAPI скормить этим кривым либам накладно. Вот и приходится Use Multi-Byte. Открыть бы этим либописателям Америку - что в мире есть такая штука, как Unicode. Или просто по голове настучать...

Всего записей: 2028 | Зарегистр. 02-09-2005 | Отправлено: 03:34 22-05-2012 | Исправлено: ItsJustMe, 03:40 22-05-2012
data man



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

Цитата:
Не помогло, подкинул w32api-3.17-2. Проблемка сохранилась, работает не со всей библиотекой winapi.

Можно попробовать взять отсюда. Там пополнее.

----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 17:14 23-05-2012
kenny5705



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

Цитата:
Тогда будут проблемы с некоторыми именами файлов.

Ну если я с файлами не работаю, то и проблем у меня не будет...
А так, поживем увидим, если что поменяем.
 

Цитата:
Так что делать так МОЖНО. Я разрешаю. Делайте на здоровье  

Ну раз уж разрешаете, то пожалуй так и оставлю.
 

Цитата:
Можно попробовать взять отсюда. Там пополнее.

Да всё уже, решил отказаться от MiniGW GCC в пользу бесплатной VC2010, надеюсь в ней таких заморочек с отсутствием нужных функций winapi не будет.
 
 
Блин, ща бьюсь с получением PID/VID и GUID флешки, чет не могу не как в SetupApi этом разобраться.
В общем удалось получить след. инфу о накопителе:
VolumeMountPoint         = I:\
Drive                    = \\.\PhysicalDrive2
DosDeviceName            = \Device\Harddisk2\DP(1)0-0+5
Device Number            = 5347371722473474
Cylinders/Heads/Sectors  = 975 / 255 / 63
Bytes per sector         = 512
CHS size                 = 8019648000 ( 7.47 Gb )
Total size               = 8005918720 ( 7.46 Gb )
Free size on volume      = 4759650304 ( 4.43 Gb )
 
Хочется получить GUID флешки, чтобы в дальнейшем провернуть с ней некоторые операции, в частности извлечение и обратное подключение.

Всего записей: 468 | Зарегистр. 15-01-2009 | Отправлено: 22:20 23-05-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть простенькая програма которая делает автоустановку драйверов по hwid UpdateDriverForPlugAndPlayDevices
Бывает, на одном и том же компе и на одном и том же драйвере она выдоёт ошибку 800b0100, по гуглу нашел только это связано с подписями. Мне нужна более подробная информация по этой ошибке.

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 13:12 27-09-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 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