واضح آرشیو وب فارسی:سایت ریسک: View Full Version : سوال درباره کلاس my.computer.keyboard ahsanjan04-07-2008, 11:16 PMسلام من نمی دونم چطور در ویژوال بیسیک 2008 کلید capslock را روشن کنم می تونم بفهمم که روشن هست یا نه ولی نمی تونم روشنش کنم با این کد می فهمم روشن هست یا نه !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! _H2_05-07-2008, 12:14 AMسلام !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! ahsanjan05-07-2008, 11:37 AMاگر می شود یک کمی در باره این قسمت و کاربرد کارهای آن توضیح دهید If Not System.Console.CapsLock Then keybd_event(20, 0, 0, 0) keybd_event(20, 0, 2, 0) End If آیا می شود در بین کدهای VB.NET از اسمبلی و C++ هم استفاده کرد یا حداقل یک کدام را _H2_05-07-2008, 09:15 PMسلام دستور System.Console.CapsLock با My.Computer.Keyboard.CapsLock برابر است! کلاسسهای فضای نام My معمولاً مختص VB.Net هستند و برای راحتی برنامه نویسان قدیمی VB 6 در نظر گرفته شده اند، یعنی در بقیه زبانهای دات نتی این گزینه ها در دسترس نیستند، تقریباً همه این کلاسها و توابع معادلهای رسمی در کلاسهای اصلی فریم ورک دارند. و به نظر من بهتر است با توابع عمومی کار کرد تا به جای VB.Net کار بودن، دات نت کار باشید! و بتوانید در زبانهای دیگر هم به راحتی کار کنید. تابع keybd_event هم رویدادهای کیبور را شبیه سازی میکند، و پارامتر اول و سومش مهم است. -پارامتر اول کد کلید است، که کد CapsLock عدد 20 است. میتوانید از کدهای موجود در System.Windows.Forms.Keys استفاده کنید. -پارامتر سوم هم مشخص کننده رویداد است، صفر به معنی فشرده شدن کلید و 2 به معنی رها شدن کلید است. در کل ما چک میکنیم و اگر CapsLock خاموش باشد یک بار فشرده شدن و رها شدن آنرا شبیه سازی میکنیم. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! آیا می شود در بین کدهای VB.NET از اسمبلی و C++ هم استفاده کرد یا حداقل یک کدام را مستقیماً قابلانجام نیست ولی راههایی دارد، اصلی ترین راه ساخت dll در زبان دیگر و فراخانی از داخل VB.Net است. همین keybd_event در واقع کدی به زبان ++VC است که در کتابخانه user32.dll در محل system32 مستقر است. خود شما هم میتوانید با ++VC و یا VAsm یک dll بسازید، که البته بسته به نوع dll استفاده از ان هم فرق میکند. user32.dll یک Dynamic-Link Library است (یعنی نوع پایه ای و ابتدایی dll ها) ولی الآن dll ها انواع مختلف دارند و دیگر در عبارت Dynamic-Link Library نمیگنجند. اگر زبان دیگر دات نتی باشد مثل VC++.Net و یا C#.Net با کمی دردسر و دقت و کمی پیچیدگی با کامپایلهای خط فرمانی میتوان بدون ساخت یک dll دیگر هم از کدهای هم استفاده کرد. ولی در کل لزومی این کارها نیست، شما در برنامه های مرسوم با دات نت کم نخواهید آورد که محتاج به دیگر زبانها شوید... اگر هم میبینید ما الآن از user32.dll استفاده کردیم به خاطر این است که در ویندوز این فایل مدیر تمام بخش های رابط کاربری میباشد، و تا زمانی که در ویندوز هستید باید بالاجبار تمام فرامینی که به نوعی با رابط کاربری سروکار دارند، به این dll ارجاع شوند. ahsanjan05-07-2008, 10:37 PMخیلی ممنون ولی آیا در msdn جایی هست که این api ها را توضیح دهد مثل همین لطفا یک کلمه بگویید تا من در msdn مکان آموزش api ها را پیدا کنم ahsanjan07-07-2008, 12:00 PMبا سلام آقای h2 یا هر کس دیگری که می تواند جواب من را بدهد من رفتم تو سایت مایکروسافت مثال های vb.net را دانلود کردم به یک مشکل برخورد کردم یک اینکه در این کد متد invalidate به چدر د می خورد و اصلا کارش چیست Public Property BeadColor() As System.Drawing.Color Get Return privateBeadColor End Get Set(ByVal value As System.Drawing.Color) privateBeadColor = value Me.Invalidate() End Set End Property Public Property BeadOutlineColor() As System.Drawing.Color Get Return outlineColor End Get Set(ByVal value As System.Drawing.Color) outlineColor = value Me.Invalidate() End Set End Property دو اینکه در این عکس چرا imports microsoft.ink زیرش خط می کشد ویرایشگر http://www.persianupload.com/files/fu7x549hsfodki7qkwy9.png _H2_13-07-2008, 12:18 AMسلام خیلی ممنون ولی آیا در msdn جایی هست که این api ها را توضیح دهد مثل همین لطفا یک کلمه بگویید تا من در msdn مکان آموزش api ها را پیدا کنم api های ویندوز یکی و دو تا نیست که بتوان آنها را در یک نقطه مجتمع کرد، البته مجتمع است ولی آن محل اجتماع خود msdn است. شما میتوانید با برنامه هایی مثل depends.exe لیست api های یک dll را در اورید و اگر آن dll جزء اجزای اصلی ویندوز مایکروسافت باشد میتوانید نام api را در msdn بزنید تا توضیحاتش را پیدا کنید. مثلاً keybd_event را بزنید تا توضیحات و پارامترها و... را پیدا کنید. البته اگر انگلیسی تان قوی تر باشد میتوانید از سرچ msdn هم برای یافتن api مورد نظر استفاده کنید. با invalidate به چدر د می خورد و اصلا کارش چیست تصویر کنترل را نا معتبر میکند و در پیغام رسم مجدد را به کنترلر صادر میکند، یک چیز تو مایه های Refresh تصویر کنترلر که برروی مانیتور دیده میشود. دو اینکه در این عکس چرا imports microsoft.ink زیرش خط می کشد ویرایشگر شما dll مربوطه را به Refrence ها اضافه نکرده اید، در اصل VS از محل و موقعیت فایل مربوطه آگاه نیست. Project->Add Refrence->Browse شاید بتوانید در یکی از مسیرهای زیر و یا زیر پوشه هایشان فایل مربوطه را مییابید. C:Program FilesCommon Filesmicrosoft sharedink C:Program FilesReference AssembliesMicrosoftTablet PC ahsanjan13-07-2008, 11:09 AMببخشید این کلمه را که وارد می کنم نمی آید عکس را ببینید http://i38.tinypic.com/25k4z9e.png _H2_14-07-2008, 12:49 AMسلام عزیز جان، شما Filter تایین کرده اید، گزینه Visual Basic را به unfiltered تغییر دهید، تا msdn شرطی برای نمایش نگذارد. چون این مطالب فراتر از آن است که مربوط به یک زبان خاص شود و توضیحات api ها، هم فقط بر پایه مبنای C++ Native است. ahsanjan15-07-2008, 06:55 AMمن می خواستم برنامه ای بنویسم که وقتی اجرامی شود متن درون textbox الون انتخاب شود و با استفاده از فشرده شدن همزمان دو کنترول ctrl و c کپی شود بدون دخالت من و فقط باکد و این کدها را نوشتم ولی نمی دانم چرا کپی نمی شود مشکلشان چیست Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.SelectAll() keybd_event(Keys.ControlKey, 0, 0, 0) keybd_event(Keys.C, 0, 0, 0) keybd_event(Keys.C, 0, 2, 0) keybd_event(Keys.ControlKey, 0, 2, 0) End Sub _H2_16-07-2008, 01:45 AMسلام برای همچین کاری خود دات نت راه حل هایی دارد شما میتوانید با کمک تابع System.Windows.Forms.SendKeys.Send عمل تایپ در برنامه های دیگر را انجام دهید و نیازی هم به copy و paste نیست (گرچه میتوانید). ahsanjan16-07-2008, 05:21 AMممنون ولی من می خواستم بدانم همین کدیکه من نوشتم چه اشکالی دارد و فقط می خواست بدانم دو دکمه را در یک زمان گرفتن چه جوری اگر می شود بگویید مثلا alt و ctrl را چه جوری در یک زمان فشار دهیم از طریق کد _H2_16-07-2008, 02:08 PMسلام اگر قصد فهمیدن ایراد کد قبلی تان باشد میتوانم سه نکته را متذکر شوم. 1- ایراد اصلی، درج کد در رویداد Load است که این رویداد قبل از نمایش فرم اتفاق میافتد که چیزی برای کپی و اعمال کیبورد وجود ندارد. راه حل: از رویداد Shown یا Click و ... استفاده کنید که بعد از نمایش پنجره اتفاق می افتد. 2- شما باید مطمئن شوید که TextBox مورد نظر حتماً فوکس را داشته باشد و گرنه در همه شرایط کد فوق جواب نمیدهد. راه حل: Me.TextBox1.Focus 3- بهتر است گزینه Option Strict را در برنامه هایتان فعال کنید و عادت کنید به تبدیلات صریح، مثل زبان C، و در این مورد خاص مثلاً از دستور CByte هم استفاده کنید، گرچه تفاوتی در نهایت ندارد، ولی این عادت پسندیده میتواند جلوی بروز بسیاری از خطاها و حواس پرتی ها را بگیرد. معادل چهار خط کد کلیدی تایپی شما در دات نت این است! !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اگر هم قصد صرف شبیه سازی دکمه های کیبورد نباشد، برای کپی تک دستور Me.TextBox1.Copy که همیشه هم جواب میدهد، بسیار مناسب تر است. موفق باشید. ahsanjan16-07-2008, 03:55 PMممنون حل شد همان طور که شما گفتید در رویداد کلیک گذاشتم سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1453]