PDA

View Full Version : نوشتن متن دلخواه در Title Bar همه پنجره هایی که باز میشوند



nasr
چهارشنبه 18 مهر 1386, 12:06 عصر
سلام
من می خوام یه برنامه بنویسم که وقتی فعال هست مثل برنامه ای که Attach کرده ام بالای سر پنجره فعال (Title Bar) یه متنی بنویسه. البته این برنامه ای که من ضمیمه کرده ام روز و تاریخ و حافظه و غیره را می نویسه ولی من فقط می خوام یه متن ساده بنویسم

ممنون

hossein taghi zadeh
چهارشنبه 18 مهر 1386, 17:55 عصر
با سلام

از توابع API زیر استفاده کنید:

جهت بدست آوردن هندل پنجره فعال

GetActiveWindow;
جهت بدست آوردن عنوان یک پنجره:

GetWindowText(Handle: hwnd; Buffer: PChar; Count: Integer)
جهت تغیر عنوان یک پنجره:

SetWindowText(Hande: hwnd; Caption: PChar);

و در آخر کد شما :

Var
Buffer: array[0..255] of Char;
Begin
GetWindowText(GetActiveWindow, Buffer, 255);
SetWindowText(GetActiveWindow, PChar(Buffer+'Matn Mored Nazar'));
End;

nasr
پنج شنبه 19 مهر 1386, 09:53 صبح
سلام
من یه تایمر گذاشتم و این کد را نوشتم
ولی فقط برای فرم دلفی که باز میشه عمل می کنه و برای بقیه پنجره های ویندوز عمل نمیکنه


procedure TForm1.Timer1Timer(Sender: TObject);
Var
Buffer: array[0..255] of Char;
Begin
GetWindowText(GetActiveWindow, Buffer, 255);
Label1.Caption := IntToStr(GetWindowText(GetActiveWindow, Buffer, 255));
SetWindowText(GetActiveWindow, PChar('Matn Mored Nazar'));
End;

vcldeveloper
پنج شنبه 19 مهر 1386, 14:00 عصر
تا جایی که خاطرم هست، دو تابعی که استفاده کردید، روی پروسس های دیگه جواب نمیدن. برای اینکه متن یک پنجره در پروسس دیگه ایی را بدست بیارید،بجای GetWindwText و SetWindowText از پیغام های WM_GETTEXT و WM_SETTEXT استفاده کنید (البته حتما می دونید که برای ارسال این پیام ها از توابع SendMessage یا PostMessage استفاده میشه)

hossein taghi zadeh
پنج شنبه 19 مهر 1386, 14:36 عصر
با سلام


تا جایی که خاطرم هست، دو تابعی که استفاده کردید، روی پروسس های دیگه جواب نمیدن
خیر، مشکل از تابع GetActiveWindow است، زیرا هندل پنجره‌ی فعال را برنمی‌گرداند که به جای آن باید از تابع
GetForegroundWindow استفاده کنید.

nasr
یک شنبه 22 مهر 1386, 09:13 صبح
با سلام


خیر، مشکل از تابع GetActiveWindow است، زیرا هندل پنجره‌ی فعال را برنمی‌گرداند که به جای آن باید از تابع
GetForegroundWindow استفاده کنید.

سلام
مشکل تا حدی حل شد ولی الان مشکل اینجاست که اگه مثلا My Computer را باز کنی خود کلمه My Computer را هم حذف میکنه در صورتی که من می خوام هر عنوانی داره باشه و متن مورد نظر به اون اضافه بشه
My Computer Matne Morede Nazar

ممنون

manvaputra
یک شنبه 22 مهر 1386, 09:37 صبح
با سلام
یه پیشنهاد: قبل از تغییر عنوان پنجره ای که می خوای اول عنوان قبلی رو بگیر و بعد عنوان مورد نظر رو به علاوه عنوان قبلی مجددا بنویس.

nasr
یک شنبه 22 مهر 1386, 12:38 عصر
با سلام
یه پیشنهاد: قبل از تغییر عنوان پنجره ای که می خوای اول عنوان قبلی رو بگیر و بعد عنوان مورد نظر رو به علاوه عنوان قبلی مجددا بنویس.
چطور باید اینکار را کرد؟

manvaputra
یک شنبه 22 مهر 1386, 14:24 عصر
دوست عزیز مگه Getwindowtext اینکارو نمی کنه من خودم تست نکردم البته

nasr
یک شنبه 22 مهر 1386, 15:48 عصر
دوست عزیز مگه Getwindowtext اینکارو نمی کنه من خودم تست نکردم البته

اجق وجق مینویسه:متفکر:

nasr
سه شنبه 24 مهر 1386, 12:22 عصر
چطوری عنوان پنجره فعال را بدست بیارم؟

ممنون

manvaputra
سه شنبه 24 مهر 1386, 12:48 عصر
سلام دوست عزیز کد زیر رو چک کن من تست کردم جواب میده:

function ActiveCaption: string;
var
Handle: THandle;
Len: LongInt;
Title: string;
begin
Result := '';
Handle := GetForegroundWindow;
if Handle <> 0 then
begin
Len := GetWindowTextLength(Handle) + 1;
SetLength(Title, Len);
GetWindowText(Handle, PChar(Title), Len);
ActiveCaption := TrimRight(Title);
end;
end;