HLFX.Ru Forum
Показать все 72 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Вопросы по WinAPI (https://hlfx.ru/forum/showthread.php?threadid=5934)


Отправлено FiEctro 28-01-2023 в 23:20:

Вопрос по GetAsyncKeyState

Имеется программка которая записывает мои нажатые клавиши в файлик в духе:
[SPACE] 3500ms
[SPACE] 3500ms
[SPACE] 3500ms
[SPACE] 3500ms
[SPACE] 3500ms

И всё бы хорошо, но при нажатии клавиш Shift, Ctrl или Alt он генерирует лишнее пустое событие. Как от него избавиться?

3219ms
[ALT] 3219ms
3219ms
[ALT] 3219ms
3219ms
[ALT] 3219ms
3219ms
[ALT] 3219ms

Собственно сам код:

C++ Source Code:
1
#include <windows.h>
2
#include <stdio.h>
3
 
4
#define FILE_NAME "keylog.txt"
5
 
6
int main() {
7
  printf("Listen your keys, close to stop\n");
8
  remove(FILE_NAME);
9
  FILE *file = fopen(FILE_NAME, "a");
10
  if (file == NULL) {
11
    printf("Error opening file!\n");
12
    return 1;
13
  }
14
 
15
  DWORD keyCode;
16
  DWORD startTime = GetTickCount();
17
 
18
  while (1) {
19
    for (keyCode = 8; keyCode <= 190; keyCode++) {
20
 
21
 
22
      if (GetAsyncKeyState(keyCode) & 0x8000) {
23
        DWORD currentTime = GetTickCount() - startTime;
24
        if (keyCode >= 65 && keyCode <= 90) {
25
          if (!(GetAsyncKeyState(VK_SHIFT) & 0x8000)) {
26
            fputc(keyCode + 32, file);
27
          } else {
28
            fputc(keyCode, file);
29
          }
30
        } else if (keyCode >= 48 && keyCode <= 57) {
31
          fputc(keyCode, file);
32
        } else if (keyCode == VK_SPACE) {
33
          fputs("[SPACE]", file);
34
        } else if (keyCode == VK_RETURN) {
35
          fputs("[ENTER]", file);
36
        } else if (keyCode == VK_TAB) {
37
          fputs("[TAB]", file);
38
        } else if (keyCode == VK_BACK) {
39
          fputs("[BACKSPACE]", file);
40
        } else if (keyCode == VK_ESCAPE) {
41
          fputs("[ESCAPE]", file);
42
        } else if (keyCode == VK_CAPITAL) {
43
          fputs("[CAPSLOCK]", file);
44
        } else if (keyCode == VK_SHIFT) {
45
          fputs("[SHIFT]", file);
46
        } else if (keyCode == VK_CONTROL) {
47
          fputs("[CTRL]", file);
48
        } else if (keyCode == VK_MENU) {
49
          fputs("[ALT]", file);
50
        } else if (keyCode == VK_UP) {
51
          fputs("[UP]", file);
52
        } else if (keyCode == VK_DOWN) {
53
          fputs("[DOWN]", file);
54
        } else if (keyCode == VK_LEFT) {
55
          fputs("[LEFT]", file);
56
        } else if (keyCode == VK_RIGHT) {
57
          fputs("[RIGHT]", file);
58
        }
59
 
60
        fprintf(file, " %ldms\n", currentTime); // time in miliseconds
61
        fflush(file);
62
 
63
      }
64
    }
65
  }
66
 
67
  fclose(file);
68
  return 0;
69
}

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 29-01-2023 в 00:53:

FiEctro
У тебя же два шифта - левый и правый. Так же, как альты и контролы.
Полагаю, что один сканкод это общий VK_SHIFT, а второй VK_L(R)SHIFT, ну и аналогично.

Цитата:
FiEctro писал:
Как от него избавиться?

ДА НЕ КАК!!
Просто игнорируй тот из сканкодов, который тебе неинтересен.

__________________

xaerox on Vivino


Отправлено FiEctro 29-01-2023 в 19:41:

XaeroX
Спасибо. Действительно срёт дополнительно ещё левым альтом.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено FiEctro 21-02-2023 в 10:18:

Ещё такой вопрос, как можно средствами винды выводить звук асинхронно?
Пробовал с помощью Winmm использовать PlaySound, довольно просто его вызвать, и указывать флаги на синхронную и асинхронную загрузку, однако смешиваться он не умеет.

Попробовал с помощью mciSendString, вроде то что надо, но для каждого потока он в трее вызывает отдельный ffdshow audio decoder что немного выглядит нелепо, но зато звуки смешиваются

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 21-02-2023 в 14:05:

FiEctro
Напиши свой микшер для WaveMapper.
Ну или возьми из кваки.

__________________

xaerox on Vivino


Отправлено FiEctro 21-02-2023 в 15:50:

Цитата:
XaeroX писал:
Напиши свой микшер для WaveMapper.


Как это должно работать?

Цитата:
XaeroX писал:
Ну или возьми из кваки.


Мде, лучше уж тогда библиотеки внешние юзать.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 21-02-2023 в 15:58:

Цитата:
FiEctro писал:
Мде, лучше уж тогда библиотеки внешние юзать.

Чем лучше?
Тебе проще добавить в проект зависимость, за которой придётся следить, а то и править чужие баги, или потратить один день, разобраться и написать несложный модуль, который потом можно будет при желании как угодно расширять?

Добавлено 21-02-2023 в 10:58:

Цитата:
FiEctro писал:
Как это должно работать?

Да в общем-то так же, как работает любой микшер - хоть виндовский WaveMapper или DirectSound, хоть линуксовая ALSA, хоть маковский CoreAudio.
1. Открываешь устройство
2. Устанавливаешь нужные параметры вывода
3. Заполняешь буферы семплами из твоих wav-файлов (в отдельном потоке или в специальной апдейт-функции)
4. Засылаешь буферы в устройство

А, ну придётся ещё код загрузки wav-файлов написать. И ресемплирования при необходимости. В кваке это всё тоже есть.

__________________

xaerox on Vivino


Отправлено FiEctro 21-02-2023 в 15:59:

Цитата:
XaeroX писал:
Тебе проще добавить в проект зависимость, за которой придётся следить, а то и править чужие баги, или потратить один день, разобраться и написать несложный модуль, который потом можно будет при желании как угодно расширять?


Я не настолько хороший программист как ты думаешь

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 21-02-2023 в 16:43:

FiEctro
Не нужно быть хорошим программистом, чтобы выдрать звуковой движок из кваки и вставить его обратно, это даже Бумер умел.

__________________

xaerox on Vivino


Отправлено FiEctro 21-02-2023 в 16:47:

Можно кстати поподробнее про пункт 3 и ресемплирование? Я не очень понял этот момент.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 21-02-2023 в 17:38:

FiEctro в моём понимании что карту в блокноте делать, что средствами винды выводить асинхронно звук - это одно и тоже. Может тебе на завод надо?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 21-02-2023 в 17:47:

Цитата:
FiEctro писал:
Можно кстати поподробнее про пункт 3 и ресемплирование? Я не очень понял этот момент.

Ты создаёшь буфер с определённым сэмпл-рейтом, допустим 22kHz.
А вав-файлы бывают 11, 22, 44 и 48 kHz. Тебе надо при загрузке ресемплировать звук в битрейт твоего буфера. Посмотри, как это делается в кваке, там всё предельно понятно.
В халфе, впрочем, иначе - там вав-файлы не ресемплятся, а заводится несколько буферов для каждого семпл-рейта, фреймы аудио микшируются в соответствующем буфере, а потом буферы уже микшируются в общий буфер для девайса. Ну как-то так, этот момент Дядя Миша лучше прояснит, т.к. делал подобное в ксаше.

__________________

xaerox on Vivino


Отправлено FiEctro 21-02-2023 в 18:17:

Цитата:
Дядя Миша писал:
FiEctro в моём понимании что карту в блокноте делать, что средствами винды выводить асинхронно звук - это одно и тоже. Может тебе на завод надо?



Ну вот я и думаю лучше либы наверное заюзать, но все же интересно как оно работает. А по поводу пойти на завод это ты разработчикам Мелкософта предложи, не моя это прихоть. Вообще виндовые либы какие то чудоковатые.

Цитата:
XaeroX писал:
Ты создаёшь буфер с определённым сэмпл-рейтом, допустим 22kHz.
А вав-файлы бывают 11, 22, 44 и 48 kHz. Тебе надо при загрузке ресемплировать звук в битрейт твоего буфера. Посмотри, как это делается в кваке, там всё предельно понятно.
В халфе, впрочем, иначе - там вав-файлы не ресемплятся, а заводится несколько буферов для каждого семпл-рейта, фреймы аудио микшируются в соответствующем буфере, а потом буферы уже микшируются в общий буфер для девайса. Ну как-то так, этот момент Дядя Миша лучше прояснит, т.к. делал подобное в ксаше.


Понятно, спасибо, поковыряю, хотя скорее врядли что то пойму, в коде кваки логика для меня не очень понятная.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 21-02-2023 в 18:25:

Цитата:
FiEctro писал:
А по поводу пойти на завод это ты разработчикам Мелкософта предложи, не моя это прихоть.

Ну тогда надо вообще всем разработчикам ОС предъявить, чего мелочиться. Это в какой же ОС ты из коробки видел асинхронное проигрывание и микширование звуков? Самый простой вариант - DirectSound, но и он потребует кое-каких усилий.
Цитата:
FiEctro писал:
лучше либы наверное заюзать

Сейчас те, кто хочет программировать, не вникая в низкий уровень, юзают SDL. Смотрел в этом направлении?

__________________

xaerox on Vivino


Отправлено FiEctro 21-02-2023 в 18:41:

Цитата:
XaeroX писал:
Сейчас те, кто хочет программировать, не вникая в низкий уровень, юзают SDL. Смотрел в этом направлении?


Да очень поверхностно. Кстати тоже хороший вариант.

Добавлено 21-02-2023 в 21:41:

Цитата:
XaeroX писал:
Ну тогда надо вообще всем разработчикам ОС предъявить, чего мелочиться. Это в какой же ОС ты из коробки видел асинхронное проигрывание и микширование звуков?


Ну почему же оно как бы и реализовано, но как я писал выше очень странно и нелогично. Майкрософт и народ из гугла просто предлагает вызывать их напрямую что я и делал, а вы говорите что нужно писать в общий буфер. Вот и не понятно зачем они тогда людей путают?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 21-02-2023 в 22:06:

Цитата:
XaeroX писал:
Ну как-то так, этот момент Дядя Миша лучше прояснит, т.к. делал подобное в ксаше.

Там просто рэсемпл на лету с одновременным рендерингом.
Теоретически так качество немного лучше, т.к. идёт предумножение на громкость прямо в реалтайме.

Цитата:
FiEctro писал:
Вообще виндовые либы какие то чудоковатые.

Этим либам уже 40 лет некоторым, они старше тебя.

Ты объясни что ты хочешь сделать? Если ты на завод хочешь, так и иди себе. А если хочешь звуки микшировать - так микшируй.

Добавлено 22-02-2023 в 01:06:

Картинка втему!

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 22-02-2023 в 05:53:

Цитата:
Дядя Миша писал:
Ты объясни что ты хочешь сделать? Если ты на завод хочешь, так и иди себе. А если хочешь звуки микшировать - так микшируй.


Чего тебя это так задело? Что я хочу я написал на предыдущей странице. Просто чтобы звуки нормально смешивались и воспроизводились.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 22-02-2023 в 08:02:

Цитата:
FiEctro писал:
Просто чтобы звуки нормально смешивались и воспроизводились

Так у тебя же есть Юнити. Он не умеет микшировать звуки? Или ты может свой движок пишешь или что?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 22-02-2023 в 08:25:

Цитата:
Дядя Миша писал:
Или ты может свой движок пишешь или что?


Это отдельный от Юнити проект, чисто на крестах, движком сложно назвать, скорее просто приложение. Потому тянуть к себе половину кваки не очень хотелось.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 22-02-2023 в 09:22:

Цитата:
FiEctro писал:
движком сложно назвать, скорее просто приложение

Чем больше информации ты выдашь, тем более дельный совет получишь.
Потому что просто приложению незачем звуки микшировать.
Да и вообще большинство приложений не издаёт никаких звуков, так уж исторически сложилось, что звук на компьютеры завезли только в конце 80-х.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 22-02-2023 в 11:02:

Дядя Миша
Простенький 2д платформер. Делаю скорее для себя и врядли буду оформлять его в готовый проект и релизить. Я решил просто немного вообще функционал винапи подучить чтобы потом всякие программки писать для личных нужд. Ну не цеплять же Юнити каждый раз. Но наверное всё же в будущем на питон перейду, там всё намного удобнее, а в крестах надо почти всегда прописывать какое то низкоуровневое дрочево (для кого то это конечно плюс, но не для меня).

Вообще в интернете как то мало инфы по винапи, а та что есть очень поверхностная, и порой устаревшая. Спасает только нейросеть, но и она порой дико тупит.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 22-02-2023 в 14:24:

Цитата:
FiEctro писал:
Я решил просто немного вообще функционал винапи подучить чтобы потом всякие программки писать для личных нужд.

Помоему ты ставишь телегу поперёд лошади. Тебе нужно что? Знание WinAPI или программки для личных нужд? Очевидно второе. Так вот и пиши программки, а WinAPI в процессе подтянешь. Ты в любом случае не выучишь ВЕСЬ WinAPI, т.к. там тысячи функций. Причём большая часть из них тебе скорее всего никогда и не понадобится.

Цитата:
FiEctro писал:
а в крестах надо почти всегда прописывать какое то низкоуровневое дрочево

Так фреймворки же есть.

Цитата:
FiEctro писал:
Спасает только нейросеть, но и она порой дико тупит.

Дожыли. А живых людей на форумах спросить, не? Нейросеть тебе небось не посоветует посмотреть код из кваки, я отчего-то уверен.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 22-02-2023 в 15:38:

Цитата:
Дядя Миша писал:
Нейросеть тебе небось не посоветует посмотреть код из кваки, я отчего-то уверен.


Я там все равно ничего не пойму

Цитата:
Дядя Миша писал:
Так фреймворки же есть.


Пожалуй да, стоит пока на них поработать.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Gandalv 24-02-2023 в 09:08:

Не хочу никоо задеть, но имхо изучать винапи, чтобы писать

Цитата:
программки для личных нужд

в 2023 году это какое-то странное занятие.
Есть же человеческий C# и WPF, в котором все намного быстрее делается. Или там какой-то прямо низкоуровневый функционал нужен?

__________________
Углеродные звезды с древними спутниками, которые колонизируют разумные грибы...
Газовые гиганты, на которых обитает метеорологический разум...
Миры, растянутые на мембранах, где измерения пересекаются...
Это невозможно описать нашим ограниченным языком...


Отправлено FiEctro 10-04-2023 в 09:35:

Цитата:
Gandalv писал:
Есть же человеческий C# и WPF, в котором все намного быстрее делается. Или там какой-то прямо низкоуровневый функционал нужен?


Да чисто по фану кресты поковырять, шарп тоже учу параллельно, они довольно похожи. И звук впринципе нашел откуда выцапать. Обычный DirectSound, а для графики DirectX, он уже из коробки поддерживает некоторое количество форматов текстур и умеет работать с прозрачностью.

Больше всего в крестах бесит куча разных форматов строк, которые ещё не так просто сконвертировать. На кой чёрт их тут столько, я не знаю.

Цитата:
Gandalv писал:
Не хочу никоо задеть, но имхо изучать винапи, чтобы писать


Винапи и в шарпах есть, но там попроще.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено FiEctro 27-04-2023 в 10:50:

Такой вопрос по винапи: реально ли посредством C++ и винапи отрисовать кнопку в другом запущенном окне другого процесса, например cmd.exe или notepad.exe? Например я получил модуль приложения, могу обращаться к его памяти, но что мне делать дальше? Нужно ли для этого получать hInstance и что он должен возвращать? В интернете мало инфы на эту тему.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 27-04-2023 в 11:14:

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

Добавлено 27-04-2023 в 14:14:

Единственное что - добавив новый контрол ты не добавишь этой программе функциональности. Т.е. нажатие кнопки не будет ничем обрабатываться.
Ну оно как бы и очевидно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 27-04-2023 в 11:56:

Цитата:
Дядя Миша писал:
Я думаю надо искать окошко по его имени. Вообще - вполне реально, почему нет.


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

Цитата:
Дядя Миша писал:
Вспоминай шуточные программы, которые на всех диалогах заменяли слова Да\Нет\Отмена на Пофиг\Нафиг\Нефиг.


Одно дело изменить уже существующий элемент, другое дело добавить новый. Я находил программы которые позволяют двигать элементы интерфейса и менять им флаги, но не знаю, можно ли таким макаром добавлять новые?

Цитата:
Дядя Миша писал:
Единственное что - добавив новый контрол ты не добавишь этой программе функциональности. Т.е. нажатие кнопки не будет ничем обрабатываться.


Можно подробнее? Ну сама то кнопка жмакаться будет? По идее можно из памяти событие отловить? Меня смущает этот hInstance который нужно указывать при создании кнопки. Как он работает?

C++ Source Code:
1
CreateWindow(
2
L"BUTTON",  // Predefined class; Unicode assumed
3
L"OK",      // Button text
4
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // Styles
5
10,         // x position
6
10,         // y position
7
100,        // Button width
8
100,        // Button height
9
hWnd,     // Окно которое получаю по имени .exe процесса.
10
NULL,       // No menu.
11
(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), // вот эта фигня у меня возвращает 0x0000000000000000 как это проверить?
12
NULL);      // Pointer not needed.
13
 


__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 27-04-2023 в 12:28:

C++ Source Code:
1
WINUSERAPI
2
HWND
3
WINAPI
4
CreateWindowExA(
5
DWORD dwExStyle,
6
LPCSTR lpClassName,
7
LPCSTR lpWindowName,
8
DWORD dwStyle,
9
int X,
10
int Y,
11
int nWidth,
12
int nHeight,
13
HWND hWndParent ,
14
HMENU hMenu,
15
HINSTANCE hInstance,
16
LPVOID lpParam);

hInstance - это инстанс модуля .exe. Для создания окошек внутри своего приложения он равен нулю и это нормально. Для создания окошек внутри чужого, очевидно надо его как-то найти. Я подобными вещами не занимался, поэтому не знаю, как это делается, но подобные функции в WinAPI есть 100%.
hWndParent - это хэндл родительского окна, т.е. окна на которое ты хочешь добавить свой контрол. Ещё обрати внимание - очень важно указать правильный className, его нельзя вбивать от балды, он должен совпадать с класснеймом, используемым для того окна, на которое ты хочешь добавить контрол. Иначе ничего не получится. Класснеймов таких приложение может использовать несколько, но зачастую и одного достаточно.

Добавлено 27-04-2023 в 15:28:

А и ещё важный момент. В винде есть зарезервированные класснеймы, такие как EDIT, COMBOBOX, BUTTON и прочие. Они используются вот как раз для создания функциональных элементов.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 27-04-2023 в 12:37:


Ну вот к примеру. Что с чем соотносится?

Цитата:
Дядя Миша писал:
hWndParent - это хэндл родительского окна, т.е. окна на которое ты хочешь добавить свой контрол. Ещё обрати внимание - очень важно указать правильный className,


Т.е. он имя класса должен возвращать? Как вообще правильно перевести хендл? Везде так пишут, но я всеравно не понимаю смысла.

Цитата:
Дядя Миша писал:
hInstance - это инстанс модуля .exe.


Т.е. это просто модуль записанный в память? А сдвиг ему нужен какой?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 27-04-2023 в 13:13:

Цитата:
FiEctro писал:
Т.е. он имя класса должен возвращать?

Ну какого класса? Хэндл это абстрактный термин, за которым может скрываться всё что угодно. Это типа указателя, но безопасного. Хотя зачастую безопасностью там и не пахнет.
Грубо говоря, адрес в памяти - это указатель. А хэндл - это какое-то уникальное число, зачастую весьма небольшое. Которое используется в качестве индекса в доступе к массиву. Прикол в том, что мелкомягкие зачастую оформляют хэндлы в виде указателей или вообще смешивают оба понятия, причём такой хэндл может вообще не ссылаться ни на какой реальный адрес. Т.е. если ты такой хэндл попытаешься использовать как адрес, он тебя приведёт к чорту на рага.

Цитата:
FiEctro писал:
Т.е. это просто модуль записанный в память?

Я не знаю, откуда там указатель берётся. Скорее всего это тоже очередной хэндл. Оно так страшно выглядит, потому что в старых виндах были реальные указатели, которые потом обмазали толстенным слоем абстракций.
Как раз к Win2K это всё и оформилось в теперешнем виде.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 27-04-2023 в 18:09:

Вот такой код получился, в данном случае для виндовс медиа плеера когда он в режиме скин хост. Вроде всё находит, а что дальше?

C++ Source Code:
1
#include <Windows.h>
2
#include <TlHelp32.h>
3
#include <iostream>
4
#include <tchar.h>
5
#include <vector>
6
#include <stdlib.h>
7
#include <psapi.h>
8
using namespace std;
9
int main()
10
{
11
  // Имя класса окна
12
  const wchar_t* className = L"WMP Skin Host";
13
 
14
  // Получение хендла окна по имени класса
15
  HWND hWnd = FindWindow(className, nullptr);
16
  if (hWnd == NULL)
17
  {
18
    std::cout << "Window not found" << std::endl;
19
    // return 0;
20
  }
21
  else
22
  {
23
    std::cout << "Window: " << hWnd << std::endl;
24
  }
25
 
26
  // Получение хендла родительского окна
27
  HWND hParent = GetParent(hWnd);
28
  if (hParent == NULL)
29
  {
30
    std::cout << "Parent window not found" << std::endl;
31
    // return 0;
32
  }
33
  else
34
  {
35
    std::cout << "Handle parent window: " << hParent << std::endl;
36
  }
37
 
38
  // Получение идентификатора процесса
39
  DWORD processId;
40
  DWORD threadId = GetWindowThreadProcessId(hWnd, &processId);
41
  if (threadId == 0 || processId == 0)
42
  {
43
    std::cout << "Not process id" << std::endl;
44
    // return 0;
45
  }
46
  else
47
  {
48
    std::cout << "Process id: " << processId << std::endl;
49
  }
50
 
51
  // Получение хендла процесса
52
  HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processId);
53
  if (hProcess == NULL)
54
  {
55
    std::cout << "Not handle process" << std::endl;
56
    // return 0;
57
  }
58
  else
59
  {
60
    std::cout << "Handle proces: " << hProcess << std::endl;
61
  }
62
 
63
 
64
  HINSTANCE hInstance = reinterpret_cast<HINSTANCE>(GetWindowLongPtr(hWnd, GWLP_HINSTANCE));
65
  if (hInstance == NULL)
66
  {
67
    std::cout << "Not handle instance module" << std::endl;
68
    CloseHandle(hProcess);
69
    return 0;
70
  }
71
  else
72
  {
73
    std::cout << "Handle instanse module: " << hInstance << std::endl;
74
  }
75
 
76
  //CloseHandle(hProcess);
77
  system("pause");
78
  return 0;
79
}


__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 27-04-2023 в 19:29:

Ну что дальше? Дальше добавляй туда свою кнопку или что ты хотел добавить?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 27-04-2023 в 22:20:

C++ Source Code:
1
#include <Windows.h>
2
#include <psapi.h>
3
#include <iostream>
4
 
5
#pragma comment(lib, "psapi.lib")
6
using namespace std;
7
 
8
int main()
9
{
10
  // Имя класса окна
11
  const wchar_t* className = L"sflRootWindow";
12
 
13
  // Получение хендла окна по имени класса
14
  HWND hWnd = FindWindow(className, nullptr);
15
  if (hWnd == NULL)
16
  {
17
    std::cout << "Window not found" << std::endl;
18
    // return 0;
19
  }
20
  else
21
  {
22
    std::cout << "Window: " << hWnd << std::endl;
23
  }
24
 
25
  // Получение хендла родительского окна
26
  HWND hParent = GetParent(hWnd);
27
  if (hParent == NULL)
28
  {
29
    std::cout << "Parent window not found" << std::endl;
30
    // return 0;
31
  }
32
  else
33
  {
34
    std::cout << "Handle parent window: " << hParent << std::endl;
35
  }
36
 
37
  // Получение идентификатора процесса
38
  DWORD processId;
39
  DWORD threadId = GetWindowThreadProcessId(hWnd, &processId);
40
  if (threadId == 0 || processId == 0)
41
  {
42
    std::cout << "Not process id" << std::endl;
43
    // return 0;
44
  }
45
  else
46
  {
47
    std::cout << "Process id: " << processId << std::endl;
48
  }
49
 
50
  // Получение хендла процесса
51
  HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS/*PROCESS_QUERY_INFORMATION | PROCESS_VM_READ*/, FALSE, processId);
52
  if (hProcess == NULL)
53
  {
54
    std::cout << "Not handle process" << std::endl;
55
    // return 0;
56
  }
57
  else
58
  {
59
    std::cout << "Handle proces: " << hProcess << std::endl;
60
  }
61
 
62
 
63
  HINSTANCE hInstance = reinterpret_cast<HINSTANCE>(GetWindowLongPtr(hWnd, GWLP_HINSTANCE));
64
  if (hInstance == NULL)
65
  {
66
    std::cout << "Not handle instance module" << std::endl;
67
    CloseHandle(hProcess);
68
    return 0;
69
  }
70
  else
71
  {
72
    std::cout << "Handle instanse module: " << hInstance << std::endl;
73
  }
74
 
75
  // Размеры и положение кнопки
76
  int x = 50;
77
  int y = 50;
78
  int width = 150;
79
  int height = 30;
80
 
81
  // Создание кнопки
82
  HWND hButton = CreateWindowEx(0, L"BUTTON", L"Press me", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, x, y, width, height, hWnd/*hParent*/, NULL, hInstance, NULL);
83
  std::cout << "Button info: " << hButton << std::endl;
84
  if (hButton == NULL)
85
  {
86
    std::cout << "Button not created!" << std::endl;
87
    CloseHandle(hProcess);
88
    return 0;
89
  }
90
  else
91
  {
92
    std::cout << "Button created!" << std::endl;
93
  }
94
  // CloseHandle(hProcess);
95
  system("pause");
96
  return 0;
97
}


Не получается, при обращении к hButton пишет Вызвано исключение по адресу 0x00007FF8A32E2B26 (ntdll.dll) в my.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x0000000140000000. Правда тут я обращаюсь напрямую к родительскому окну, но и с дочерними такая же фигня. Если запускать отдельно от студии, оно вроде даже пишет что кнопка таки создана и даже получает её адрес. Но при этом целевое окно просто зависает и бесконечно крутится, кнопка так же не рисуется.

Добавлено 28-04-2023 в 01:20:

Заработало! Надо было всего то добавить обработчик мессаг.
C++ Source Code:
1
MSG msg;
2
 
3
// Создание кнопки
4
HWND hButton = CreateWindowEx(0, L"BUTTON", L"Press me", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, x, y, width, height, hWnd/*hParent*/, NULL, hInstance, NULL);
5
 
6
ShowWindow(hWnd, SW_SHOW);
7
UpdateWindow(hWnd);
8
while (GetMessage(&msg, NULL, 0, 0))
9
{
10
  TranslateMessage(&msg);
11
  DispatchMessage(&msg);
12
}
13
return (int)msg.wParam;


Теперь другой вопрос, кнопка рисуется под элементами, как ей задать сортировку по глубине?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 28-04-2023 в 01:10:

Цитата:
FiEctro писал:
кнопка рисуется под элементами

Попробуй WS_CLIPSIBLINGS.

__________________

xaerox on Vivino


Отправлено FiEctro 28-04-2023 в 10:53:

Цитата:
XaeroX писал:
Попробуй WS_CLIPSIBLINGS.


Кнопка начинает рисоваться как отдельное окно

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 28-04-2023 в 11:52:

FiEctro ты объясни что ты хочешь в итоге получить-то?
Просто балуешься?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 28-04-2023 в 12:21:

Хочу в прогу к которой не имею сорцев вставить свои кнопки. Ну и через память управлять процессами в ней, чтобы упростить несколько рутинных действий. Что то вроде трейнера, только для проги, а не игр. В целом почти получилось, осталось только разобраться как получать хендлы других классов окна и как сделать чтобы кнопку жмакать можно было. Ну и так в целом с формами и указателями попрактиковаться.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 28-04-2023 в 13:12:

Цитата:
FiEctro писал:
и как сделать чтобы кнопку жмакать можно было

Да жмакать-то её несложно, а куда ты собрался отправлять команду?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 28-04-2023 в 16:05:

Цитата:
Дядя Миша писал:
Да жмакать-то её несложно, а куда ты собрался отправлять команду?


WriteProcessMemory();

Интересно, а хандл у процесса и окна которое мы ищем через класс - разные?

вместо имени окна, ловится MSCTFIME UI, ну ладно тогда костылём попробую из памяти вытащить имя окна.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 28-04-2023 в 16:34:

Ты гляди, винду запореш, как на форум ходить будешь?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 28-04-2023 в 17:14:

Цитата:
Дядя Миша писал:
Ты гляди, винду запореш, как на форум ходить будешь?


Да не страшно, она и так запорота. Всё жду новый диск. Мне интересно как получить текст заголовка окна зная модуль и инстанс окна?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 28-04-2023 в 18:32:

FiEctro ищи функцию в WinAPI, она должна быть.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 28-04-2023 в 18:55:

Почему некоторые элементы перезатирают кнопку (например когда кнопку перекрывает панель задач)? Её как то пересоздавать надо? Или обновлять?


Цитата:
Дядя Миша писал:
FiEctro ищи функцию в WinAPI, она должна быть.


Я нашел способ просто получать все открытые окна и сравнивать их с тем что мне нужно, не знаю насколько это корректно.
C++ Source Code:
1
BOOL CALLBACK enumWindowsProc(HWND hWnd, LPARAM lParam)
2
{
3
  std::vector<char> buffer(1024);
4
  int len = GetWindowTextA(hWnd, buffer.data(), buffer.size());
5
  if (len > 0) {
6
    std::string windowTitle(buffer.data(), len);
7
    std::string searchTitle("MyAppName");
8
    if (windowTitle.find(searchTitle) != std::string::npos) {
9
      // std::cout << windowTitle << std::endl;
10
      title = windowTitle;
11
 
12
      return FALSE;
13
    }
14
  }
15
  return TRUE;
16
}

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 28-04-2023 в 19:35:

Цитата:
FiEctro писал:
Её как то пересоздавать надо? Или обновлять?

WM_PAINT же.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 28-04-2023 в 20:35:

Как работает WindowProc? Как он вообще вызывается?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 29-04-2023 в 05:09:

По дефолту он создаётся для класса. Но можно его переопределить для каждого окна. Вызывается он вот как раз то ли в GetMessage то ли в TranslateMessage, непомню точно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 29-04-2023 в 08:54:

Как получить хандл конкретного дочернего окна?

C++ Source Code:
1
BOOL CALLBACK EnumChildProc(HWND childHwnd, LPARAM lParam)
2
{
3
  cout << "Child Window: " << childHwnd << endl;
4
  return TRUE;
5
}


Они каждый раз разные и их позиция тоже, а имя класса у них у всех одинаковое.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 29-04-2023 в 14:07:

Что-то я уже совсем утерял нить - причём тут GetAsyncKeyState?

__________________

xaerox on Vivino


Отправлено FiEctro 29-04-2023 в 15:50:

Цитата:
XaeroX писал:
Что-то я уже совсем утерял нить - причём тут GetAsyncKeyState?



C ним уже разобрался. Сейчас просто ковыряю винапи. С дочерними окнами тоже разобрался.

Вопрос всё с обработчиком кнопок:
C++ Source Code:
1
LRESULT CALLBACK ButtonProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
2
{
3
  std::cout << "ButtonProc" << std::endl;
4
  switch (msg)
5
  {
6
  case WM_COMMAND:
7
      if (HIWORD(wParam) == BN_CLICKED && hwnd == hButton)
8
      {
9
        std::cout << "Button pressed" << std::endl;
10
      }
11
    break;
12
  default:
13
      return DefWindowProc(hwnd, msg, wParam, lParam);
14
  }
15
  return 0;
16
}



и собственно как я создаю саму кнопку:

C++ Source Code:
1
MSG msg;
2
int ID_BUTTON = 1;
3
int x = 0;
4
int y = 0;
5
int width = 120;
6
int height = 30;
7
 
8
hButton = CreateWindowEx(0, L"BUTTON", L"Press me", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, x, y, width, height, chWnd1/*hParent*/, (HMENU)ID_BUTTON, hInstance, NULL);
9
 
10
SetWindowLongPtr(hButton, GWLP_WNDPROC, (LONG_PTR)ButtonProc);
11
 
12
while (GetMessage(&msg, NULL, 0, 0))
13
{
14
 
15
 
16
  TranslateMessage(&msg);
17
  DispatchMessage(&msg);
18
}
19
return (int)msg.wParam;
20
 


Если использую SetWindowLongPtr(hButton,GWLP_WNDPROC, (LONG_PTR)ButtonProc); то кнопка пропадает, но зато вызывается обработчик ButtonProc когда я навожу на него мышь. ЧЯДНТ?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 29-04-2023 в 16:08:

Может, тебе надо сначала получить старый обработчик, и потом вызывать его в твоём вместо DefWindowProc?

__________________

xaerox on Vivino


Отправлено FiEctro 29-04-2023 в 18:22:

Цитата:
XaeroX писал:
Может, тебе надо сначала получить старый обработчик, и потом вызывать его в твоём вместо DefWindowProc?



Что подразумевается под старым обработчиком?

Если я правильно понял то это:
lpfnOldWndProc = (WNDPROC)GetWindowLongPtr(hWnd, GWLP_WNDPROC);

и в обработчике вызывать это:
CallWindowProc(lpfnOldWndProc, hwnd, msg, wParam, lParam);

ну ничего не произошло интересного, lpfnOldWndProc получает нули, как от родителя, так и от дочерних, ButtonProc при этом начинает вызываться бесконечно.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 29-04-2023 в 18:28:

Цитата:
FiEctro писал:
hWnd

hButton

__________________

xaerox on Vivino


Отправлено FiEctro 30-04-2023 в 00:13:

Кнопка вроде как начала рисоваться и получает адрес отличный от нуля, в остальном поведение схожее с DefWindowProc, т.е. при наведении вызывается ButtonProc, но при клике на кнопку ничего не происходит.

C++ Source Code:
1
LRESULT CALLBACK ButtonProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
2
{
3
  //   std::cout << "ButtonProc" << std::endl;
4
  switch (msg)
5
  {
6
  case WM_COMMAND:
7
      if (HIWORD(wParam) == BN_CLICKED && hwnd == hButton)
8
      {
9
        std::cout << "Button pressed" << std::endl;
10
      }
11
    break;
12
  default:
13
      // return 0;
14
    return  CallWindowProc(lpfnOldWndProc, hwnd, msg, wParam, lParam);
15
  }
16
  return 0;
17
}


В функции int main() консольного приложения:
C++ Source Code:
1
MSG msg;
2
int x = 0;
3
int y = 0;
4
int width = 120;
5
int height = 30;
6
hButton = CreateWindowEx(0, L"BUTTON", L"Press me", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, x, y, width, height, chWnd1/*hParent*/, (HMENU)ID_BUTTON, hInstance, NULL);
7
lpfnOldWndProc = (WNDPROC)GetWindowLongPtr(hButton, GWLP_WNDPROC);
8
 
9
std::cout << "Button pointer: " << lpfnOldWndProc << std::endl;
10
 
11
SetWindowLongPtr(hButton, GWLP_WNDPROC, (LONG_PTR)ButtonProc);
12
 
13
 
14
while (GetMessage(&msg, NULL, 0, 0))
15
{
16
  TranslateMessage(&msg);
17
  DispatchMessage(&msg);
18
}
19
return (int)msg.wParam;




UPD: Вроде как отлавливает нажатия, при жмакании левой кнопкой мыши на мою кнопку значения внутри ButtonProc выдаёт такие:
msg: 243 wParam: 1 lParam: 0
чтобы это не значило (хотя иногда wParam бывает равен и 0), пока не знаю как правильно в винапи их отследить, очередные магические числа. Надеюсь они не меняются от запуска к запуску.

Вот небольшой лог:
C++ Source Code:
1
MSG: 126 wParam: 32 lParam: 70780800
2
MSG: 26 wParam: 42 lParam: 612296422360
3
MSG: 26 wParam: 46 lParam: 612296422360
4
MSG: 15 wParam: 0 lParam: 0
5
MSG: 133 wParam: 1 lParam: 0
6
MSG: 20 wParam: 18446744073155981989 lParam: 0
7
MSG: 15 wParam: 0 lParam: 0
8
MSG: 133 wParam: 1 lParam: 0
9
MSG: 20 wParam: 18446744073155981989 lParam: 0
10
MSG: 15 wParam: 0 lParam: 0
11
MSG: 133 wParam: 1 lParam: 0
12
MSG: 20 wParam: 18446744072266791344 lParam: 0
13
MSG: 15 wParam: 0 lParam: 0
14
MSG: 133 wParam: 1 lParam: 0
15
MSG: 20 wParam: 18446744072266791344 lParam: 0
16
MSG: 15 wParam: 0 lParam: 0
17
MSG: 133 wParam: 1 lParam: 0
18
MSG: 20 wParam: 18446744072266791344 lParam: 0
19
MSG: 15 wParam: 0 lParam: 0
20
MSG: 133 wParam: 1 lParam: 0
21
MSG: 20 wParam: 18446744071847359961 lParam: 0
22
MSG: 132 wParam: 0 lParam: 66846847
23
MSG: 32 wParam: 1118670 lParam: 33554433
24
MSG: 512 wParam: 0 lParam: 1376375
25
MSG: 132 wParam: 0 lParam: 66650236
26
MSG: 32 wParam: 1118670 lParam: 33554433
27
MSG: 512 wParam: 0 lParam: 1179764
28
MSG: 132 wParam: 0 lParam: 66584696
29
MSG: 32 wParam: 1118670 lParam: 33554433
30
MSG: 512 wParam: 0 lParam: 1114224
31
MSG: 15 wParam: 0 lParam: 0
32
MSG: 133 wParam: 1 lParam: 0
33
MSG: 20 wParam: 18446744072266791344 lParam: 0
34
MSG: 132 wParam: 0 lParam: 66388085
35
MSG: 32 wParam: 1118670 lParam: 33554433
36
MSG: 512 wParam: 0 lParam: 917613
37
MSG: 132 wParam: 0 lParam: 66257009
38
MSG: 32 wParam: 1118670 lParam: 33554433
39
MSG: 512 wParam: 0 lParam: 786537
40
MSG: 132 wParam: 0 lParam: 66257006
41
MSG: 32 wParam: 1118670 lParam: 33554433
42
MSG: 512 wParam: 0 lParam: 786534
43
MSG: 132 wParam: 0 lParam: 66191468
44
MSG: 32 wParam: 1118670 lParam: 33554433
45
MSG: 512 wParam: 0 lParam: 720996
46
MSG: 132 wParam: 0 lParam: 66191467
47
MSG: 32 wParam: 1118670 lParam: 33554433
48
MSG: 512 wParam: 0 lParam: 720995
49
MSG: 132 wParam: 0 lParam: 66125930
50
MSG: 32 wParam: 1118670 lParam: 33554433
51
MSG: 512 wParam: 0 lParam: 655458
52
MSG: 132 wParam: 0 lParam: 66125929
53
MSG: 32 wParam: 1118670 lParam: 33554433
54
MSG: 512 wParam: 0 lParam: 655457
55
MSG: 132 wParam: 0 lParam: 66125928
56
MSG: 32 wParam: 1118670 lParam: 33554433
57
MSG: 512 wParam: 0 lParam: 655456
58
MSG: 132 wParam: 0 lParam: 66125928
59
MSG: 33 wParam: 2364392 lParam: 33619969
60
MSG: 32 wParam: 1118670 lParam: 33619969
61
MSG: 513 wParam: 1 lParam: 655456
62
MSG: 7 wParam: 2364392 lParam: 0
63
MSG: 243 wParam: 1 lParam: 0
64
MSG: 514 wParam: 0 lParam: 655456
65
MSG: 243 wParam: 0 lParam: 0
66
MSG: 132 wParam: 0 lParam: 66125928
67
MSG: 32 wParam: 1118670 lParam: 33554433
68
MSG: 512 wParam: 0 lParam: 655456
69
MSG: 132 wParam: 0 lParam: 66125928
70
MSG: 32 wParam: 1118670 lParam: 33554433
71
MSG: 512 wParam: 0 lParam: 655456
72
MSG: 132 wParam: 0 lParam: 66125928
73
MSG: 33 wParam: 2364392 lParam: 33619969
74
MSG: 32 wParam: 1118670 lParam: 33619969
75
MSG: 515 wParam: 1 lParam: 655456
76
MSG: 243 wParam: 1 lParam: 0
77
MSG: 512 wParam: 1 lParam: 655456
78
MSG: 243 wParam: 1 lParam: 0
79
MSG: 514 wParam: 0 lParam: 655456
80
MSG: 243 wParam: 0 lParam: 0
81
MSG: 132 wParam: 0 lParam: 66125928
82
MSG: 32 wParam: 1118670 lParam: 33554433
83
MSG: 512 wParam: 0 lParam: 655456
84
MSG: 132 wParam: 0 lParam: 66125928
85
MSG: 33 wParam: 2364392 lParam: 33619969
86
MSG: 32 wParam: 1118670 lParam: 33619969
87
MSG: 513 wParam: 1 lParam: 655456
88
MSG: 243 wParam: 1 lParam: 0
89
MSG: 514 wParam: 0 lParam: 655456
90
MSG: 243 wParam: 0 lParam: 0
91
MSG: 132 wParam: 0 lParam: 66125928
92
MSG: 32 wParam: 1118670 lParam: 33554433
93
MSG: 512 wParam: 0 lParam: 655456
94
MSG: 132 wParam: 0 lParam: 66125928
95
MSG: 33 wParam: 2364392 lParam: 33619969
96
MSG: 32 wParam: 1118670 lParam: 33619969
97
MSG: 515 wParam: 1 lParam: 655456
98
MSG: 243 wParam: 1 lParam: 0
99
MSG: 514 wParam: 0 lParam: 655456
100
MSG: 243 wParam: 0 lParam: 0
101
MSG: 132 wParam: 0 lParam: 66125928
102
MSG: 32 wParam: 1118670 lParam: 33554433
103
MSG: 512 wParam: 0 lParam: 655456
104
MSG: 132 wParam: 0 lParam: 66125927
105
MSG: 32 wParam: 1118670 lParam: 33554433
106
MSG: 512 wParam: 0 lParam: 655455
107
MSG: 132 wParam: 0 lParam: 66125930
108
MSG: 32 wParam: 1118670 lParam: 33554433
109
MSG: 512 wParam: 0 lParam: 655458
110
MSG: 132 wParam: 0 lParam: 66125938
111
MSG: 32 wParam: 1118670 lParam: 33554433
112
MSG: 512 wParam: 0 lParam: 655466
113
MSG: 132 wParam: 0 lParam: 66257023
114
MSG: 32 wParam: 1118670 lParam: 33554433
115
MSG: 512 wParam: 0 lParam: 786551
116
MSG: 15 wParam: 0 lParam: 0
117
MSG: 133 wParam: 1 lParam: 0
118
MSG: 20 wParam: 151075455 lParam: 0
119
MSG: 15 wParam: 0 lParam: 0
120
MSG: 133 wParam: 1 lParam: 0
121
MSG: 20 wParam: 151075455 lParam: 0
122
MSG: 8 wParam: 0 lParam: 0
123
MSG: 15 wParam: 0 lParam: 0



UPD: В общем какая то жуть. В инете и справке всё неправильно. Пересоздаю кнопку в case WM_ERASEBKGND: и только тогда она начинает обрабатывать события, и более менее не затирается другими элементами. Но иногда мерзко мерцает.
А вот WM_PAINT рисуется вообще только когда мышка наведена на дочернее окно , в остальных случаях он кнопку вообще не рисует.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 30-04-2023 в 05:48:

Цитата:
FiEctro писал:
В инете и справке всё неправильно

Справка не предполагает ситуации, что ты подмешиваешь свои кнопки в чужое приложение

Добавлено 30-04-2023 в 08:48:

Но вообще - судя по тому, чем ты занимаешься, я был прав, когда запланировал архитектуру редактора со сменным пользовательским интерфейсом на скриптовом языке. Пользователь обязательно захочет добавить в любимое приложение полезных кнопок, менюшек или комманд.
Главное чтобы сам редактор позволял ему это сделать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 30-04-2023 в 13:59:

В целом разобрался корень всех проблем был в неправильном стиле дочернего окна. Нужно было принудительно задать ему WS_CLIPCHILDREN.

C++ Source Code:
LONG_PTR style = GetWindowLongPtr(chWnd1, GWL_STYLE);
style |= WS_CLIPCHILDREN;
SetWindowLongPtr(chWnd1, GWL_STYLE, style);


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

C++ Source Code:
1
bool makebuttons = true;
2
LRESULT CALLBACK ButtonProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
3
{
4
  //std::cout << "MSG: " << msg <<" wParam: " << wParam << " lParam: " << lParam << std::endl;
5
 
6
  int ID_BUTTON1 = 100;
7
  int ID_BUTTON2 = 101;
8
 
9
  static HWND hButton1 = NULL;
10
  static HWND hButton2 = NULL;
11
 
12
  if (makebuttons)
13
  {
14
    msg = 0x007e; // Принудительно вызываем WM_DISPLAYCHANGE для Windows 7
15
    std::cout << "Make button by: " << msg << std::endl;
16
    makebuttons = false;
17
  }
18
 
19
  switch (msg)
20
  {
21
  case WM_DISPLAYCHANGE:
22
    {
23
      hButton1 = CreateWindowEx(0, L"BUTTON", L"Button 1", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 30, 0, 120, buttonHeight1, hwnd, (HMENU)ID_BUTTON1, NULL, NULL);
24
      hButton2 = CreateWindowEx(0, L"BUTTON", L"Button 2", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 180, 0, 120, buttonHeight1, hwnd, (HMENU)ID_BUTTON2, NULL, NULL);
25
      return 0;
26
    }
27
 
28
  case WM_ERASEBKGND:
29
    {
30
      return 1;
31
    }
32
 
33
  case WM_PAINT:
34
    {
35
      PAINTSTRUCT ps;
36
      HDC hdc = BeginPaint(hwnd, &ps);
37
      FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_HIGHLIGHT + 1));
38
      EndPaint(hwnd, &ps);
39
      ShowWindow(hButton1, SW_SHOW);
40
      ShowWindow(hButton2, SW_SHOW);
41
      return 0;
42
    }
43
 
44
  case WM_COMMAND:
45
    {
46
      if (LOWORD(wParam) == ID_BUTTON1 && HIWORD(wParam) == BN_CLICKED)
47
      {
48
        std::cout << "Button 1 pressed" << std::endl;
49
      }
50
      else if (LOWORD(wParam) == ID_BUTTON2 && HIWORD(wParam) == BN_CLICKED)
51
      {
52
        std::cout << "Button 2 pressed" << std::endl;
53
      }
54
 
55
      return 0;
56
    }
57
 
58
  case WM_DESTROY:
59
    {
60
      PostQuitMessage(0);
61
    }
62
 
63
  default:
64
    {
65
      return CallWindowProc(lpfnOldWndProc, hwnd, msg, wParam, lParam);
66
    }
67
  }
68
 
69
  return 0;
70
}

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 30-04-2023 в 14:26:

А как ты собрался отправлять команды стороннему приложению-то?
У него есть какое-то публичное API?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 30-04-2023 в 14:57:

Дядя Миша
Может быть, там есть обработчик WM_COPYDATA? Ну то есть по сути простейший IPC API.

__________________

xaerox on Vivino


Отправлено FiEctro 30-04-2023 в 15:33:

Цитата:
Дядя Миша писал:
А как ты собрался отправлять команды стороннему приложению-то?
У него есть какое-то публичное API?


Есть такая программа CheatEngine она делает дамп памяти любого твоего приложения (ну то есть вообще любого), и позволяет сканировать эту самую память на изменение переменных в реальном времени. Собственно зная изначальное значение ты можешь найти нужный адрес в памяти и приплюсовать его к модулю этого же приложения, тогда ты всегда надёжно сможешь к нему обращаться через ReadProcessMemory, и изменять его значение через WriteProcessMemory.

ReadProcessMemory(phandle, (LPVOID)(module_target_app + target_address), &myVar, sizeof(myVar), NULL);

Естественно память может выделяться и во время выполнения, это более сложно. Я пока работаю с чисто уже выделенными при старте адресами.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 30-04-2023 в 17:30:

FiEctro
А, ну так любые трейнеры работают.
Проблема в том, что с каждой новой версией программы адреса могут измениться. Ненадёжный способ.

Добавлено 30-04-2023 в 13:30:

К тому же для WriteProcessMemory тебе скорее всего понадобятся привилегии администратора.

__________________

xaerox on Vivino


Отправлено Дядя Миша 30-04-2023 в 17:57:

Цитата:
FiEctro писал:
всегда надёжно сможешь к нему обращаться через ReadProcessMemory, и изменять его значение через WriteProcessMemory.

Погоди постой, зачем лезть в память? Речь шла об отдаче приложению легальных команд, а не о порче памяти.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 30-04-2023 в 18:20:

Дядя Миша
Ну он что-то вроде трейнера делает, просто хочет не отдельное окошко, а встроить кнопку трейнера прямо в программу.

__________________

xaerox on Vivino


Отправлено FiEctro 30-04-2023 в 19:20:

Цитата:
XaeroX писал:
Проблема в том, что с каждой новой версией программы адреса могут измениться. Ненадёжный способ.


Да это понятно. Но по другому наверное и не сделать. Экзешник можно рядом ложить, а уж права админа многие проги требуют.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено FiEctro 01-05-2023 в 09:23:

Как заморозит фоновое окошко, когда открываешь новое?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено FiEctro 07-05-2023 в 12:34:

Из-за чего происходит такая фигня при изменении размера окошек? Элементы с предыдущих кадров как бы накладываются на текущие.


Пробовал принудительно вызывать WM_PAINT при других событиях но это не даёт никакого результата.

C++ Source Code:
1
LRESULT CALLBACK TimelineProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
2
{
3
 
4
  static HWND hButton3 = NULL;
5
  int ID_BUTTON3 = 102;
6
 
7
  switch (msg)
8
  {
9
  case WM_DISPLAYCHANGE:
10
    {
11
      hButton3 = CreateWindowEx(0, L"BUTTON", L"Button 3", WS_TABSTOP | WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | BS_DEFPUSHBUTTON, 180, 10, 120, buttonHeight1, hwnd, (HMENU)ID_BUTTON3, NULL, NULL);
12
      return 0;
13
    }
14
 
15
  case WM_ERASEBKGND:
16
    {
17
 
18
      return 1;
19
    }
20
  case WM_PAINT:
21
    {
22
      PAINTSTRUCT ps;
23
      HDC hdc = BeginPaint(hwnd, &ps);
24
      FillRect(hdc, &ps.rcPaint, colorFill);
25
      EndPaint(hwnd, &ps);
26
      ShowWindow(hButton3, SW_SHOW);
27
      return 0;
28
    }
29
 
30
  case WM_COMMAND:
31
    {
32
      if (LOWORD(wParam) == ID_BUTTON3 && HIWORD(wParam) == BN_CLICKED)
33
      {
34
        std::cout << "Button 3 pressed" << std::endl;
35
      }
36
      return 0;
37
    }
38
 
39
  case WM_DESTROY:
40
    {
41
      PostQuitMessage(0);
42
    }
43
  default:
44
    {
45
      return CallWindowProc(lpfnTimelineWndProc, hwnd, msg, wParam, lParam);
46
    }
47
  }
48
}

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 07-05-2023 в 16:02:

Есть два варианта:
1. елементы остаются на своих посадочных местах
2. елементы учитывают новый размер окна - это делается вручную

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 08-05-2023 в 11:42:

Дядя Миша
1. Нет не остаются
2. Да учитывают

Причём такая фигня что эта хрень то появляется то исчезает, никак не пойму почему. В чем сакральный смысл превращать окно в пиксельное мессиво?

Какое то говно этот винапи одно делаешь, другое ломается, и четкой структуры у него нет вообще хрен пойми что откуда вызывать.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 08-05-2023 в 12:22:

Никто точно не знает как работает WinAPI. Но если ты однажды что-то делаешь правильно - можешь быть уверен, что это будет работать на любой винде одинаково. За это и любим.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 08-05-2023 в 12:33:

Цитата:
Дядя Миша писал:
что это будет работать на любой винде одинаково.


Неправда, например семерка может не посылать некоторых событий которые посылает десятка. Я уже обжогся на этом .

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 08-05-2023 в 13:35:

Ну я не спорю, если что-то делать для десятки, оно потом не будет на старых версиях работать. Но вот наоборот - будет. Впрочем это везде так.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 09-05-2023 в 09:08:

Как рассчитать ширину горизонтального слайдера?
Есть окно которое может менять свой размер на нём слайдер, есть вложенное окно которое тоже по горизонтали ещё больше может менять свой размер (отмечено зелёным), нужно как то из всего этого получить размер слайдера (отмечен красным прямоугольником) чтобы он не был слишком мелким?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено FiEctro 09-05-2023 в 13:20:

Как в винапи создать такой список:


Пробовал просто кнопок насоздавать, но что то это слишком тормозно получается. Мне нужно 8к элементов.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Временная зона GMT. Текущее время 21:28.
Показать все 72 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024