Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.10;
Скачать: CL | DM;

Вниз

Проблема с функциями 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
2-1215411081
iSODEv
2008-07-07 10:11
2008.08.10
мерцает PaintBox


2-1215590222
kyn66
2008-07-09 11:57
2008.08.10
Скриншот окна броузера


1-1196253404
Elec3C
2007-11-28 15:36
2008.08.10
Приоритет программ через CreateProcess


3-1204041756
Reindeer Moss Eater
2008-02-26 19:02
2008.08.10
MSSQL 2005 и политика паролей домена


2-1215460486
Olegus
2008-07-07 23:54
2008.08.10
Dll в Delphi