PDA

View Full Version : سوال: تغییر کپشن یک برنامه در حال اجرا



nazanin_90
پنج شنبه 03 دی 1394, 20:28 عصر
سلام
من برای تغییر کپشن پنجره browse for folder که در حال اجراست از کد زیر استفاده می کنم ولی نمیدانم ایراد آن کجاست که عمل نمی کند :


Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long


و از کد پائین در رویداد کلیک یک کمند باتن :


Dim find As Long

find = FindWindow("browse for folder", vbNullString)
SetWindowText find, "NewCaption"



ممنون

meys34
جمعه 04 دی 1394, 19:36 عصر
سلام منظورتون پنجره CommonDialog هست؟

پنجره مسیج باکس یا همون کامند دیالوگ به روش عادی قابل دسترس نیست...

وقتی تابع CommonDialog فراخوانی میشه دسترسی برنامه قطع میشه و حتی تایمر و یا هر کد دیگه ای اجرا نمیشه...


دو راه وجود داره برای دسترسی به پنجره CommonDialog


1- استفاده از API تایمر...

2- فارسی کردن مسیج باکس ... (http://barnamenevis.org/showthread.php?489085-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%DA%A9%D8%B1%D8%AF%D9%86-%D9%85%D8%B3%DB%8C%D8%AC-%D8%A8%D8%A7%DA%A9%D8%B3)

روش دوم به این ترتیب هست که با استفاده از هوک SetWindowsHookEx از اجرا شدن پنجره جدید داخل برنامه با خبر میشیم و با بدست آوردن هندل اون میشه هر کاری که خواستید انجام بدید...



کد تون رو هم اصلاح کنید:

Dim find As Long

find = FindWindow("browse for folder", vbNullString)
Dim C as String
C = "NewCaption"
SetWindowText find, C

nazanin_90
جمعه 04 دی 1394, 22:31 عصر
سلام منظورتون پنجره CommonDialog هست؟

پنجره مسیج باکس یا همون کامند دیالوگ به روش عادی قابل دسترس نیست...

وقتی تابع CommonDialog فراخوانی میشه دسترسی برنامه قطع میشه و حتی تایمر و یا هر کد دیگه ای اجرا نمیشه...



کد تون رو هم اصلاح کنید:

Dim find As Long

find = FindWindow("browse for folder", vbNullString)
Dim C as String
C = "NewCaption"
SetWindowText find, C

با سلام و تشکر
مشکل اینجاست که با کد فوق کپشن یک فرم وی بی هم نمیتوان تغییر داد .
نمونه ضمیمه را ملاحظه بفرما:
فایل Prjsample.exe که کپشن آن xxx است را ابتدا اجرا کن و سپس فایل Project1.exe را اجرا کن که با کلیک بر روی کمند باتن آن قاعدتاً باید کپشن فایل Prjsample.exe تغییر پیدا کند ولی این اتفاق نمی افتد .
با تشکر

naeim_1369
شنبه 05 دی 1394, 09:31 صبح
با سلام خدمت شما دوست عزیز،
مشکل جنابعالی توی نوشتن محل vbnullstring و brows for folder هستش،
جاشونو عوض کن درست میشه

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long


Private Sub Command1_Click()
Dim find As Long


find = FindWindow(vbNullString, "xxx")
Dim C As String
C = "NewCaption"
SetWindowText find, C
End Sub

nazanin_90
شنبه 05 دی 1394, 23:33 عصر
با سلام و تشکر ازجناب naeim_1369 (http://barnamenevis.org/member.php?170298-naeim_1369) عزیز
پاسخ شما کاملاً صحیح بود
نمونه را در ضمیمه قرار میدهم
راستش بنده می خواهم دکمه های این پنجره را بصورت فارسی تبدیل کنم ؛مثلاً عنوان کمند باتن make new folder به ایجاد پوشه جدید و کمند باتن ok به بله یا تایید و cancel را به انصراف تبدیل کنم .
با فارسی نمودن دکمه های فوق تقریباً کل آیتم های پنجره فوق فارسی میشود .
اگر دوستان راهکاری به ذهنن مبارکشان رسید لطفاً ارائه نمایند .
با تشکر

meys34
یک شنبه 06 دی 1394, 15:58 عصر
سلام

از تابع FindWindowEx استفاده کنید...

Private Sub Timer1_Timer()
Dim find As Long
find = FindWindow(vbNullString, "browse for folder")
If find Then
Dim C As String
C = "NewCaption"
SetWindowText find, C

C = "انصراف"
SetWindowText FindWindowEx(find, 0, vbNullString, "Cancel"), C

C = "تایید"
SetWindowText FindWindowEx(find, 0, vbNullString, "OK"), C
End If
End Sub

nazanin_90
یک شنبه 06 دی 1394, 18:57 عصر
سلام

از تابع FindWindowEx استفاده کنید...

Private Sub Timer1_Timer()
Dim find As Long
find = FindWindow(vbNullString, "browse for folder")
If find Then
Dim C As String
C = "NewCaption"
SetWindowText find, C

C = "انصراف"
SetWindowText FindWindowEx(find, 0, vbNullString, "Cancel"), C

C = "تایید"
SetWindowText FindWindowEx(find, 0, vbNullString, "OK"), C
End If
End Sub

عالی بود ، متشکرم
فقط عنوان کمند باتن make new folder تغییر پیدا نکرد .
بازهم ممنون

meys34
سه شنبه 08 دی 1394, 20:52 عصر
سلام

اون هم مثل دکمه ok هست دیگه:

C = "پوشه جدید"
SetWindowText FindWindowEx(find, 0, vbNullString, "&Make New Folder"), C

nazanin_90
سه شنبه 08 دی 1394, 22:41 عصر
سلام

اون هم مثل دکمه ok هست دیگه:

C = "پوشه جدید"
SetWindowText FindWindowEx(find, 0, vbNullString, "&Make New Folder"), C


صد آفرین :تشویق::تشویق::تشویق:

nazanin_90
پنج شنبه 10 دی 1394, 18:17 عصر
با سلام مجدد
با استفاده از کدهای جناب meys34 در پست 6 توانستم عنوان و کپشن کلید های open ، cancel پنجره please choose an access database را فارسی نمایم اما سه عنوان در این پنجره هست که نتوانستم آنها را تغییر دهم
حدس میزنم در داخل کیومه قبل از این عناوین باید از علامت خاص دیگری غیر از & استفاده شود .
لطفاً تصویر ضمیمه را ملاحظه بفرمائید .
با تشکر

meys34
پنج شنبه 10 دی 1394, 18:51 عصر
سلام

با استفاده از برنامه Spy++ میشه اطلاعات پنجره های مختلف رو بدست آورد...

این برنامه جزو برنامه های داخلی ویژوال استودیو هست توی start سرچ کنید پیدا میشه

آدرسش این هست:

C:\Program Files\Microsoft Visual Studio\Common\Tools

کار کردن باهاش راحته...

البته من هم خودم از این استفاده میکردم برای جواب به پست های شما

nazanin_90
پنج شنبه 10 دی 1394, 22:45 عصر
سلام

با استفاده از برنامه Spy++ میشه اطلاعات پنجره های مختلف رو بدست آورد...

این برنامه جزو برنامه های داخلی ویژوال استودیو هست توی start سرچ کنید پیدا میشه

آدرسش این هست:

C:\Program Files\Microsoft Visual Studio\Common\Tools

کار کردن باهاش راحته...

البته من هم خودم از این استفاده میکردم برای جواب به پست های شما

سلام جناب meys34 بزرگوار !
ممنون از عنایت شما
درمسیری که عنوان فرمودید برنامه پیدا نکردم (Spy++)

در گوگل هم خیلی سرچ کردم متأسفانه موردی نیافتم
با تشکر

meys34
یک شنبه 13 دی 1394, 19:43 عصر
سلام

آپلود کردم امتحان کنید ببینید کار می کنه؟

nazanin_90
دوشنبه 14 دی 1394, 00:11 صبح
سلام

آپلود کردم امتحان کنید ببینید کار می کنه؟
سلام جناب meys34 ً ! بله کار می کنه و خیلی هم عالیست .
ممنونم بابت پیگیریتون