PDA

View Full Version : یک سوال دارم.در مورد API ممنون میشم جواب بدین



plus
سه شنبه 15 دی 1383, 07:31 صبح
سلام
من میخوام فونت یه Window که خارج از برنامه ی خودم هست رو تغییر بدم
واسه Window های برنامه ی خودم راحت با تابع CreateFont و بعد از اون استفاده از تابع SendMessage اینطوری فونت رو تغییر میدم :

sendmessage hWnd,WM_SETFONT,hFont,0

ولی وقتی این کار رو واسه Window های خارج از برنامه خودم انجام میدم فونتشون فونت سیستم میشه !! هر کاری به فکرم رسید کردم اما نشد...
اگه راهنماییم کنین ممنون میشم.من با Win32ASM (تازه کار) و ویبی کار میکنم.
موفق باشید

Best Programmer
شنبه 01 اسفند 1383, 07:51 صبح
آیا شما تابع SelectObject را فرا میخوانید؟

plus
جمعه 14 اسفند 1383, 14:45 عصر
نه.من فقط وقتی کارم تموم شد(برنامه میخواست بسته بشه) از تابع
DeleteObject hFont استفاده میکنم.چطور باید از SelectObject واسه یه پنجره ای که خارج از برنامه ی خودم هست استفاده کنم؟

Best Programmer
شنبه 15 اسفند 1383, 03:27 صبح
خوب ابتدا شما باید hwnd اون متن را بدست بیارید و سپس به کمک تابع GetDC ؛hdc متن را بدست بیارید و به کمک تابع CreateFont فونت مورد نظر را انتخاب کنید و سپس با فراخوان تابع SelectObject ,hdc,hfont آن را تعریف کنید و سپس تابع SendMessage را برای اعمال تغییر فونت فرا بخوانید. البته من این کار را تست نکردم ممکن است عمل کند یا نه: اگر شد به مام بگید.

plus
یک شنبه 16 اسفند 1383, 19:42 عصر
وقتی شما گفتین که از تابع SelectObject استفاده کن من این کاری که میگین رو کردم و کار نکرد(مثل قیل فقط برای پنجره های داخل برنامه کار کرد) مثلا از این کد توی ویبی استفاده کردم:


Dim PAPI As POINTAPI
Dim Handle As Long, DC As Long, hFont As Long
Private Sub Command1_Click()
GetCursorPos PAPI
Handle = WindowFromPoint(PAPI.x, PAPI.y)
DC = GetDC(Handle)
hFont = CreateFont(14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "Tahoma")
Call SelectObject(GetDC(Handle), hFont)
Call SendMessage(Handle, WM_SETFONT, hFont, 0)
End Sub

Private Sub Form_Unload(Cancel As Integer)
DeleteObject hFont
End Sub

اما نشد!...

Inprise
دوشنبه 17 اسفند 1383, 01:43 صبح
ولی وقتی این کار رو واسه Window های خارج از برنامه خودم انجام میدم فونتشون فونت سیستم میشه

- از Findwindow برای پیدا کردن هندل پنجره مورد نظرت استفاده کن . ( HWND‌ )
- از SendMessage برای تنظیم فونت استفاده کن .

مشکلت به این دلیل پیش اومده که داری به پنجرهء یک پروسهء دیگه پیام میفرستی و اون پروسه hFont تو رو نمیشناسه و بهش دسترسی نداره ! راه ساده استفاده از SendMessageTimeout و راه سخت ، استفاده از Process Injection و تزریق SendMessage ات به فضای پروسه مقصد است .

موفق باشی

plus
شنبه 22 اسفند 1383, 18:50 عصر
ولی وقتی این کار رو واسه Window های خارج از برنامه خودم انجام میدم فونتشون فونت سیستم میشه

- از Findwindow برای پیدا کردن هندل پنجره مورد نظرت استفاده کن . ( HWND‌ )
- از SendMessage برای تنظیم فونت استفاده کن .

مشکلت به این دلیل پیش اومده که داری به پنجرهء یک پروسهء دیگه پیام میفرستی و اون پروسه hFont تو رو نمیشناسه و بهش دسترسی نداره ! راه ساده استفاده از SendMessageTimeout و راه سخت ، استفاده از Process Injection و تزریق SendMessage ات به فضای پروسه مقصد است .

موفق باشی

ممنون از جوابت.اما من هر کاری نکردم نتونستم از SendMessageTimerOut واسه این کار استفاده کنم.اگه میگفتی چطوری باید مقدار دهیش کنم خیلی خوب میشد.
به هر حال ممنون.موفق باشی