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

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

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

MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vshersh
Ну, не работает так! Когда искал информацию по этой теме по форумам, у половины это работает, а у половины не работает, а ничего другого там не предлагалось. Видимо, от каких-то настроек Windows зависит. Я тоже брал из этого места:
Цитата:
 
// DLL Entry Point
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    hInstance;
    return _AtlModule.DllMain(dwReason, lpReserved);     
}
 

Оно дает explorer.exe (по крайней мере, у меня).
Может, как-то влияет то, что это не просто dll, а Shell Extension, может, explorer ее загружает как-то хитро ...
Abs62
Тоже отлично, но мне именно HMODULE в принципе нужен, тогда грузить не придется еще раз эту dll.

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 09:15 06-07-2007
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MrZeRo
GetModuleHandle dll не грузит (это я на случай, если через VirtualQuery всё ещё кажется слишком мудрёно ).

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 09:42 06-07-2007
koderr



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как можно определить, запущена ли программа из командной строки или нет? Т.е. хочется в зависимости от subsystem использовать printf и MessageBox. Программа изначально слинкована с ключом /SUBSYSTEM:WINDOWS, т.е. консольное окошко не выскакивает.
 
Пробую получать
Код:
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
и проверять на 0 - получается. Только не получается писать в stdout, запуская программу из cmd, - управление возвращается до завершения программы. В MSYS почему-то работает.
 
Вот код:

Код:
    if(GetStdHandle(STD_OUTPUT_HANDLE))
        printf("Subsystem: CONSOLE\n");
    else
        MessageBox(NULL, "Subsystem: WINDOWS", NULL, MB_OK);
 

Всего записей: 353 | Зарегистр. 22-06-2005 | Отправлено: 06:09 17-07-2007 | Исправлено: koderr, 15:30 17-07-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Что-то я не осилил суть проблемы... По-любому ИМХО лучше юзать функцию GetConsoleWindow().

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 14:01 17-07-2007
koderr



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Qraizer
Проблема сейчас такая: есть win32 приложение (не консольное). Если запускать его из командной строки, то не работают puts, printf и подобные; кроме того, cmd не ждет завершения моей программы, а сразу выдает command prompt (попробуйте запустить, например, calc.exe из-под cmd).

Всего записей: 353 | Зарегистр. 22-06-2005 | Отправлено: 15:38 17-07-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ага. Теперь понятно. Всё правильно - это поведение по умолчанию для GUIных приложений, ИМХО правильное. Консольный ввод/вывод не работает по причине того, что для неконсольных приложений системой не создаётся консольное окно и не распределяются стандартные handleы. Однако GUIное приложение может само это всё сделать. Смотри в AllocConsole() и по ссылкам найдёшь всё остальное, если интересно.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 14:36 18-07-2007
plazzmex



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

Код:
`INITCOMMONCONTROLSEX' undeclared (first use in this function)

при работе в wxDev-C++ совместно с компилятором minGW ?
впрограмму вставил #include <windows.h>, #include <commctrl.h>
все вроде должно работать а он пишет что INITCOMMONCONTROLSEX не декларирован..
версия wxDev-C++ 6.10.2
 
 
и есть еще вопрос,
есть программы, которые при нажатии на кнопку применить вокне настроек, обновляют главное окно программы.
я открываю окно настроек (DialogBox) меняю настройки и нажимаю на кнопку применить.
настройки пишутся в .ini файл (или реестр), но главное окно не обновляется и не принимает их. так вот мне нужно чтоб при нажатии на кнопку применить еще и обновлялось главное окно проги.
сообшения типа UpdateWindow, InvalidateRect..., обновляют только WM_PAINT, а мне нужно чтоб WM_CREATE тоже обновлялся..

Всего записей: 1123 | Зарегистр. 29-09-2005 | Отправлено: 18:56 11-08-2007
general29



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
какое сообщение получает окно, когда теряет фокус, становится неактивным?

Всего записей: 10 | Зарегистр. 16-09-2007 | Отправлено: 00:37 17-10-2007
Abs62



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

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 00:44 17-10-2007
Lyrik

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

Всего записей: 388 | Зарегистр. 04-04-2006 | Отправлено: 01:09 17-10-2007
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lyrik
Это при переключении между приложениями. Тогда уж WM_ACTIVATE.
MSDN: About Keyboard Input

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 09:12 17-10-2007
general29



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Abs62
WM_KILLFOCUS - вроде и оно. но мне хотелось бы написать прогу, которая бы всегда было бы активным, т.е. никогда не теряло бы фокус. Вроде оно, но походу надо бы еще знать ф-ию, что то типа "найти фокус"

Всего записей: 10 | Зарегистр. 16-09-2007 | Отправлено: 00:00 20-10-2007
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
general29
GetForegroundWindow. Можно ещё посмотреть на LockSetForegroundWindow.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 00:27 20-10-2007
general29



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Abs62
не пойму: GetForegroundWindow - эффекту ноль, LockSetForegroundWindow - undeclared (#include <windows.h>). Если не сложно напиши обработку сообщения WM_KILLFOCUS, чтобы окно всегда было активно

Всего записей: 10 | Зарегистр. 16-09-2007 | Отправлено: 00:35 20-10-2007
Abs62



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

Цитата:
LockSetForegroundWindow - undeclared  

Minimum operating systems: Windows Me, Windows 2000. Какие ОС и компилятор?
Вызывать её надо не в обработчике WM_KILLFOCUS, а в тот момент, когда надо запретить переключение на другие окна. В самом обработчике с окнами особо не поработаешь - "While processing this message, do not make any function calls that display or activate a window. This causes the thread to yield control and can cause the application to stop responding to messages".

Цитата:
GetForegroundWindow - эффекту ноль

А какой должен быть эффект? Эта функция возвращает хэндл текущего активного окна. А WM_KILLFOCUS посылается перед переключением на другое окно, пока фокус ещё не переключён.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 00:58 20-10-2007
general29



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Abs62
Windows XP SP2, VC++ 6.0

Всего записей: 10 | Зарегистр. 16-09-2007 | Отправлено: 01:28 20-10-2007
Abs62



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

Цитата:
VC++ 6.0

По идее должно быть... Скачай Platform SDK с microsoft.com - там точно есть.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 02:00 20-10-2007
general29



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

Цитата:
Скачай Platform SDK с microsoft.com

342 метра - для меня нереально

Всего записей: 10 | Зарегистр. 16-09-2007 | Отправлено: 09:55 20-10-2007
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
general29
Плохо - такие вещи Win-программисту нужны.
Тогда ручками - через LoadLibrary и GetProcAddress. LockSetForegroundWindow сидит в User32.dll.

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

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 12:13 20-10-2007
general29



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Abs62
Спасибо за помощь.
Вообще я только начал изучать WinAPI, так что в скором будущем может и сделаю, что задумал..

Всего записей: 10 | Зарегистр. 16-09-2007 | Отправлено: 15:34 20-10-2007
Открыть новую тему     Написать ответ в эту тему

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