ورود

View Full Version : دسترسی به کنترل های یک برنامه توسط ID و یا User Data



AliReza Vafakhah
شنبه 03 بهمن 1394, 12:21 عصر
سلام دوستان برنامه نویس

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

دوستان خیلی کوتاه و مفید مشکلم رو میگم چیه ، با یه نرم افزاری کار میکنم که میخوام چندتا کلید میانبر از طریق برنامه خارجی براش تعریف کنم ، مثلا Ctrl+z رو تخصیص بدم فرمان Undo ، مشکلی که دارم اگر کنترل یا کلید مربوطه مشخصه Caption رو میداشت میتونستم راحت Handel رو بگیرم ولی کنترل یا کلید مربوطه Caption Text نداره و میخوام از طریق مشخصه های دیگش بهش دسترسی پیدا کنم ، مثل Control ID یا Control User Data و یا ..
138599

ممنون میشم راهنمایی کنید

Mask
شنبه 03 بهمن 1394, 13:50 عصر
سلام اقای وفا خواه عزیز. امسال دوست پارسال اشنا.:قلب:
حیفه بخدا . یادمه خیلی فعال بودید و زحمت کشیدید. دوباره فعال باشید. در کنار کار روزمرتون هر از گاهی هم بیایید تو سایت.
دوستان قدیمی خیلیاشون رفتند. گاهی مشغله. گاهی هم کلاسشون دیگه به اینجا نمیخوره:گیج:
بعضیام( کمک به دوستان و فعالیت رو )با( مدیریت منفعت طلبانه این سایت ) قیاس میکنن و زده میشند. که به نظر من کار خوبی نیست.
بیایید تو سایت در کنار بچه ها از تجربیات همدیگه استفاده کنیم.


در مورد سوال:
خوب تابع FindWindow رو میتونی فقط از خاصیت کلاسش استفاده کنی.

AliReza Vafakhah
شنبه 03 بهمن 1394, 21:35 عصر
سلام اقای وفا خواه عزیز. امسال دوست پارسال اشنا.:قلب:
حیفه بخدا . یادمه خیلی فعال بودید و زحمت کشیدید. دوباره فعال باشید. در کنار کار روزمرتون هر از گاهی هم بیایید تو سایت.
دوستان قدیمی خیلیاشون رفتند. گاهی مشغله. گاهی هم کلاسشون دیگه به اینجا نمیخوره:گیج:
بعضیام( کمک به دوستان و فعالیت رو )با( مدیریت منفعت طلبانه این سایت ) قیاس میکنن و زده میشند. که به نظر من کار خوبی نیست.
بیایید تو سایت در کنار بچه ها از تجربیات همدیگه استفاده کنیم.


در مورد سوال:
خوب تابع FindWindow رو میتونی فقط از خاصیت کلاسش استفاده کنی.

سلام آقا خیلی ممنون ، شما لطف دارین
من بارها گفتم عاشق برنامه نویسی هستم و در اندازه خودم بدک نبودم ، نه حرفه ای بودم و نه آماتور ولی به اندازه خودم بدک نبودم ولی خوب شاید تلاشم در راستای اینکه از این شغل درآمد دربیار کم بود اما خدا رو شکر الآن هم راضیم ولی همیشه حسرت میخورم چرا نتونستم برنامه نویسی رو به عنوان شغل و کاراصلیم ادامه بدم اما بازهم شکر که تو این وضع باز یه شغل آبرومند کارمندی دارم.

خیلی از بزرگان سایت دیگه کمرنگ شدن ، یعنی واقعیت اینه که برنامه نویسی ویندوز الآن شاید کمتر باشه (شاید اشتباه کنم) ، الآن بیشتر واسه موبایل برنامه نویسی میکنن و وب

شما چیکار میکنید؟ فکر کنم نام کاربری تون رو تغییر دادین درسته؟

از کمکتون متشکرم ولی هنوز به جواب نرسیدم :(

Mask
شنبه 03 بهمن 1394, 22:26 عصر
زیاد موافق کمرنگ شدن برنامه های ویندوزی نیستم.
منم مثه همه درگیر گرفتاری های زندگی.

در مورد مشکلتون. من برنامه ای ندارم که بتونم تست بگیرم براتون.چون برنامه هایی که دارم کنترال کپشن دارند.
دقیقا چطوری باید تست بگیرم؟

AliReza Vafakhah
شنبه 03 بهمن 1394, 22:52 عصر
زیاد موافق کمرنگ شدن برنامه های ویندوزی نیستم.
منم مثه همه درگیر گرفتاری های زندگی.

در مورد مشکلتون. من برنامه ای ندارم که بتونم تست بگیرم براتون.چون برنامه هایی که دارم کنترال کپشن دارند.
دقیقا چطوری باید تست بگیرم؟

آره حق با شماست هم درگیر زندگی زوزمره ای و دق دقه هاش هستیم ، والا همین یخرده پا سیستم نشستن رو هم باید با وزیر جنگ دعوا کنیم تا بتونیم با سیستم کارکنیم :لبخند:

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



function FindControlByNumber(hApp: HWND; ControlClassName: string; ControlNr: Word = 1): HWND;
var
i: Word;
hControl: HWND;
begin
Result := 0;
if IsWindow(hApp) then
begin
Dec(ControlNr);
hControl:= 0;
for i:= 0 to 200 {All Control ID Range} do
begin
hControl:= FindWindowEx(hApp, hControl, PChar(ControlClassName), nil);
if (ControlNr > 0) then
if ( GetDlgCtrlID(hControl) = ControlNr + 1) then Exit(hControl)
end;
end;
Result := hControl;
end;




{$R *.dfm}




procedure TForm1.Timer1Timer(Sender: TObject);
var
ParentControlHandle, ChlidControlHandle: HWND;
begin
ParentControlHandle:= FindWindowEx($005E0A34 {Main App Handle},
0, 'CARPETTOOLBOX', nil);
ChlidControlHandle:= FindControlByNumber(ParentControlHandle,
'BITMAPPEDBUTTON', 120 {Control ID , SPY++ Return its to HEX and it Convert to DES});

PostMessage(ChlidControlHandle, WM_LBUTTONDOWN, MK_LBUTTON, 0);
PostMessage(ChlidControlHandle, WM_LBUTTONUP, MK_LBUTTON, 0);
end;