Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
#1

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

14.12.2013, 13:19. Просмотров 1462. Ответов 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 на экран? - C++
for (int k = 0; k < 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

Как преобразовать char в string - C++
Есть массив char buffer; есть переменная string X; как присвоить значение X допустим такое X=buffer+buffer;

Как преобразовать string в char*? - C++
Как преобразовать string в char* и отправить как аргумент наименьшими усилиями? #include <iostream> #include <string> using...

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

C++: как преобразовать double в string? - C++
Например, вычисляем значение 22/7 с точностью до 10 знаков после запятой: #include <iostream> #include <windows.h> using namespace...

Как преобразовать строку string в int? - C++
имеется строка string которая содержит такие наборы символов - "0,0,0,3,32,253,0,0,43" необходимо цифры записать в матрицу а запятые...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
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 / 0
Регистрация: 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
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.12.2013, 21:03 #18
Не то. Ты получаешь атом строки с записью числа, а надо прочитать сами данные и не строковые, а бинарные. Атом - это тот же дескриптор, по нему потом можно найти строку, но сами данные в атоме не хранятся.

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

Добавлено через 43 секунды
Цитата Сообщение от nill Посмотреть сообщение
PQgetvalue просто извлекает данные из БД в текстовом формате
Значит она тебе тоже не нужна.
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 21:20  [ТС] #19
taras atavin,
ну так а что делать то ?
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.12.2013, 21:25 #20
Сохранять и получать бинарные данные нужного целого типа, или сырого BLOB.
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
14.12.2013, 21:30 #21
Цитата Сообщение от nill Посмотреть сообщение
ну так а что делать то ?
подумать
тебе уже сказали что сохранять хендлеры бесполезно
сохраняй имя окна
а оно берется вот так
C++
1
2
3
4
5
6
int GetWindowText(
HWND hWnd,       // дескриптор окна или элемента  управления с текстом
LPTSTR lpString, // адрес буфера для текста
int nMaxCount    // максимальное число символов  для копирования
 
);
вот здесь тебе хендлер и пригодится
http://vsokovikov.narod.ru/New_MSDN_...windowtext.htm
а чтобы искать по имени есть функция
FindWindow
http://vsokovikov.narod.ru/New_MSDN_...findwindow.htm
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 22:30  [ТС] #22
C++
1
2
3
char * handle_str=PQgetvalue(pg_result, i, 3);
        int handle=0;
        sscanf(handle_str,"%x", &handle);
вот так все заработало!

ValeryS,
Почему бесполезно, зачем мне заморачиваться со сложными именами окон когда можно читать хендлы.
Главная прога в бесконечном цикле отслеживает запущенные мелкие проги, если какая то из них закрывается сразу обновляется БД что такая то прога с таким то хендлом закрыта.
Система у меня распределенная и нужна БД чтобы без проблем запущенные проги виделись со всех компов.

Понять немогу почему так хендлы в БД всем не нравятся, куда короче и понятнее чем заголовок проги, в один момент времени хендлы не могут повторятся, после закрытия проги проходит очень мало времени перед тем как она удалиться из БД.
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
14.12.2013, 22:40 #23
Цитата Сообщение от nill Посмотреть сообщение
система у меня распределенная и нужна БД чтобы без проблем запущенные проги виделись со всех компов.
и как ты будешь потом разбираться в этих хендлах?
какую тебе они информацию дадут?

увидишь ты что запущено окно 0х00658 и что?
что это за окно? какому приложению соответствует?
а есть еще безоконные программы, есть разные потоки

"диспетчер задач" справляется с этой задачей не используя всякие базы данных
а уж если хочешь так уж это число записать в виде строки есть для этого sprintf (и не только)
и почему двоичные данные надо в виде строки записывать?

Добавлено через 1 минуту
Цитата Сообщение от nill Посмотреть сообщение
Главная прога в бесконечном цикле
прекрасный способ разогреть процессор
и затормозить систему
для слежения за открытием закрытием окон существуют хуки
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 22:44  [ТС] #24
ValeryS,
Вообще хендлы которая отслеживает Главная прога в БД пишут мелкие проги, то есть главная прога не отслеживает все подряд хендлы, а только те что есть в БД, увидит что такого то хендла нет, она его удаляет и все.

А про хуки можно поподробней как их использовать можно короткий пример или что нить почитать ?
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,847
14.12.2013, 22:53 #25
Цитата Сообщение от nill Посмотреть сообщение
ообще хендлы которая отслеживает Главная прога в БД пишут мелкие проги, то есть главная прога не отслеживает все подряд хендлы, а только те что есть в БД, увидит что такого то хендла нет, она его удаляет и все.
представь на секунду такую ситуевину
окно закрылось и тут же открылось другое окно, винда дала ему тот же хендл,как поведет себя твоя программа?


Цитата Сообщение от nill Посмотреть сообщение
А про хуки можно поподробней как их использовать можно короткий пример или что нить почитать ?
попроще не получится
сначала нужно понять что это за "крючки" и зачем они нужны
в двух словах это как свои прерывания в ДОС
прога перехватывает сообщения от системы к окнам и от окон к системе и решает что с ними делать пропустить, обработать удалить
например мажно написать хук и при печати вместо буквы А будет высвечиваться буква Б
вот статейка для начала пойдет а потом придется все равно тренироваться
http://www.rsdn.ru/article/baseserv/winhooks.xml
http://habrahabr.ru/company/infopulse/blog/140456/
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
14.12.2013, 23:26  [ТС] #26
ValeryS,

окно закрылось и тут же открылось другое окно, винда дала ему тот же хендл,как поведет себя твоя программа?
Тут же открыться ничего не может прога будет работать на сервере, где человек производит какие либо действия очень редко, да и вероятность получить тот же хендл очень маленькая.
Вообще конечно в идеале надо бы присваивать всем прогам уникальный ИД простым перечислением через БД и по нему ну может еще плюс хендл искать запущенные окна, но пока не вижу причин почему бы работа только с хендлами доставила бы мне хоть какие то проблемы, но буду иметь ввиду.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.12.2013, 15:31 #27
Цитата Сообщение от nill Посмотреть сообщение
Почему бесполезно, зачем мне заморачиваться со сложными именами окон когда можно читать хендлы.
Для тебя пока сложны как хендлы, они двоичны, а ты не умеешь работать с двоичными данными.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2013, 15:31
Привет! Вот еще темы с ответами:

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

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

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

Как преобразовать объект string в строку char*? - C++
Доброго времени суток! Недавно я писал код, и обнаружил, что в качестве имя файла при объявлении объектов ifstream/ofstream нельзя...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.12.2013, 15:31
Ответ Создать тему
Опции темы

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