Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 149

CreateProcess и SendMessage под Windows 10

02.12.2016, 16:51. Показов 2482. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал программку, которая запускает другую программу и посылает в нее сообщение (код самый простейший, из мануалов, которые тут на форуме сто приводились, ничего оригинального).
Под Windows 7x64 работает отлично, под Windows 10x64 не работают ни CreateProcess, ни FindWindow, ни SendMessage.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2016, 16:51
Ответы с готовыми решениями:

Как настроить отправку сообщений sendMessage(sendMessage)?
Доброго времени суток! Подскажите пожалуйста как решить проблему: хочу создать простого телеграм бота, чтобы поучиться java. Решил...

SendMessage в Windows XP и Windows 7
посылаю сообщение стороннему окну на ввод русской буквы, например "П" ::SendMessage(h,WS_CHAR,'П',0);В Windows XP в стороннем окне...

Epson L4150: под Windows XP работает, под Windows 7 не видит
Попросили меня установить новенький принтер. Написано на нём: Epson L4150. Распаковал, краску залил, кнопки тыкнул, страничку распечатал....

12
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.12.2016, 18:15
Может быть, для начала покажешь код?
И напишешь, что конкретно означает "не работает"?
Коды ошибок, скрины, логи, дампы...
1
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 149
02.12.2016, 18:33  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Может быть, для начала покажешь код?
И напишешь, что конкретно означает "не работает"?
Коды ошибок, скрины, логи, дампы...
Код на работе, в понедельник отпишусь с кодом.
"Не работает" - к примеру, не срабатывает CreateProcess, причем исключительно под десяткой.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.12.2016, 19:09
А что за приложение ты пытаешься запустить через CreateProcess?
0
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 149
02.12.2016, 19:15  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
А что за приложение ты пытаешься запустить через CreateProcess?
Чейнджер обоев, здесь берется: https://suwalls.com/changer/

С ним, кстати, интересный момент: пробовал прописать его старт при загрузке windows через реестр в Run - и ровно такая же история, в 7-ке запускается, в 10-ке не хочет запускается. Мистика какая-то.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.12.2016, 19:37
Ну мне сразу бросается в глаза, что:

1. Приложение использует .NET Framework. Какой версии?
Если там .NET 2.0, например, то оно на "Десятке" просто так не запустится,
нужно устанавливать нужную версию Framework сначала.

2. Приложение помечено на запуск от имени администратора (requireAdministrator в манифесте).
Это значит, что из автозагрузки оно запускаться при включенном UAC не будет (не даст
помощник по совместимости). И CreateProcess его не запустит, если у родительского
процесса нет прав администратора.

Так что пока ничего необычного
1
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 149
03.12.2016, 04:57  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Ну мне сразу бросается в глаза, что:

1. Приложение использует .NET Framework. Какой версии?
Если там .NET 2.0, например, то оно на "Десятке" просто так не запустится,
нужно устанавливать нужную версию Framework сначала.

2. Приложение помечено на запуск от имени администратора (requireAdministrator в манифесте).
Это значит, что из автозагрузки оно запускаться при включенном UAC не будет (не даст
помощник по совместимости). И CreateProcess его не запустит, если у родительского
процесса нет прав администратора.

Так что пока ничего необычного
Отключил UAC - из автозагрузки стало запускатся, но родительский процесс все равно его не запускает. По поводу различия версий NET буду смотреть в понедельник.

Добавлено через 16 минут
Цитата Сообщение от Убежденный Посмотреть сообщение
Ну мне сразу бросается в глаза, что:

1. Приложение использует .NET Framework. Какой версии?
Если там .NET 2.0, например, то оно на "Десятке" просто так не запустится,
нужно устанавливать нужную версию Framework сначала.
Кто бы знал, как там у него версия.
По поводу установок нужных версий, на компе с десяткой стоит все что можно, судя по это картинке, или нет?:

картинка

Если картинка не откроется - там видно что в "Программы и Компоненты - включение и выключение компонентов Windows" включена поддержка NET 3.5, 3.0, 2.0.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
03.12.2016, 10:24
Цитата Сообщение от MikeNew Посмотреть сообщение
но родительский процесс все равно его не запускает.
Какой код ошибки (GetLastError) после неуспешного CreateProcess?
1
 Аватар для John999
230 / 113 / 79
Регистрация: 17.10.2016
Сообщений: 312
03.12.2016, 12:58
Цитата Сообщение от MikeNew Посмотреть сообщение
Кто бы знал, как там у него версия.
Version=v4.0
декомпилятором можно посмотреть
C++
1
[assembly: TargetFramework(".NETFramework,Version=v4.0", FrameworkDisplayName=".NET Framework 4")]
даже блокнотом открыть, видно
C#
1
.NETFramework,Version=v4.0
1
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 149
05.12.2016, 07:20  [ТС]
Спасибо всем, все решилось перекомпиляцией под десяткой. Теперь работает и в семерке и в десятке.
Буду теперь знать что в таких случаях лучше компилировать сразу под самой новой платформой.

Листинг, если кому вдруг интересно:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    HWND hwndMain = FindWindow(NULL, L"SU Wallpaper Changer");
    if (hwndMain) {
 
        HWND hwnd = FindWindowEx(hwndMain, NULL, NULL, L"Change now.");
        if (hwnd) PostMessage(hwnd, BM_CLICK, (WPARAM)NULL, (LPARAM)NULL);
        else { MessageBox(NULL, L"Not find Button", L"Error", MB_OK | MB_ICONSTOP); }
    }
    else {
        STARTUPINFO si;
        ZeroMemory(&si, sizeof(STARTUPINFO));
        PROCESS_INFORMATION pi;
 
        si.cb = sizeof(STARTUPINFO);
        si.dwFlags = STARTF_USESHOWWINDOW;
        si.wShowWindow = SW_MINIMIZE;
 
        TCHAR czCommandLine[] = L"C:\\Program Files\\Suwalls\\suwalls";
        CreateProcess(NULL, czCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    }
    return 0;
}
Добавлено через 26 минут
Цитата Сообщение от Убежденный Посмотреть сообщение
Какой код ошибки (GetLastError) после неуспешного CreateProcess?
Кстати.
Почему после успешного создания процесса GetLastError под семеркой дает код ошибки "2" (под десяткой "0")?

C
1
2
3
4
5
6
7
        TCHAR czCommandLine[] = L"C:\\Program Files\\Suwalls\\suwalls";
        CreateProcess(NULL, czCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
        int Error = GetLastError();
 
        std::ofstream fout("error.txt"); 
        fout << Error;
        fout.close();
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
05.12.2016, 08:32
Цитата Сообщение от MikeNew Посмотреть сообщение
Спасибо всем, все решилось перекомпиляцией под десяткой. Теперь работает и в семерке и в десятке.
Буду теперь знать что в таких случаях лучше компилировать сразу под самой новой платформой.
Это неверное утверждение. Компиляция под другой платформой ничего не даст,
если у тебя в коде ошибка, и его поведение по-прежнему будет зависеть
от фаз луны, как в данном случае. Надо разбираться до конца, почему не
работает, а не решать проблему переходом на другую платформу,
версию Visual Studio и т.п.

Цитата Сообщение от MikeNew Посмотреть сообщение
Листинг, если кому вдруг интересно
Кстати, почему 'suwalls', а не 'suwalls.exe'? И почему командная строка не
заключена в кавычки? И где проверка ошибок?

Цитата Сообщение от MikeNew Посмотреть сообщение
Почему после успешного создания процесса GetLastError под семеркой дает код ошибки "2" (под десяткой "0")?
Потому что GetLastError, если не оговорено обратное, нужно вызывать только в
случае ошибки. В других случаях его значение не определено (т.е. "мусор").
1
8 / 8 / 0
Регистрация: 16.07.2013
Сообщений: 149
05.12.2016, 09:29  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Кстати, почему 'suwalls', а не 'suwalls.exe'?
Разве Windows не все равно, если один исполняемый файл в директории с таким именем?
Цитата Сообщение от Убежденный Посмотреть сообщение
И почему командная строка не заключена в кавычки?
Как-то не подумал. Можно строчку с правильными кавычками?
Цитата Сообщение от Убежденный Посмотреть сообщение
И где проверка ошибок?
Программа микроскопическая, сугубо для личного пользования. Проверка ошибок здесь лишний код и лишний размер программы, пусть даже это считанные байты.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
05.12.2016, 09:58
Цитата Сообщение от MikeNew Посмотреть сообщение
Разве Windows не все равно, если один исполняемый файл в директории с таким именем?
В данном случае разницы нет.

Цитата Сообщение от MikeNew Посмотреть сообщение
Можно строчку с правильными кавычками?
C
1
TCHAR czCommandLine[] = L"\"C:\\Program Files\\Suwalls\\suwalls.exe\"";
Цитата Сообщение от MikeNew Посмотреть сообщение
Программа микроскопическая, сугубо для личного пользования. Проверка ошибок здесь лишний код и лишний размер программы, пусть даже это считанные байты.
Дело вкуса.
Лично я предпочитаю в случае ошибки точно знать причину (GetLastError).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.12.2016, 09:58
Помогаю со студенческими работами здесь

Геймпад не работает под Windows 7 Pro, но работает под Windows 8 Home basic
Привет! Извиняюсь, если пишу не совсем в тот раздел - не нашел более подходящего. Проблема такая: купил себе геймпад Thrustmaster GPX...

Копирование файлов с машины под Linux на машину под Windows Server
Добрый день! Возникла такая проблема. Не знаю как подступиться к скрипту. Задача следующая: Необходимо копировать на Windows сервер...

Консультант+ на машине под Linux по сети с машины под Windows
Есть такой сложный вопрос, нужно запустить Консультант+ сетевая версия на Linux. При этом сам консультант живёт на машине с Windows

QFile.open() под Linux работает, под windows нет
QDateTime dt = QDateTime::currentDateTime(); logfilepath = &quot;log_&quot; + dt.toString() + &quot;.txt&quot;; logfilepath.replace(' ','_'); ...

Есть задача - написать FTP сервер под телефон (android) и клиент под ПК(Windows)
Здраствуйте. Есть задача - написать FTP сервер под телефон (android) и клиент под ПК(Windows). Я, мягко говоря, плаваю в этой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru