Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
#1

Как преобразовать String в HWND - C++

14.12.2013, 13:19. Просмотров 1711. Ответов 26
Метки нет (Все метки)

Можно как то преобразовать String в HWND ?
как сделать обратное преобразование то есть из HWND в String разобрался, а вот из String в HWND немогу найти способ.

Тип HWND нужен для хранения хендла окна, я его пишу в базу данных, а из нее можно получить результат только типа String, потом чтобы проверить наличие этого окна в функции IsWindow(); нужно значение с типом HWND
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 13:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как преобразовать String в HWND (C++):

Как преобразовать char* в string и вывести переменную string на экран?
for (int k = 0; k < 10; k++) { int x = (int)rand() / RAND_MAX + rand() %...

Как преобразовать char в string
Есть массив char buffer; есть переменная string X; как присвоить значение X...

Как преобразовать string в char*?
Как преобразовать string в char* и отправить как аргумент наименьшими усилиями?...

Как преобразовать string в int ? С++
Здравствуйте, можете объяснить как преобразовать string в int ? С++. ...

Как преобразовать int в string?
есть программа из 4 файлов, но она работает не очень корректно. Ошибка в...

C++: как преобразовать double в string?
Например, вычисляем значение 22/7 с точностью до 10 знаков после запятой: ...

26
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.12.2013, 13:30 #2
если бы у вас было понимание того что вы делаете то вы бы знали что HWND это typedef указателя на void и вы бы сохраняли в БД(вот ещё глупость) беззнаковое целое типа size_t и доставали бы беззнаковое целое
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 13:56  [ТС] #3
Jupiter,
попробовал

C++
1
2
3
4
size_t test;
 
    if (IsWindow(test))
    { }
получил ошибку
error C2664: IsWindow: невозможно преобразовать параметр 1 из "size_t" в "HWND"
0
0x10
14.12.2013, 13:58
  #4

Не по теме:

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

0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 14:11  [ТС] #5
0x10, лучше доступным языком ответить на мой вопрос.
В базу я сохраняю хендлы потому что они нужны в двух разных прогах.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
14.12.2013, 14:19 #6
Цитата Сообщение от nill Посмотреть сообщение
Можно как то преобразовать String в HWND ?
Строку в окно? Сначала преврати телеграфную ленту в стеклопакет, потом спрашивай.

Добавлено через 1 минуту
Цитата Сообщение от nill Посмотреть сообщение
Тип HWND нужен для хранения хендла окна, я его пишу в базу данных, а из нее можно получить результат только типа String,
Не может быть такой базы данных.
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.12.2013, 14:20 #7
Цитата Сообщение от nill Посмотреть сообщение
попробовал
size_t нужно прикастовать к HWND,
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 14:24  [ТС] #8
Jupiter, можно показать на примере ?
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
14.12.2013, 14:26 #9
Цитата Сообщение от nill Посмотреть сообщение
rror C2664: IsWindow: невозможно преобразовать параметр 1 из "size_t" в "HWND"
Правильно, не явно указательные и не указательные типы друг к другу не приводятся. Приводи явно и будет тебе щасье.
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 14:48  [ТС] #10
taras atavin, пример ?
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
14.12.2013, 15:11 #11
C++
1
if (IsWindow((HWND)test))
Добавлено через 2 минуты
Можно также при получении целого в переменную сразу приводить, а каждый раз при использовании не приводить. Кстати, окно создаётся в каждом сеансе заново и при закрытии дескриптор теряет смысл. Так зачем же его хранить в базе?
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 16:56  [ТС] #12
taras atavin,
В общем вот что получается

Извлекаю данные из БД
C++
1
size_t handle=atoi(PQgetvalue(pg_result, 0, 3));
делаю

C++
1
if (IsWindow((HWND)handle)){}
Но всегда получаю true даже когда окна с хендлом из БД уже нет
проверил что в переменной handle и там
50
Хотя реальное значение хендла 00050DFC

Что не так делаю ?


PS Хендлы в БД мне нужны потому что их проверяет одна прога, а сами хендлы от других прог, для связи решил использовать БД, то что при каждом запуске прог хендлы разные это я в курсе
0
nexen
14.12.2013, 16:59
  #13

Не по теме:

Что происходит в этой теме? О_О

1
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
14.12.2013, 19:23 #14
Цитата Сообщение от nill Посмотреть сообщение
Извлекаю данные из БД
Код C++
1
size_t handle=atoi(PQgetvalue(pg_result, 0, 3));
делаю
Код C++
1
if (IsWindow((HWND)handle)){}
Но всегда получаю true даже когда окна с хендлом из БД уже нет
1. Все вопросы к функции и виндузячим глюкам.
2. А зачем вообще нужен дескриптор закрытого окна?
3. Лучше
C++
1
HWND handle=(HWND)atoi(PQgetvalue(pg_result, 0, 3));
: исходник будет лучше самодокументированным.
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 19:35  [ТС] #15
taras atavin,

HWND handle=(HWND)atoi(PQgetvalue(pg_result, 0, 3));
теперь handle получаю такой
00000032
а должно быть 00050DFC
думаю проблема в том что 00050DFC шестнадцатеричное число

PS Хендл закрытого окна нужен для того чтобы удалить запись о нем из БД, Схема такая главная прога отслеживает запущенные проги и если одна из отслеживаемых прог закрывается, аварийно или пользователем данные о ней удаляются из БД, общий смысл главное проги отслеживать запущенные проги.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
14.12.2013, 20:49 #16
Цитата Сообщение от nill Посмотреть сообщение
теперь handle получаю такой
00000032
а должно быть 00050DFC
Я не знаю, что ты там на сохранял и правильно ли получаешь. Расшифруй параметры функции PQgetvalue.

Добавлено через 4 минуты
Цитата Сообщение от nill Посмотреть сообщение
думаю проблема в том что 00050DFC шестнадцатеричное число
При чём здесь вообще система счисления? Данные всегда двоичны, а будут ли они отображены как 00050DFC, 331260, 1206774, 1010000110111111100, или даже 121211101220 - значения не имеет, хотя 00050DFC - шестнадцатеричное представление, 331260 - десятичное, 1206774 - восьмеричное, 1010000110111111100 - двоичное, а 121211101220 - даже троичное. Это всё одно и тоже число, в каждой системе можно представить любое число.

Добавлено через 2 минуты
Цитата Сообщение от nill Посмотреть сообщение
PS Хендл закрытого окна нужен для того чтобы удалить запись о нем из БД, Схема такая главная прога отслеживает запущенные проги и если одна из отслеживаемых прог закрывается, аварийно или пользователем данные о ней удаляются из БД, общий смысл главное проги отслеживать запущенные проги.
Нафиг здесь БД? Для оперативных данных предназначен массив в памяти самой утилиты.
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 20:51  [ТС] #17
taras atavin,
Это можно повторить и без PQgetvalue чтобы было понятнее

C++
1
2
char * test="00050DFC";
HWND handle1=(HWND)atoi(test);
в итоге получаю что
handle1 равно 00000032
а должно быть 00050DFC

PQgetvalue просто извлекает данные из БД в текстовом формате
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
14.12.2013, 21:03 #18
Не то. Ты получаешь атом строки с записью числа, а надо прочитать сами данные и не строковые, а бинарные. Атом - это тот же дескриптор, по нему потом можно найти строку, но сами данные в атоме не хранятся.

Добавлено через 1 минуту
Вообще забудь про atoi, чары и тому подобное.

Добавлено через 43 секунды
Цитата Сообщение от nill Посмотреть сообщение
PQgetvalue просто извлекает данные из БД в текстовом формате
Значит она тебе тоже не нужна.
0
nill
10 / 10 / 2
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 21:20  [ТС] #19
taras atavin,
ну так а что делать то ?
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
14.12.2013, 21:25 #20
Сохранять и получать бинарные данные нужного целого типа, или сырого BLOB.
0
14.12.2013, 21:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 21:25
Привет! Вот еще темы с решениями:

Как преобразовать string в double и обратно?
нашел функцию atof но не хочет запускаться. сам начеркал функцию для перевода в...

Как преобразовать строку string в int?
имеется строка string которая содержит такие наборы символов -...

Как преобразовать тип double в string
Есть переменная типа double нужно ее преобразовать в тип string Как это можно...

Помогите новичку - как преобразовать int к string
Помогите новичку Как делать преобразование к классу int gcc version 2.95.3...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru