Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];

Вниз

Проблема с функциями EnumWindows и GetWindowText   Найти похожие ветки 

 
GrieVeR-13 ©   (2008-07-08 21:59) [0]

function cb(h:hwnd;l:longint):boolean;stdcall;
var s:PCHAR;
begin
result:=true;
 GetWindowText(h,s,8);
if s = "[ #] Lin" then begin
h2:=h;
inc(c);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 EnumWindows(@cb,0);
<...>
end;

Задача: нужно найти все окна с именем "[ #] Lienage [ #]", и запомнить дескрипторы, чтобы в последствии им можно было посылать сообщения через PostMessage(...).
Проблема: без строчки h2[c]:=h; работает, но считает количество окон очень криво, иногда находит больше чем есть. А с ней вообще вылетает.. Почему?.. Целый день бьюсь над этой проблемой, заранее спасибо...


 
palva ©   (2008-07-09 00:04) [1]

У вас очень плохой текст. Если вы и мыслите в том же стиле, то вам лучше не заниматься программированием.
У вас не присвоено значение переменной s. Поскольку там мусор, то функция GetWindowText вообще должна вылететь или испортить где-нибудь память. Где у вас строчка h2[c]:=h; Приведите нормальный и полный текст.


 
SergeyIT ©   (2008-07-09 00:18) [2]


> f s = "[ #] Lin" then

И это непонятно что проверяет...


 
GrieVeR-13 ©   (2008-07-09 02:01) [3]

palva спасибо, я сам разобрался в чем дело.
S надо было задать как  var s:array [0..256] of char; И всё сразу стало работать.
И попытки опустить меня намеками о моей не способности к программированию вовсе не желательны...Особенно, если сами не понимаете в чем причина ошибки.


 
Германн ©   (2008-07-09 02:09) [4]


> И попытки опустить меня намеками о моей не способности к
> программированию вовсе не желательны...Особенно, если сами
> не понимаете в чем причина ошибки.
>

В игнор!


 
GrieVeR-13 ©   (2008-07-09 03:24) [5]

Закройте, пожалуйста, тему, чтобы "некоторые" личности, которые и слова не сказали по теме, не разводили флуд...
А palva всё равно спасибо, из-за него я ошибку и нашел.


 
Германн ©   (2008-07-09 03:38) [6]


> GrieVeR-13 ©   (09.07.08 03:24) [5]
>
> Закройте, пожалуйста, тему, чтобы "некоторые" личности,
> которые и слова не сказали по теме, не разводили флуд...
>
> А palva всё равно спасибо, из-за него я ошибку и нашел.
>

Пойди с ним в поход. Туристический. Там он тебе и объяснит всё на практике!
:)


 
{RASkov} ©   (2008-07-09 10:41) [7]

> [5] GrieVeR-13 ©   (09.07.08 03:24)
> Закройте, пожалуйста, тему, чтобы "некоторые" личности,
> которые и слова не сказали по теме, не разводили флуд...

Кусок "кода" приведенного тобой - "не читабельный". Отсюда и флуд.... А что ты хотел?
Или ты хочешь стукнуть кулаком по столу и тебе все кинулись решать твои проблемы?


 
GrayFace ©   (2008-07-09 10:44) [8]

А почему именно 8? И почему "некоторые" в ковычках?


 
GrieVeR-13 ©   (2008-07-09 12:22) [9]

Я никого не заставлял принудительно, я просто попросил - может кто нашел бы ошибку, и свою проблему я уже решил.
"8" потому что мне так понравилось, потом вообще 255 поставил.
"[ #] Lin" это имя окна. А "некоторые", потому что не все. Но их число стремительно увеличивается.
И пора бы уже прекратить решать "вопросы личного характера".
Закройте тему. Или на сайте эта функция отсутствует?


 
Leonid Troyanovsky ©   (2008-07-09 13:01) [10]


> GrieVeR-13 ©   (09.07.08 12:22) [9]

> Закройте тему. Или на сайте эта функция отсутствует?

Зачем? Лучше учиться на чужих ошибках.

> "8" потому что мне так понравилось

Boolean тоже понравилось?

> свою проблему я уже решил.

Вот и доложи решение и тема, считай, будет закрыта.
Хотя, сомнительно, что удасться сделать это без иных ошибок.

--
Regards, LVT.


 
GrieVeR-13 ©   (2008-07-09 13:31) [11]


> S надо было задать как  var s:array [0..256] of char; И
> всё сразу стало работать.

И без иных ошибок.
Это и есть решение.
Чем Вам мой boolean не понравился? Он тут по делу стоит.


 
Leonid Troyanovsky ©   (2008-07-09 13:41) [12]


> GrieVeR-13 ©   (09.07.08 13:31) [11]

> Чем Вам мой boolean не понравился? Он тут по делу стоит.

http://msdn.microsoft.com/en-us/library/ms633498(VS.85).aspx

> И без иных ошибок.

if s = "[ #] Lin" then begin
h2:=h;
inc(c);
end;

- Сплошная ошибка.

Я ж просил не флудить, а привести решение.

--
Regards, LVT.


 
MBo ©   (2008-07-09 13:44) [13]

>Чем Вам мой boolean не понравился?
BOOL будет аккуратнее


 
GrieVeR-13 ©   (2008-07-09 15:04) [14]

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


 
{RASkov} ©   (2008-07-09 15:33) [15]

> [14] GrieVeR-13 ©   (09.07.08 15:04)
> Как писать, бул или булеан, решаю я.

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


 
GrieVeR-13 ©   (2008-07-09 15:42) [16]

function cb(h:hwnd;l:longint):boolean;stdcall;
var s:array [0..256] of char;
begin
result:=true;
GetWindowText(h,s,255);
if strpas(s) = "[ #] Lineage II [ #]" then begin
PostMessage(h,WM_CHAR,ord("a"),0);
end;
end;
Рабочий вариант. И вуаля. Во всех заданных окнах магическим образом появляется "а".
Весь код я писал без Delphi под рукой, с телефона и по памяти. За опечатки не пинайте.


 
Anatoly Podgoretsky ©   (2008-07-09 15:54) [17]


> Как писать, бул или булеан, решаю я. На мой взгляд аккуратнее
> булеан.

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


 
GrieVeR-13 ©   (2008-07-09 16:14) [18]

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


 
Anatoly Podgoretsky ©   (2008-07-09 16:20) [19]

> GrieVeR-13  (09.07.2008 16:14:18)  [18]

Про законы Паркинсона слышал. Не рушимы. Надо не только качать, но и смотреть справку и для АПИ еще и определения в Windows.pas, а то Интернет это такая помойка, всем помойкам помойка. А генофонд не рушим.


 
GrieVeR-13 ©   (2008-07-09 16:33) [20]

Слышал. Что верно то верно..
приду домой исправлю.
Кто-то спрашивал, зачем я задаю вопросы на форуме? Так вот ради таких ответов и задаю.
Всем, кто мне помог, спасибо. До свидания.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.006 c
11-1192387325
INFINITY
2007-10-14 22:42
2008.08.10
PTimer


1-1196406830
Crystalis
2007-11-30 10:13
2008.08.10
Работа с HOTKEY =


2-1215456380
Hmel15
2008-07-07 22:46
2008.08.10
Kak сохранять и загружать


2-1215687715
pathfinder
2008-07-10 15:01
2008.08.10
Поля классов.


15-1213990535
wl
2008-06-20 23:35
2008.08.10
Аниме?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский