Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как получить хендл этого долбаного "Калькулятор Плюс"

30K
25 марта 2009 года
asmel
50 / / 05.03.2009
Насколько я понимаю, в результате действия приведенного кода, в hWindow должен записаться хендл открытого стандартного XP "Калькулятор Плюс". Что ни делал, в hWindow ничего не пишется. В чем проблема, может кто-нибудь подскажет?


Код:
HWND hWindow; // окно "Калькулятор Плюс"

 SHELLEXECUTEINFO SEI;
  ZeroMemory(&SEI, sizeof(SEI));

  SEI.cbSize = sizeof(SEI);
  SEI.fMask = SEE_MASK_NOCLOSEPROCESS;
  SEI.nShow = SW_SHOWNORMAL;
  SEI.lpParameters = "open";
  SEI.lpFile = "calc.exe";

  ShellExecuteEx(&SEI);
  WaitForInputIdle(SEI.hProcess, INFINITE);

  hWindow = SEI.hwnd;
294
25 марта 2009 года
Plisteron
982 / / 29.08.2003
Потому что SEI.hWnd -- это хэндл твоего окна. Точнее, хэндл того окна, которое будет владельцем системных месссэджбоксов, появляющихся в ходе выполнения функции ShellExecuteEx.
 
Код:
hWindow = FindWindow(NULL, "Калькулятор Плюс");
    SetWindowPos(hWindow, HWND_TOPMOST, 100, 100, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
30K
25 марта 2009 года
asmel
50 / / 05.03.2009
Plisteron, спасибо за ответ! По твоей логике в SEI.hWnd должен записаться хендл материнского окна, по моему коду туда ничего не пишется NULL. По команде:
ShellExecuteEx(&SEI); калькулятор открывается, но
hWindow = FindWindow(NULL, "Калькулятор Плюс"); hWindow = NULL
14
25 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: asmel
По твоей логике в SEI.hWnd должен записаться хендл материнского окна


не должен записаться, это ты его туда можешь записать

Цитата: asmel
По команде:
ShellExecuteEx(&SEI); калькулятор открывается, но
hWindow = FindWindow(NULL, "Калькулятор Плюс"); hWindow = NULL


WaitForInputIdle поставь

30K
25 марта 2009 года
asmel
50 / / 05.03.2009
Phodopus
 
Код:
ShellExecuteEx(&SEI);
  WaitForInputIdle(SEI.hProcess, INFINITE);
  hWindow = FindWindow(NULL, "Калькулятор плюс");


hWindow = NULL
14
25 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: asmel
Phodopus
 
Код:
ShellExecuteEx(&SEI);
  WaitForInputIdle(SEI.hProcess, INFINITE);
  hWindow = FindWindow(NULL, "Калькулятор плюс");

hWindow = NULL


вот ведь так и знал!

 
Код:
hWindow = FindWindow(NULL, "Калькулятор плюс");
  hWindow = FindWindow(NULL, "Калькулятор Плюс");

чуешь разницу?! а из-за тебя пришлось этот "долбаный "Калькулятор Плюс"" качать и ставить!
92
25 марта 2009 года
Тень Пса
2.2K / / 19.10.2006
Код:
LPVOID lpMsgBuf;
        HWND calc = FindWindow(_T("SciCalc"), NULL);
        //
        if (calc != NULL) {
            SetWindowText(calc, _T("Долбаный калькуляторплюс"));
        } else {
            //
            DWORD dw = GetLastError();
            FormatMessage(
                FORMAT_MESSAGE_ALLOCATE_BUFFER |
                FORMAT_MESSAGE_FROM_SYSTEM |
                FORMAT_MESSAGE_IGNORE_INSERTS |
                FORMAT_MESSAGE_FROM_HMODULE,
                NULL,
                dw,
                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                (LPTSTR) &lpMsgBuf,
                0, NULL );
            ShowMessage((LPTSTR)lpMsgBuf);
        }
благо он у меня был )

Phodopus,
[quote="MSDN"]
FindWindow Function


The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. This function does not perform a case-sensitive search.
[/quote]
30K
25 марта 2009 года
asmel
50 / / 05.03.2009
Phodopus
Цитата:
вот ведь так и знал!

Код:
hWindow = FindWindow(NULL, "Калькулятор плюс");
hWindow = FindWindow(NULL, "Калькулятор Плюс");

чуешь разницу?! а из-за тебя пришлось этот "долбаный "Калькулятор Плюс"" качать и ставить!



Убей меня бог! Не чую! Пардон, "П" большая. Но ведь в моем случае окно все равно открывается??!

14
25 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: asmel
Phodopus
Убей меня бог! Не чую! Пардон, "П" большая. Но ведь в моем случае окно все равно открывается??!


А в моем случае все находится :)

14
25 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: Тень Пса

Phodopus,
...
This function does not perform a case-sensitive search.


вижу эту строку в MSDN. Но на моей машине факты говорят об обратном. Видимо забыли -in поставить? Просто иначе предложение кажется не совсем корректно сформированным.
А вообще интересно если народ у себя потестирует! Может результат какого SPxxxxxx?
На wasm-е народ тоже упоминает о регистрозависимом, в случае русских букв, сравнении. И это еще в 2005-м году... Значит есть бажок!

1
25 марта 2009 года
kot_
7.3K / / 20.01.2000
Скорей всего баг. Кроме того - если тестируете - огласите параметры системы - сборка, сервис-пак
294
26 марта 2009 года
Plisteron
982 / / 29.08.2003
Цитата: asmel
По твоей логике в SEI.hWnd должен записаться хендл материнского окна

Не по моей, а по MSDN, и не должен записаться, а ты должен его сам туда записать перед вызовом ShellExecuteEx().
PS. Маленькое нажатие на "весы" лучше большого спасибо.

30K
26 марта 2009 года
asmel
50 / / 05.03.2009
Plisteron Да я вроде нажимал. Может опять что-то не так делаю. Я здесь недавно, опыта никакого. Попробую еще раз, но по-моему несколько раз не допускается правилами форума.
14
26 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: kot_
Скорей всего баг. Кроме того - если тестируете - огласите параметры системы - сборка, сервис-пак


Общественность (гугл) склоняет к тому что баг.
Система XP Pro VLK En со всеми доступными обновлениями на сегодняшнее число.

246
26 марта 2009 года
GIZMO
1.8K / / 30.07.2004
При поиске хендла окна можно вообще обойтись без FindWindow(Ex), тем более если она так не предсказуемо работает. Нужно найти процесс по имени, затем EnumWindowsProc пройтись по всем окнам вызвать для каждого GetWindowThreadProcessId и сравнить с тем, что в поле th32ProcessID структуры PROCESSENTRY32.

Было где-то уже, топикстартер пользуйся поиском.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог