تبليغاتX
ویژوال بیسیک - ویژوال ++c - الكترونيك
برنامه نویسی - الكترونيك - رياضيات
شاید تا بحال خواسته باشید یک بازی را تمام کنید اما سختی مراحل بازی شما را منصرف کنه.یکی از بازی هایی که من خیلی دوست دارم Pinball هستش.این بازی توسط شرکت Maxis برای Microsoft ساخته شده و همراه چندین سیستم عامل ویندوز ارائه شده است.

اول از همه بگم اگر دلتون می خواهد پدرش رو در بیارین و ظرف ۵ دقیقه تمومش کنید،کارهای زیر را انجام بدهید:
۱)وارد بازی بشید
۲) عبارت Hidden Test را بصورت کاملا دقیق تایپ کنید
3)بعد با موس توپ را بگیرید و به هرجا که میخواهید ببرید
4)دیگه حالتون از بازی به هم می خوره

شاید هم بخواهید با کسی سر امتیازش مسابقه بدهید.به تصویر زیر توجه کنید:

بازی Pinball در حالی که هک شده است

 در شکل فوق در قسمت ۱ امتیاز شما درج شده و کاملا مشخصه که امتیاز رو تا آخرش بردم بالا البته نه با بازی عادی بلکه با دست کاری کردن حافظه اصلی(RAM).
این بازی شامل یک فایل اجرایی هستش که در مسیر C:\Program Files\Windows NT\Pinball قرار داره.
به دو صورت میشه یک بازی را هک کرد:

1)با هک فایل اجرایی و دست کاری اون.این مورد رو در مقاله های بعدی بیشتر توضیح می دهم.
2)با تغییر مقدار متغییر های برنامه(مثل شکل فوق) و تغییر مقدار آنها به مقدار مطلوب که الآن می خواهم بگم.

کاری که ما می خواهیم انجام بدهیم تغییر مقدار متغیر هاست البته نه از توی برنامه بلکه از RAM.
تمامی متغیر ها وقتی تعریف می شوند فضایی از حافظه RAM را به خود اختصاص می دهند. این فضا باتوجه به نوع متغییر فرق می کنه.در جدول زیر فضای اشغالی انواع متغیر ها را در ویژوال بیسیک درج شده است:

Visual Basic type

Common language runtime type structure

Nominal storage allocation

Value range

Boolean

Boolean

Depends on implementing platform

True or False

Byte

Byte

1 byte

0 through 255 (unsigned)

Char (single character)

Char

2 bytes

0 through 65535 (unsigned)

Date

DateTime

8 bytes

0:00:00 (midnight) on January 1, 0001 through 11:59:59 PM on December 31, 9999

Decimal

Decimal

16 bytes

0 through +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) † with no decimal point; 0 through +/-7.9228162514264337593543950335 with 28 places to the right of the decimal;

smallest nonzero number is +/-0.0000000000000000000000000001 (+/-1E-28) †

Double (double-precision floating-point)

Double

8 bytes

-1.79769313486231570E+308 through -4.94065645841246544E-324 † for negative values;

4.94065645841246544E-324 through 1.79769313486231570E+308 † for positive values

Integer

Int32

4 bytes

-2,147,483,648 through 2,147,483,647 (signed)

Long (long integer)

Int64

8 bytes

-9,223,372,036,854,775,808 through 9,223,372,036,854,775,807 (9.2...E+18 †) (signed)

Object

Object (class)

4 bytes on 32-bit platform

8 bytes on 64-bit platform

Any type can be stored in a variable of type Object

SByte

SByte

1 byte

-128 through 127 (signed)

Short (short integer)

Int16

2 bytes

-32,768 through 32,767 (signed)

Single (single-precision floating-point)

Single

4 bytes

-3.4028235E+38 through -1.401298E-45 † for negative values;

1.401298E-45 through 3.4028235E+38 † for positive values

String (variable-length)

String (class)

Depends on implementing platform

0 to approximately 2 billion Unicode characters

UInteger

UInt32

4 bytes

0 through 4,294,967,295 (unsigned)

ULong

UInt64

8 bytes

0 through 18,446,744,073,709,551,615 (1.8...E+19 †) (unsigned)

User-Defined (structure)

(inherits from ValueType)

Depends on implementing platform

Each member of the structure has a range determined by its data type and independent of the ranges of the other members

UShort

UInt16

2 bytes

0 through 65,535 (unsigned)

† In scientific notation, "E" refers to a power of 10. So 3.56E+2 signifies 3.56 x 102 or 356, and 3.56E-2 signifies 3.56 / 102 or 0.0356.

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

برای تغییر مقدار متغییر ها ابتدا باید اونها را پیدا کنیم.برای این کار از تکنیک جستجو در حافظه سود می بریم.جستجو رو با برنامه TSearch انجام می دهیم.

دانلود TSearch 1.6(حجم ۱.۷۲ مگا بایت)

بعد از دانلود و اجرای برنامه با پیغام امنیتی مواجه می شوید که باید اون رو تایید کنید تا برنامه اجرا بشه.


آموزش برنامه TSearch:

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

 برای شروع برنامه Pinball رو هک می کنیم.البته خاطر تون باشه که رو ویندوز 64بیتی جواب نمی دهد.برنامه Pinball را اجرا کنید و کمی به بازی بپردازید تا امتیازی کسب کنید.سپس وارد برنامه TSearch شوید و دکمه شماره 1 را بزنید(شکل فوق)،از لیستی که باز می شود Pinball.exe را برگزینید.
دکمه شماره 2 را زده و از کادری که باز میشه با انتخاب گزینه Exact Value و وارد کردن امتیاز کسب شده در بازی در قسمت Value که در شکل با رنگ قرمز مشخص شده،دکمه OK را بزنید.
برای Type هم با توجه به محدوده مقادیر و جدول بالا مورد مناسب را انتخاب کنید.

اگر همه چیز را درست انجام داده باشید دو آدرس پیدا می کنید(مثل قسمت ۷ در شکل).با زدن دکمه ۶ هر دو آدرس را برای ویرایش به سمت راست یعنی همون لیستی که با رنگ مشکی متمایز شده منتقل کنید.مانند قسمت ۹ هر امتیازی که دوست دارید وارد کنید البته از محدوده ۴ بایت خارج نشوید.

دیگر دکمه ها:
دکمه ۳:جستجو در مقادیر یافت شده.
دکمه ۴:حذف نتایج جستجو.
دکمه ۵:انتقال آدرس انتخابی به سمت راست
دکمه ۶:انتقال تمامی آدرس ها به سمت راست
دکمه ۹:Freeze کردن مقدار یک آدرس،در مواردی مثل تایمر ها کاربرد داره.


بیشتر توضیح نمی دهم.خودتون کار کنید و لذت ببرید.

+ نوشته شده در  پنجشنبه هشتم فروردین 1387ساعت 13:3  توسط امید مسجودیان | 
 
+ نوشته شده در  شنبه سوم فروردین 1387ساعت 14:40  توسط امید مسجودیان | 
سلام دوستان

دو برنامه زیر را مشاهده کنید:

شکل 1 - حالت عادی فرم

شکل ۲ - اعمال XP Style

عکس اول فاقد XP Style هستش با اینکه تو ویندوز XP اجرا شده ظاهرش مثل ویندوز 98 می مونه .برای تبدیل ظاهر برنامه ها به حالت XPStyle (مثل شکل دوم) باید یکی از دو روش زیر را انتخاب کنیم:

روش اول:

ابتدا یک تابع API فراخوانی می کنیم.(API مجموعه توابعی هستن که برای بالا بردن قدرت برنامه نویس ها از انها استفاده میشه و لی الان با اومدن NET FramWork. دیگه لازم به استفاده انچنانی ازش نیست.API مخفف Application Proraming Interface به معنی رابط برنامه نویسی کاربردی است)

خط زیر رو در قسمت General Delaration بنویسید:

 

Private Declare Function InitCommonControls Lib "comctl32.dll" () As Long

 

تابع مورد نظر ما InitCommonControls هست که محل فراخوانی اون رویداد Initialize از فرم مورد نظر هستش .پس رویداد ما به شکل زیر هست:

Private Sub Form_Initialize()

InitCommonControls

End Sub

خواب کار تو Visual Basic تمومه یعنی اگه پروژه مورد نظرتون دیگه کاری نداره فایل exe را بسازین.یک فایل متنی(txt) درست کنید و داخلش این متن رو کپی کنین: 

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="X86"
        name="CompanyName.ProductName.YourAppName"
        type="win32" />
    <description>Your application description here</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="6595b64144ccf1df"
                language="*" />
        </dependentAssembly>
    </dependency>
</assembly>

 

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

 

 دانلود(حجم 1 کیلو بایت)

 

حالا فایل متنی رو به این نام ذخیره کنید:

نام فایل اجرایی که با VB ساختین همراه با پسوند EXE.MANIFEST. مثل زیر:

 

EXE.MANIFEST.نام فایل

 

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

 


روش دوم: 

مزیت این روش اینه که احتیاج به فایل متنی ندارید که مثل طفیلی همراه برنامه باشه.

قبل از همه این فایل رو در محل نصب ویژوال بیسیک کپی کنید.این کار خود VB رو به شکل XP Style در می آره.

 

 دانلود(حجم 1 کیلو بایت)

 

محل پیش فرض نصب مثل زیر است:

C:\Program Files\Microsoft Visual Studio\VB98

این کار ربطی به روش دوم نداره و برای هر دو حالت عملی هستش.

 

 اما روش دوم:

در این روش از برنامه ای که همراه ویژوال بیسیک نصب میشه استفاده می کنیم.اسم برنامه اینه:

Microsoft (R) Windows 32 Resource Compiler, Version 5.00.1641.1 - Build 1641

و مسیر پیش فرض نصبش در زیر آمده:

c:\Program Files\Microsoft Visual Studio\VB98\Wizards\RC.EXE

دستور العمل استفاده از این برنامه:

Usage:  rc [options] .RC input file
Switches:
   /r    Emit .RES file (optional)
   /v    Verbose (print progress messages)
   /d    Define a symbol
   /u    Undefine a symbol
   /fo   Rename .RES file
   /l    Default language ID in hex
   /i    Add a path for INCLUDE searches
   /x    Ignore INCLUDE environment variable
   /c    Define a code page used by NLS conversion
   /w    Warn on Invalid codepage in .rc (default is an error)
   /n    Append null's to all strings in the string tables.
Flags may be either upper or lower case

البته نیازی به فهمیدن آنها نیست و ما فقط از دو تا سوئیچ استفاده می کنیم.که خودم تو یه فایل BAT دستور العمل اش رو نوشتم.

پروژه مورد نظرتون رو در VB باز کنید و خط زیر رو در قسمت General Delaration بنویسید:

 

Private Declare Function InitCommonControls Lib "comctl32.dll" () As Long

 

تابع مورد نظر ما InitCommonControls هست که محل فراخوانی اون رویداد Initialize از فرم مورد نظر هستش .پس رویداد ما به شکل زیر هست:

Private Sub Form_Initialize()

InitCommonControls

End Sub

تمامی چیز هاییکه باید داشته باشید در زیر قابل دانلود و آماده است.

 

دانلود(حجم فایل ۱ کیلوبایت)

 

بعد از دانلود فایل XP Style.BAT را اجرا کنید.وقتی فایل BAT را اجرا کردید در همان مسیری که BAT واقع شده یه فایل به اسم VBExpress.res ایجاد میشه.باید این فایل رو به پروژه اضافه کنید.به شکل زیر:

CTRL+D را فشار بدید و فایل VBExpress.res را انتخاب کنید.

اگر فایل VB6.EXE.Manifest را در پوشه نصب ویژوال بیسیک کپی نکرده باشید٬درهنگام طراحی٬حالت

XP Style را ندارید.

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

 


+ نوشته شده در  سه شنبه نهم مرداد 1386ساعت 19:14  توسط امید مسجودیان | 
 در پس زمینه نوار ابزار windows Explorer میشه یک عکس قرار داد مثل زیر:

 

خواب برای اینکار باید با ریجستری کار کنید:

1-از منوی start گزینه Run  را انتخاب کنید

2-بنویسید regedit.exe بعد enter کنید

3-وارد زیر پوشه زیر بشین

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar

4-حالا زیر کلیدی از نوع رشته ای با نام BackBitmap بسازید

۵-روش دوبار کلیک کنید و در کادری که باز میشه مسیر عکس مورد نظرتون رو بدید

۶-دقت کنید که پسوند فایل حتما bmp باشه

۷-حالا اگر یه پنجره باز کنید می بینید که کار تمومه

اگه بخواهیم این کارو تو ویبی۲۰۰۵ انجام بدیم باید با رجیستری و توابع اون کارکنیم

اینجا یه EBook گذاشتم که به زبان فارسی هم هست و کار با رجیستری رو در ویژوال بیسیک دات نت نشون داده

دانلود(حجم ۱۸۲کیلو بایت)

خودم هم یه برنامه نوشتم که همین کارا رو انجام میده یه خورده هم امکانات بیشتر داره.دانلود کنین و حالشو ببرین

دانلود(حجم ۴۰۴کیلوبایت)

البته باید NET FramWork 2.0. رو سیستمتون نصب باشه.

+ نوشته شده در  شنبه بیست و هشتم مرداد 1385ساعت 13:21  توسط امید مسجودیان | 
نحوه ی کار با توابع زمان در ویژوال بیسیک و کار با کلاس ماجول ها تو این سورس آمده و همچنین اوناییکه می خواهند توابعی مانند Sleep(secend as Integer )as boolean داشته باشن یعنی همون تابعی که اجرای برنامه رو n ثانیه به تاخیر میندازه رو داشته باشند این سورس رو یه نگاه بندازند.

دانلود(حجم فایل ۲ کیلوبایت)


  تابع MsgBox با همه پارامترهاش تو این سورس آمده.یه نگاه بندازید بد نیست.

دانلود(حجم فایل ۱۳۰ کیلوبایت)

 

+ نوشته شده در  جمعه ششم مرداد 1385ساعت 1:12  توسط امید مسجودیان | 
ویژوال بیسیک 6 دارای مجموعه‌ای از توابع است که برای انجام محاسبات عددی پیش بینی شده اند. در این مقاله ابتدا با این توابع آشنا شده و سپس چگونگی ایجاد سایر توابع ریاضی را یاد خواهید گرفت.


برای نوشتن برنامه‌های مهندسی، محاسباتی، گرافیکی و آماری نیاز دارید تا از برخی توابع ریاضی استفاده نمائید. ویژوال بیسیک 6 دارای مجموعه‌ای از توابع است که برای انجام محاسبات عددی پیش بینی شده اند. در این مقاله ابتدا با این توابع آشنا شده و سپس چگونگی ایجاد سایر توابع ریاضی را که در میان این مجموعه وجود ندارند خواهید دید.

تابع Abs (قدرمطلق):
مقدار بدون علامت یک عدد را برمی‌گرداند.

تابع Atn (آرک تانژانت):
خروجی این تابع عددی از نوع double است که برابر زاویه‌ای است که تانژانت آن عدد ورودی تابع است.

تابع Cos (کسینوس):
خروجی این تابع عددی از نوع double است که برابر کسینوس زاویه ورودی است.

تابع Exp (توان نمانی):
خروجی این تابع عددی از نوع double است که برابر e به توان ورودی تابع است.

تابع Int (تابع کف یا تابع جزء صحیح):
نزدیکترین عدد صحیح مساوی یا کوچکتر نسبت به عدد ورودی را برمی‌گرداند.

تابع Log (لگاریتم):
خروجی این تابع عددی از نوع double است که برابر لگاریم طبیعی عدد ورودی است (لگاریتم بر مبنای عدد e یا همان Ln).

تابع Round (گرد کردن):
خروجی این تابع عددی از نوع double است که برابر نزدیکترین عدد صحیح به مقدار عدد ورودی است.

تابع Sgn (علامت):
خروجی این تابع عددی از نوع صحیح است که نشان دهنده علامت عدد ورودی است.

تابع Sin (سینوس):
خروجی این تابع عددی از نوع double است که برابر سینوس زاویه ورودی است.

تابع Sqr (جذر):
خروجی این تابع عددی از نوع double است که برابر ریشه دوم یا جذر عدد ورودی است.

تابع Tan (تانژانت):
خروجی این تابع عددی از نوع double است که برابر با تانژانت زاویه ورودی (برحسب رادیان) می‌باشد.

نکته: برای محاسبه توان nام یک عدد (n می توان صحیح یا اعشاری باشد) از اپراتور ^ استفاده نمائید. برای مثال:

2 ^ 5 = 32
9 ^ 0.5 = 3
4.2 ^ 3.7 = 202.31
ایجاد سایر توابع ریاضی که در ویژوال بیسیک 6 وجود ندارند
جدول زیر چگونگی محاسبه سایر توابع ریاضی که در ویژوال بیسیک 6 وجود ندارند را نشان می‌دهد:
تابعفرمول
سکانتSec(X) = 1 / Cos(X)
کسکانتCosec(X) = 1 / Sin(X)
کتانژانتCotan(X) = 1 / Tan(X)
آرک سینوسArcsin(X) = Atn(X / Sqr(1-X * X ))
آرک کسینوسArccos(X) = Atn(-X / Sqr(1-X * X)) + 2 * Atn(1)
آرک سکانتArcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) -1) * (2 * Atn(1))
آرک کسکانتArccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))
آرک کتانژانتArccotan(X) = Atn(X) + 2 * Atn(1)
سیونس هیپربولیکHSin(X) = (Exp(X) - Exp(-X)) / 2
کسینوس هیپربولیکHCos(X) = (Exp(X) + Exp(-X)) / 2
تانژانت هیپربولیکHTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
سکانت هیپربولیکHSec(X) = 2 / (Exp(X) + Exp(-X))
کسکانت هیپربولیکHCosec(X) = 2 / (Exp(X) - Exp(-X))
کتانژانت هیپربولیکHCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
آرک سینوس هیپربولیکHArcsin(X) = Log(X + Sqr(X * X + 1))
آرک کسینوس هیپربولیکHArccos(X) = Log(X + Sqr(X * X - 1))
آرک تانژانت هیپربولیکHArctan(X) = Log((1 + X) / (1 - X)) / 2
آرک سکانت هیپربولیکHArcsec(X) = Log((Sqr(1-X * X) + 1) / X)
آرک کسکانت هیپربولیکHArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) +1) / X)
آرک کتانژانت هیپربولیکHArccotan(X) = Log((X + 1) / (X - 1)) / 2
لگاریتم بر مبنای NLogN(X) = Log(X) / Log(N)

اعداد π و e
برای استفاده از اعداد پی و e در برنامه‌های خود، ثوابت زیر را تعریف نمائید:

Const Pi = 3.14159265358979
Const e = 2.71828182845904


همچنین عدد پی را می‌توان به صورت زیر تعریف کرد:

Pi = 4 * Atn(1)



تبدیل رادیان به درجه
چون اکثر توابع مثلثاتی بر حسب رادیان کار می کنند گاهی اوقات نیاز داریم تا زوایا را از در جه به رادیان و بالعکس تبدیل کنیم. برای تبدیل یک زاویه بر حسب رادیان به درجه، آنرا در 180 ضرب کرده و سپس بر عدد پی تقسیم می‌کنیم:

Degree(x) = x * 180 / Pi


برای تبدیل یک زاویه بر حسب درجه به رادیان، آنرا در عدد پی ضرب کرده و سپس بر 180 تقسیم می‌کنیم:

Rad(x) = x * Pi / 180

 


+ نوشته شده در  چهارشنبه چهارم مرداد 1385ساعت 20:55  توسط امید مسجودیان | 
دنباله تیلور؟

دنباله تیلور می تونه توابع خاص مثل توابع مثلثاتی و نمایی و هیپربولیک و ... را به تر کیبی از چهار عمل اصلی تبدیل کنه.مثال:

sin(x)=x - (x3/3!) + (x5/5!) - (x7/7!) + (x9/9!) - ...

cos(x)=1 - (x2/2!) + (x4/4!) + (x6/6!) + (x8/8!) + ...

ex=1 + (x2/2!) + (x3/3!) + (x4/4!) + ...

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

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

درجه=رادیان * (عدد پی/۱۸۰)

مثال: ۲ پی رادیان ۳۶۰ درجه است.

 


این کد بر نامه است که باید در Microsoft C++6 کامپایل بشه:

 

#include
#include
#include
#include
#define pi 3.1415
double factorial(double);
static int main()

 int i,j=2;
 double t,sin=0;
 cout << "input number in a degree then press enter:";
 cin >> t;
 t=(pi/180)*t;
 for(i=1;i<20;i++)
 {
 sin=sin+((pow(-1,j))*pow(t,2*i-1)/factorial(2*i-1));
 j++;
 }
 printf("sin(t)=%f",sin);
 getch();
 return 0;
}
double factorial(double x)
{
 if(x != 0)
  return(x*factorial(x-1));
 return 1;
}


اینم خروجیش:

input number in a degree then press enter:90
sin(t)=1.000000

دانلود فایل اجرایی برنامه(حجم فایل ۲۱۶ کیلوبایت)

 

+ نوشته شده در  چهارشنبه چهارم مرداد 1385ساعت 20:38  توسط امید مسجودیان | 
برای کامپایل این برنامه احتیاج به Turbo C دارین دقت کنید که با Microsoft Visual C++ 6  نمی توانید کامپایلش کنید.علتشم اینکه در این بر نامه از فایل هدر Graphic.h استفاده شده که تو Turbo C وجود داره.البته نگران نباشید چون فایل اجرایی هم داره.واسه کسانی خوبه که می خوان با گرافیک در سی و داس آ شنا بشن

بیشتر تو ضیح نمیدم دانلود کنید و حالشو ببرید.

دانلود(حجم فایل۱۴۷ کیلوبایت)

+ نوشته شده در  سه شنبه سوم مرداد 1385ساعت 0:37  توسط امید مسجودیان | 
شاید تا حالا خواسته باشید یک شمای کلی از محتویات یک سی دی داشته باشین

این برنامه که خودم نوشتمش میتونه پوشه ها رو بدون محتویاتشون به هرجا که می خاهید کپی کنه.

این برنامه رو با ویژوال بیسیک ۲۰۰۵ اکسپرس نوشتم .

 

دانلود (حجم فایل ۴۲۵ کیلوبایت)

+ نوشته شده در  دوشنبه دوم مرداد 1385ساعت 20:5  توسط امید مسجودیان |