PDA

View Full Version : نوشتن حلفه بی نهایت با 100% شدن cpu usage



mahdi.manian
چهارشنبه 16 اسفند 1391, 00:30 صبح
با سلام.

دوستان می خواستم برنامه ای بنویسیم که وقتی بازش می کنیم و روی یک command button کلیک می کنیم، برنامه توی یک لوپ بی نهایت بیوفته و Cpu usage روی 100% بره و کلا کامپیوتر هنگ کنه.

با تشکر.

m.4.r.m
چهارشنبه 16 اسفند 1391, 01:29 صبح
Private Sub Form_Load()
While (1)

Wend

End Sub

vbhamed
چهارشنبه 16 اسفند 1391, 12:35 عصر
سلام
من يكم كاملترش مي‌كنم، فقط يادت نره قبل از اجرا حتما برنامه رو ذخيره كني چون سيستم بايد با دكمه ريست راه اندازي بشه
Option Explicit
Private Declare Function BlockInput Lib "user32.dll" (ByVal fBlock As Long) As Long

Private Sub Form_Load()

Do
BlockInput 1
Loop

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Cancel = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
Cancel = True
End Sub

m2011kh
چهارشنبه 16 اسفند 1391, 12:42 عصر
هدفت از این کار چیه؟؟؟اگه برا ویروس میخوای در نهایت ویندوز یه بار Explorer رو میبنده و برنامه شما هم بسته میشه و کلا کارتون بی فایده میشه.
اگه برای کار دیگه ای میخوای که اگه کارتو بگی فکر کنم بهتر باشه.
البته اگه از کد آقا حامد استفاده کنید مشکل حل میشه.از اسش پیداست که تمام ورودی های سیستم رو میبنده.

آقا حامد یه سوال برام پیش اومد این دقیقا کدوم ورودی هارو مبنده چون وقتی امتحان کردم کلید های ترکیبی Alt + Ctrl +Del
رو زدم Taskmanager اجرا شد.
MMD

SlowCode
چهارشنبه 16 اسفند 1391, 13:33 عصر
بله تنها استئنا واسه این تابع همون تسک منیجر هست.
البته کاربر نمیتونه کاری کنه چون این تابع توی حلقه بی نهایت اجرا میشه و بعد از باز کردن تسک منیجر دوباره ورودی ها قفل میشن.
میتونی واسه زیبایی کار:لبخند: تسک منیجر رو از پروسس ببندی.

Mohammad.sweets
چهارشنبه 16 اسفند 1391, 13:48 عصر
من یه سوال از دوستان داشتم البته شاید ربطی به این تاپیک نداشته باشه ولی گفتم دیگه الکی تاپیک نزنم.....

Private Declare Function BlockInput Lib "user32.dll" (ByVal fBlock As Long) As Long

شما از این دستور که فکر کنم یک تابع API باشه رو نوشتید....میخوام بدونم این تابه ها رو از کجا پیدا میکنید و چطور با کارش آشنا میشید؟؟؟ با تشکر

setroyd
چهارشنبه 16 اسفند 1391, 14:07 عصر
این ها همه در اینترنت بسته به نیاز شما در دسترس هستند و شما به مرور زمان میتونی این هارو یاد بگیری یا کتاب api انتشارات ناقوس و............ میتونن به شما کمک کنند و اینکه شما میتونی با api text viewer که در پوشه ی vb6 هست لیست این این api هارو در اختیار داشته باشی که خیلی از انها نحوه ی کار کردشون از اسمشون پیداست .

vbhamed
چهارشنبه 16 اسفند 1391, 14:14 عصر
بله تنها استئنا واسه این تابع همون تسک منیجر هست.
البته کاربر نمیتونه کاری کنه چون این تابع توی حلقه بی نهایت اجرا میشه و بعد از باز کردن تسک منیجر دوباره ورودی ها قفل میشن.
میتونی واسه زیبایی کار:لبخند: تسک منیجر رو از پروسس ببندی.
سلام
بله درسته، اينم با بستن Task manager البته براي ويندوز xp، براي ويندوزهاي ديگه هم عنوان پنجره Task Manager رو مي‌تونيد مشابه دستورات زير اضافه كنيد
Option Explicit
Private Declare Function BlockInput Lib "user32.dll" (ByVal fBlock As Long) As Long

Private Sub Form_Load()

On Error Resume Next

Do
BlockInput 1
AppActivate "windows task manager"
If Err = 0 Then SendKeys "%{F4}": DoEvents
Err.Clear
Loop

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Cancel = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
Cancel = True
End Sub

m2011kh
چهارشنبه 16 اسفند 1391, 14:16 عصر
امیدوارم اسپم نداده باشم ولی آقا Setroyd این کتاب از انتشارات ناقوس چاپ چه سالی هست؟؟؟
الان تو بازار موجو هست؟؟؟چون من خیلی جاها دنبالش گشتم نمونه شم تو میدان انقلاب ولی چیزی پیدا نکردم.

MMD

setroyd
چهارشنبه 16 اسفند 1391, 14:53 عصر
اره کتاب های مشابه زیادی در این رابطه هست میتونید بگیرید ولی میتونم به جرات بگم اینترنت رو بگردید کامل تر از کتاب هست منظورم مرجه فارسی هست نه en

این یه نمونه هست که خودم نوشتم و در سایت قرار دادم

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


http://barnamenevis.org/showthread.php?319790-%28EBOOK-Short-Time-in-Vb6-%28Api-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-20-%D8%AA%D8%A7%D8%A8%D8%B9-api-%D8%AF%D8%B1-%D8%B1%D8%A7%D8%A8%D8%B7%D9%87-%D8%A8%D8%A7-%D9%BE%D9%86%D8%AC%D8%B1%D9%87-%D9%87%D8%A7


و اگر دانلود نشد از سایت irpdf میتونی دانلودش کنی و کتاب هایی در همین زمینه در ساید irpdf هست که میتونه کمکت کنه .


http://barnamenevis.org/showthread.php?194847-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-API




http://barnamenevis.org/showthread.php?376851-200-%D8%AA%D8%A7%D8%A8%D8%B9-API-%D8%A8%D8%A7-%D8%AA%D9%85%D8%A7%D9%85-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD%D8%A7%D8%AA-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C

m2011kh
چهارشنبه 16 اسفند 1391, 15:07 عصر
ممنون
منتظر هستم

mahdi.manian
پنج شنبه 17 اسفند 1391, 00:59 صبح
دوستان این توی Cpu من که core i5 هست فقط 25 درصد از cpu usage را میگیره! نمیشه 100% اش کرد؟

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


با تشکر.

meys34
پنج شنبه 17 اسفند 1391, 13:40 عصر
دوستان این توی Cpu من که core i5 هست فقط 25 درصد از cpu usage را میگیره! نمیشه 100% اش کرد؟

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


با تشکر.

25% یعنی یک چهارم...

پس CPU شما 4 هسته ای هست و شما از یکیش داری استفاده میکنی که شده 25%


برای اینکه بتونی از 3 تای بعدی هم استفاده کنی باید از تابع زیر استفاده کنی...

(دقت کن که به این روش میگن MultiTreading... استفاده از این روش اگر نکاتی رو دقت داشته باشین مشکلی پیش نمیاره...)
کد هارو درون Module بریزین...
Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

Public Sub Hang()
Dim Id As Long
CreateThread 0& , 0&, AddressOf ThreadSub, 0&, 0&, Id
End Sub

Private Sub ThreadSub(Optional ByVal dummy As Long)
Static t As Long
t = Timer
Do
Loop Until Timer - t > 3
End Sub



با هر بار اجرای تابع Hang یک Thread ساخته میشه...
اگر تابع Hang رو یکدفعه اجرا کنی 25% و اگر دوبار 50% و نهایتا چون سیستم شما 4 هسته ای هست اگر 4 بار اجرا کنی میشه 100%

سیستم من 2 هسته ایه و با دو بار اجرا کردن 100% شد...

هر کدوم از Thread ها فقط 3 ثانیه فعال هستند و بعدش تموم میشه کارشون...

mahdi.manian
پنج شنبه 17 اسفند 1391, 20:38 عصر
خیلی ممنون.

ولی من می خوام اگه میشه هر 4 هسته cpu همزمان مشغول بشه و مثلا 4 تا Thread همزمان بسازه تا با یکبار اجرا کردن cpu بشه 100%. هیچ راهی نداره؟

vbhamed
جمعه 18 اسفند 1391, 09:52 صبح
سلام

خب دوستمون كه گفتن، تو برنامت 4 بار تابع hang رو اجرا كن

meys34
جمعه 18 اسفند 1391, 21:49 عصر
سلام

خب دوستمون كه گفتن، تو برنامت 4 بار تابع hang رو اجرا كن


خیلی خیلی ممنون ازتون...

و اینکه یه چیزی هم توضیح بدم:

چون گفته بودن که "پروژه هست باید تحویل استادمون بدم" و احساس کردم فقط می خوان کپی پیست کنن، سورس کامل نذاشتم که برن بگردن تا بار آموزشیش حفظ بشه... (البته همین جوری هم سورس کامله کامله)

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

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

mahdi.manian
شنبه 19 اسفند 1391, 02:19 صبح
توی module جدید که می گذارم و ذخیره می کنم خطا میده و کد CreateThread0& را به عنوان مشکل انتخاب می کنه.

این خطا را میده: compile error. Sub or Function not defined

و یک سوال دیگه. من اینو به صورت ماژول می گذارم نباید توی فرم هیچ کدی بنویسم؟ و اینکه چطوری اینو 4 بار توی ماژول بنویسم تا در cpu چهار هسته ای cpu usage بشه 100%؟ ممنون میشم سورس کاملشو بگذارید.


با تشکر.

m2011kh
شنبه 19 اسفند 1391, 12:15 عصر
خب اون کد رو داخل یه module بزاری و برای فراخوانیش اینطوری چهار بار بار فراخوانی کن:

Private Sub Form_load()
For i = 1 to 4
hang
یا
call hang
next i
end sub

meys34
شنبه 19 اسفند 1391, 12:37 عصر
توی module جدید که می گذارم و ذخیره می کنم خطا میده و کد CreateThread0& را به عنوان مشکل انتخاب می کنه.

این خطا را میده: compile error. Sub or Function not defined


اشتباه من بود... اون تابع API اسمش CreateThread هست نه CreateThread0&...
و اون 0& هم ورودی تابع است و جزیی از اسمش نیست... یعنی باید اینجوری باشه:

CreateThread 0& , 0&, AddressOf ThreadSub, 0&, 0&, Id

mahdi.manian
دوشنبه 21 اسفند 1391, 18:31 عصر
بازم خطا میده. کدی که در پیام خصوصی فرستادید وقتی می گذارم توی سورس می گذارم این خطا را میده: Compile error: Only comments may appear after End sub, End function or End property
و این کد را به عنوان کد اشتباه انتخاب می کنه: Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

وقتی هم این کد و کد خط بعدشو کامنت می کنیم یک خطا دیگه میده: Compile error: Invalid use of AddressOf operator

و این کد AddressOf ThreadSub را به عنوان کد اشتباه انتخاب می کنه در کد: CloseHandle CreateThread(0&, 0&, AddressOf ThreadSub, 0&, 0&, Id)


این خطاهایی هست که دوست عزیزمان meys34 در سورسی که در پیام خصوصی فرستادند هست.

اگه میشه شما این را کامل درستش کنید و فرمشو با فرمت frm برای من در ضمیمه کنید یا جایی آپلود کنید.


خیلی ممنون. با تشکر.

meys34
دوشنبه 21 اسفند 1391, 19:16 عصر
سلام

هر طور که شما میخوایید... اینم از سورس...

ولی ارور هایی که داده :

1- Compile error: Only comments may appear after End sub, End function or End property

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

'*****************
'Put in Form
Private Sub Command1_Click()
Hang
Hang
Hang
Hang
End Sub


و قسمت دوم رو توی Module میریخیتید

'******************
'Put In module
Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Sub Hang()
Dim Id As Long
CloseHandle CreateThread(0&, 0&, AddressOf ThreadSub, 0&, 0&, Id)
End Sub

Private Sub ThreadSub(Optional ByVal dummy As Long)
Static t As Long
t = Timer
Do
Loop Until Timer - t > 3
End Sub

2- Compile error: Invalid use of AddressOf operator

دستور کلیدی AddressOf باید مربوط به تابعی باشه که داخله Module هست... وچون شما تمام کد ها رو ریختین توی یه فرم این ارور رو داده...



در آخر هم اضافه کنم که سورس زیر همون دستورات وی بی بالا هست...