نوشته شده توسط
Gold
شرمنده حق با شماست...
در ضمن برنامه تستی رو با Process Explorert ساسپند میکنم.
من تست کردم وقتی از SendMessageTimeout استفاده میکنی یک بار Suspended میده و یک بار Runned و این کار هم تکرار میشه و ترتیبش هم مشخص نیست یعنی بسته به زمان Timeout ممکنه برنامه به پیغام رسیده شده جواب بده ، تنها چیزی که به ذهنم میرسه این هست که از خروجی این تابع چند بار پشت سر هم نمونه گیری کنیم و در آخر کار نتیجه رو بررسی کنیم ، من یه کد نوشتم و تست کردم و این بار مشکل قبلی رو نداشت و خیلی راحت وضعیت برنامه رو مشخص کرد :
var
Result, Time: Dword;
Retval: LongInt;
Timeout, i, Count: Byte;
Hand: THandle;
begin
Hand:= FindWindow('TForm1', 'TestAPP');
if Hand<> 0 then
begin
Timeout:= 10;
Count:= 0;
for i:= 0 to 10 do
begin
Time:= GetTickCount;
Retval:= SendMessageTimeout(Hand, WM_NULL, 0, 0, SMTO_ABORTIFHUNG or SMTO_BLOCK, Timeout, Result);
Time:= GetTickCount - Time;
if Retval= 0 then
if Time < Timeout then
Inc(Count)
else
Dec(Count);
end;
if Count <= 5 then
ShowMessage('Runned')
else
ShowMessage('Suspended');
end else
ShowMessage('Can not find window ! ');
end;
تست کنید اگر باز هم مشکلی بود خبر بدید .