Jump to content
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

use api function TerminateProcess to kill process - استخدام دالة TerminateProcess لقتل العمليات


Recommended Posts

السلام عليكم، كما في العنوان شرح استخدام دالة TerminateProcess
لقتل العمليات..

اولا: الدوال المُستخدم بالشرح
TerminateProcess , FindWindow , GetWindowThreadProcessId , CloseHandle , OpenProcess


تصريح الدالة:

Declare Auto Function TerminateProcess Lib "KERNEL32.DLL" (ByVal hProcess As IntPtr, ByVal uExitCode As UInteger) As Boolean

 

الدالة تحتاج الى براميترات 2
الاول: مقبض العملية
الثاني: قيمة رقمية، نضع 0 لتمثل قتل العملية

فيكون الاستدعاء بالشكل العام هكذا

 

TerminateProcess(hwd, 0)


hwd= تمثل المقبض


------------------------------------------------------------
كيفية الحصول على مقبض للعمليات ؟؟
------------------------------------------------------------

هناك عدة طرق اسهلها، استخدام دالة FindWindow

تصريح الدالة:

 

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer

 


استدعاء الدالة:

 

Dim hwd As IntPtr = FindWindow(Nothing, "WindowTitle")

 

الدالة تحتاج براميترات 2
الاول: اسم كلاس النافذة بامكانك كتابة استخراج اسم الكلاس بواسطة اداة AutoIt Window Info
او اداة ++Spy التي تأتي مع فيجوال دوت نت.

البراميتر الثاني: عنوان النافذة (العنوان المكتوب فوق النافذة للبرنامج)

بأمكانك كتابة احد هذه البراميترات وتعويض البراميتر الثاني بـ Nothing
 

----------------------------------------------------------------------------------------------------

او استخدام طريقة اكثر بساطة وبدون api
------------------------------------------------------------

 

For Each x As Process In Process.GetProcessesByName("NameYourProcess")
MsgBox(x.Handle)
Next

 

بعد ان تعلمنا كيفية جلب المقبض للعملية ، نأتي الى تكملة شرحنا في استدعاء الدالة
صرح الدوال الاتية مع الستركشر الخاص بدالة OpenProcess

 

Declare Auto Function TerminateProcess Lib "KERNEL32.DLL" (ByVal hProcess As IntPtr, ByVal uExitCode As UInteger) As Boolean
 <DllImport("user32.dll", SetLastError:=True)> _
 Private Shared Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer
 End Function
 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
 Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As ProcessAccessFlags, bInheritHandle As Boolean, processId As UInt32) As IntPtr
 <DllImport("kernel32.dll", SetLastError:=True)> _
 Private Shared Function CloseHandle(ByVal hHandle As IntPtr) As Boolean
 End Function
 <Flags>
 Public Enum ProcessAccessFlags As UInteger
 All = &H1F0FFF
 Terminate = &H1
 CreateThread = &H2
 VirtualMemoryOperation = &H8
 VirtualMemoryRead = &H10
 VirtualMemoryWrite = &H20
 DuplicateHandle = &H40
 CreateProcess = &H80
 SetQuota = &H100
 SetInformation = &H200
 QueryInformation = &H400
 QueryLimitedInformation = &H1000
 Synchronize = &H100000
 End Enum

 

استدعاء الدالة وقتل العملية:
 

 

Dim TPID, TPHWD As Integer
 
 ' Get the process ID.
 TPID = 0
 GetWindowThreadProcessId(HWND, TPID) ' Replace HWND with your handle process
 
 ' Open the process.
 TPHWD = OpenProcess(ProcessAccessFlags.Synchronize Or ProcessAccessFlags.Terminate, 0, TPID)
 
 ' Terminate the process.
 TerminateProcess(TPHWD, 0)
 
 ' Close the process.
 CloseHandle(TPHWD)

 

استبدل HWND بمقبض العملية اي:
 

 

Dim TPID, TPHWD As Integer
 
  ' Get the process ID.
  TPID = 0
  GetWindowThreadProcessId(FindWindow(Nothing, "Untitled - Notepad"), TPID) ' Replace HWND with your handle process
 
  ' Open the process.
  TPHWD = OpenProcess(ProcessAccessFlags.Synchronize Or ProcessAccessFlags.Terminate, 0, TPID)
 
  ' Terminate the process.
  TerminateProcess(TPHWD, 0)
 
  ' Close the process.

 


على سبيل المثال طبقت على المفكرة
اي سؤل اني موجود
تحياتي

 

 

تم بحمد الله ، SEMO.Pa3x

:38:

  • Thanks 1
Link to post
Share on other sites
  • 1 year later...

السلام عليكم ورحمة الله 

موضوع في غاية الاهمية 

انا عندي كود يقوم بإغلاق جميع العمليات اللي شغاله على الحاسب تمام .. وده كويس وفعال // لكن انا عايز الغي كل العمليات على الجهاز ما عدا كذا وكذا وكذا .

مع العلم اني اشتغل على الاكسيس 

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By SEMO.Pa3x
      السلام عليكم..
      في بلدي العراق لدينا أقل عملة نقدية وهي 250 دينار عراقي
      احفظو هذا الرقم جيداً لأننا سنعود اليه
       
      اردت ان اقوم بعمل برنامج للأقساط فكان مبلغ القسط الكامل هو ( 10,000 عشرة الآف دينار عراقي )
      وكانت مدة الأقساط هي ( 3 شهور ) اذن نقوم بتقسيم المبلغ على المدة لكي يظهر لنا قيمة القسط لكل شهر
      وعند التقسيم ظهرت الكارثة 
       

       
      مبلغ غريب!!!!!!!!!! فلا هو 250 دينار ولا هو 500 دينار لا يمكن دفعة..
      ماهو الحل؟؟
      قمت بكتابة كود لحل هذه المشكلة، للأمانة الكود ليس من كتابتي 100% بل بنسبة 60% 
       
      Public Function RoundTo(d, roundRate, RoundType) As Double d = Math.Round(d, 7) If d <> 0 And roundRate <> 0 Then d = Ceiling(d) Dim num As Double num = d Mod roundRate If num > 0 Then If RoundType = 1 Then d = d + roundRate - num ElseIf RoundType = 2 Then d = d - num ElseIf RoundType = 3 Then If num >= roundRate / 2 Then d = d + roundRate - num Else d = d - num End If End If End If End If RoundTo = d End Function Public Function Ceiling(ByVal x As Double, Optional ByVal Factor As Double = 1) As Double ' X is the value you want to round ' Factor is the optional multiple to which you want to round, defaulting to 1 Ceiling = (Int(x / Factor) - (x / Factor - Int(x / Factor) > 0)) * Factor End Function  
      الاستخدام:
      Private Sub cmd_calc_Click() Dim TotalPrice, Result As Long Dim Duration, i As Integer TotalPrice = 10000 Duration = 3 i = 1 Result = TotalPrice / Duration Do While i <= Duration MsgBox RoundTo(Result, 250, 2) i = i + 1 Loop End Sub  
      ستظهر لنا النتيجة على شكل لووب مقسمة لإجزاء
      سيتم جبر النتيجة من 3,333333 الى 250
      فتكون: 3,250 الف دينار لـ 3 دفعات
       
      ويمكنكم إستخدام الكود حسب العملة لديكم، بإستبدال 250 لإصغر قيمة عملة لديكم.
      تحياتي لكم
    • By SEMO.Pa3x
      السلام عليكم..
      في درس اليوم سنقوم بحساب نسبة الربح من سعر الشراء وسعر البيع
      وسنقوم بحساب سعر البيع من خلال نسبة الربح
      --------------------------------------------------------------------------------------
      المثال الأول: إذا تم شراء سلعة بسعر 450 دولار،
      وبيعها بسعر 500 دولار، فما هي نسبة الربح؟
      الحل:
      القانون الرئيسي لنسبة الربح: (الربح/سعر الشراء)×100%
      أولاً: نحسب قيمة الربح لكي نعوضها في القانون في الأعلى
      الربح = سعر البيع - سعر الشراء
      500-450 = 50 دولار.
      وبالتعويض في القانون الرئيسي:
      نسبة الربح = (50/450) × 100%
                      = 11.11%
      --------------------------------------------------------------------------------------
      أما لو اردنا حساب سعر البيع من خلال نسبة الربح:
      المثال الثاني: إذا تم شراء سلعة بسعر 10 دولار
      وكانت نسبة الربح 25%، فما هو سعر البيع؟
      الحل:
      القانون الرئيسي لحساب سعر البيع من خلال نسبة الربح: (سعر الشراء * نسبة الربح) / 100 + سعر الشراء
      وبالتعويض في القانون الرئيسي:
      النتيجة = (10 * 25) / 100 + 10
               = 12.5
       
      تحياتي لكم..
    • By SEMO.Pa3x
      السلام عليكم..
      اقدم لكم حيلة قديمة ربما تفيدكم..
      على سبيل المثال:
      لدينا 3 حقول ( العدد 1 ) , ( العدد 2 ) , ( النتيجة )
      وأريد ان اقوم بعملية جمع للحقلين 1 و 2 وعرض النتيجة..
      الآن عند كتابة رقم في الحقل ( العدد 1 ) وبعدها كتابة رقم في الحقل ( العدد 2 )
      تظهر النتيجة مباشرة بدون الخروج من الحقل بمعنى إعطاء النتيجة مباشرة اثناء الكتابة
       
      Private Sub textbox1_Change() textbox3.Value = Nz(textbox1.Text, 1) + Nz(textbox2, 1) End Sub الفكرة كلها في اضافة الـ Value لحقل عرض النتيجة والخاصية Text للحقل المراد سحب النتيجة منه.
      تحياتي لكم.
    • By SEMO.Pa3x
      السلام عليكم ورحمة الله وبركاته..
      اقدم لكم اداة صغيرة من برمجتي وضيفتها تغيير اسم الدولة/المنطقة التي تعتمد عليها
      الكثير من البرامج خصوصاً العربية التي تعتمد الـ Unicode

       
      الأداة مكتوب بلغة Visual Studio .NET مبدأ عملها يحتاج ان تقوم بتمرير براميتر
      لها يحتوي على كود الدولة. عموما كتبت لكم مثال في الاكسس
      سورس الأداة:
      Imports System.Runtime.InteropServices Imports System.Threading Imports Microsoft.Win32 Imports System.Globalization Module Main 'C0ded bY: SEMO.Pa3x (: 'Date: 27-5-2021 : 03:26 PM Const subkey As String = "SYSTEM\CurrentControlSet\Control\Nls\Language\" Dim CodeArray As String() = {"af-ZA", "ar-AE", "ar-BH", "ar-DZ", "ar-EG", "ar-IQ", "ar-JO", "ar-KW", "ar-LB", "ar-LY", "ar-MA", "ar-OM", "ar-QA", "ar-SA", "ar-SY", "ar-TN", "ar-YE", "az-AZ", "az-AZ", "be-BY", "bg-BG", "bs-BA", "ca-ES", "cs-CZ", "cy-GB", "da-DK", "de-AT", "de-CH", "de-DE", "de-LI", "de-LU", "dv-MV", "el-GR", "en-AU", "en-BZ", "en-CA", "en-CB", "en-GB", "en-IE", "en-JM", "en-NZ", "en-PH", "en-TT", "en-US", "en-ZA", "en-ZW", "es-AR", "es-BO", "es-CL", "es-CO", "es-CR", "es-DO", "es-EC", "es-ES", "es-ES", "es-GT", "es-HN", "es-MX", "es-NI", "es-PA", "es-PE", "es-PR", "es-PY", "es-SV", "es-UY", "es-VE", "et-EE", "eu-ES", "fa-IR", "fi-FI", "fo-FO", "fr-BE", "fr-CA", "fr-CH", "fr-FR", "fr-LU", "fr-MC", "gl-ES", "gu-IN", "he-IL", "hi-IN", "hr-BA", "hr-HR", "hu-HU", "hy-AM", "id-ID", "is-IS", "it-CH", "it-IT", "ja-JP", "ka-GE", "kk-KZ", "kn-IN", "ko-KR", "kok-IN", "ky-KG", "lt-LT", "lv-LV", "mi-NZ", "mk-MK", "mn-MN", "mr-IN", "ms-BN", "ms-MY", "mt-MT", "nb-NO", "nl-BE", "nl-NL", "nn-NO", "ns-ZA", "pa-IN", "pl-PL", "ps-AR", "pt-BR", "pt-PT", "qu-BO", "qu-EC", "qu-PE", "ro-RO", "ru-RU", "sa-IN", "se-FI", "se-FI", "se-FI", "se-NO", "se-NO", "se-NO", "se-SE", "se-SE", "se-SE", "sk-SK", "sl-SI", "sq-AL", "sr-BA", "sr-BA", "sr-SP", "sr-SP", "sv-FI", "sv-SE", "sw-KE", "syr-SY", "ta-IN", "te-IN", "th-TH", "tl-PH", "tn-ZA", "tr-TR", "tt-RU", "uk-UA", "ur-PK", "uz-UZ", "uz-UZ", "vi-VN", "xh-ZA", "zh-CN", "zh-HK", "zh-MO", "zh-SG", "zh-TW", "zu-ZA"} Sub main() For Each arg As String In My.Application.CommandLineArgs 'check if arg exist in array ! Dim index As Integer = Array.IndexOf(CodeArray, arg) If index > 0 Then 'do change (: SetSystemNonUnicodeLanguage(CultureInfo.GetCultureInfo(arg)) End If Next End Sub Private Sub SetSystemNonUnicodeLanguage(ByVal cinfo As CultureInfo) Dim regkey = Registry.LocalMachine.OpenSubKey(subkey, True) regkey.SetValue("Default", cinfo.LCID.ToString("x4")) ' Reboot computer after timeout of 5 Shell("Shutdown -r -t 5") ' Switches: ' -l Log off profile ' -s Shut down computer ' -r Restart computer ' -f Force applications to close ' -t Set a timeout for shutdownCodeArray ' -m \\computer name (Shutdown remote computer) ' -i Show the Shutdown GUI End Sub End Module  
      البرنامج:
      Option Compare Database Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Const SW_SHOWNORMAL = 1 Private Sub cmd_change_Click() Dim SetLocaleInfo_File As String Dim Parameters As String SetLocaleInfo_File = CurrentProject.Path + "\SetLocaleInfo.exe" Parameters = comb_countries ShellExecute 0, "runas", SetLocaleInfo_File, Parameters, vbNullString, SW_SHOWNORMAL End Sub ارفقت لكم جدول لإسماء الدولة ورموزها:
      Code Country af-ZA Afrikaans (South Africa) ar-AE Arabic (U.A.E.) ar-BH Arabic (Bahrain) ar-DZ Arabic (Algeria) ar-EG Arabic (Egypt) ar-IQ Arabic (Iraq) ar-JO Arabic (Jordan) ar-KW Arabic (Kuwait) ar-LB Arabic (Lebanon) ar-LY Arabic (Libya) ar-MA Arabic (Morocco) ar-OM Arabic (Oman) ar-QA Arabic (Qatar) ar-SA Arabic (Saudi Arabia) ar-SY Arabic (Syria) ar-TN Arabic (Tunisia) ar-YE Arabic (Yemen) az-AZ Azeri (Latin) (Azerbaijan) az-AZ Azeri (Cyrillic) (Azerbaijan) be-BY Belarusian (Belarus) bg-BG Bulgarian (Bulgaria) bs-BA Bosnian (Bosnia and Herzegovina) ca-ES Catalan (Spain) cs-CZ Czech (Czech Republic) cy-GB Welsh (United Kingdom) da-DK Danish (Denmark) de-AT German (Austria) de-CH German (Switzerland) de-DE German (Germany) de-LI German (Liechtenstein) de-LU German (Luxembourg) dv-MV Divehi (Maldives) el-GR Greek (Greece) en-AU English (Australia) en-BZ English (Belize) en-CA English (Canada) en-CB English (Caribbean) en-GB English (United Kingdom) en-IE English (Ireland) en-JM English (Jamaica) en-NZ English (New Zealand) en-PH English (Republic of the Philippines) en-TT English (Trinidad and Tobago) en-US English (United States) en-ZA English (South Africa) en-ZW English (Zimbabwe) es-AR Spanish (Argentina) es-BO Spanish (Bolivia) es-CL Spanish (Chile) es-CO Spanish (Colombia) es-CR Spanish (Costa Rica) es-DO Spanish (Dominican Republic) es-EC Spanish (Ecuador) es-ES Spanish (Castilian) es-ES Spanish (Spain) es-GT Spanish (Guatemala) es-HN Spanish (Honduras) es-MX Spanish (Mexico) es-NI Spanish (Nicaragua) es-PA Spanish (Panama) es-PE Spanish (Peru) es-PR Spanish (Puerto Rico) es-PY Spanish (Paraguay) es-SV Spanish (El Salvador) es-UY Spanish (Uruguay) es-VE Spanish (Venezuela) et-EE Estonian (Estonia) eu-ES Basque (Spain) fa-IR Farsi (Iran) fi-FI Finnish (Finland) fo-FO Faroese (Faroe Islands) fr-BE French (Belgium) fr-CA French (Canada) fr-CH French (Switzerland) fr-FR French (France) fr-LU French (Luxembourg) fr-MC French (Principality of Monaco) gl-ES Galician (Spain) gu-IN Gujarati (India) he-IL Hebrew (Israel) hi-IN Hindi (India) hr-BA Croatian (Bosnia and Herzegovina) hr-HR Croatian (Croatia) hu-HU Hungarian (Hungary) hy-AM Armenian (Armenia) id-ID Indonesian (Indonesia) is-IS Icelandic (Iceland) it-CH Italian (Switzerland) it-IT Italian (Italy) ja-JP Japanese (Japan) ka-GE Georgian (Georgia) kk-KZ Kazakh (Kazakhstan) kn-IN Kannada (India) ko-KR Korean (Korea) kok-IN Konkani (India) ky-KG Kyrgyz (Kyrgyzstan) lt-LT Lithuanian (Lithuania) lv-LV Latvian (Latvia) mi-NZ Maori (New Zealand) mk-MK FYRO Macedonian (Former Yugoslav Republic of Macedonia) mn-MN Mongolian (Mongolia) mr-IN Marathi (India) ms-BN Malay (Brunei Darussalam) ms-MY Malay (Malaysia) mt-MT Maltese (Malta) nb-NO Norwegian (Bokm?l) (Norway) nl-BE Dutch (Belgium) nl-NL Dutch (Netherlands) nn-NO Norwegian (Nynorsk) (Norway) ns-ZA Northern Sotho (South Africa) pa-IN Punjabi (India) pl-PL Polish (Poland) ps-AR Pashto (Afghanistan) pt-BR Portuguese (Brazil) pt-PT Portuguese (Portugal) qu-BO Quechua (Bolivia) qu-EC Quechua (Ecuador) qu-PE Quechua (Peru) ro-RO Romanian (Romania) ru-RU Russian (Russia) sa-IN Sanskrit (India) se-FI Sami (Northern) (Finland) se-FI Sami (Skolt) (Finland) se-FI Sami (Inari) (Finland) se-NO Sami (Northern) (Norway) se-NO Sami (Lule) (Norway) se-NO Sami (Southern) (Norway) se-SE Sami (Northern) (Sweden) se-SE Sami (Lule) (Sweden) se-SE Sami (Southern) (Sweden) sk-SK Slovak (Slovakia) sl-SI Slovenian (Slovenia) sq-AL Albanian (Albania) sr-BA Serbian (Latin) (Bosnia and Herzegovina) sr-BA Serbian (Cyrillic) (Bosnia and Herzegovina) sr-SP Serbian (Latin) (Serbia and Montenegro) sr-SP Serbian (Cyrillic) (Serbia and Montenegro) sv-FI Swedish (Finland) sv-SE Swedish (Sweden) sw-KE Swahili (Kenya) syr-SY Syriac (Syria) ta-IN Tamil (India) te-IN Telugu (India) th-TH Thai (Thailand) tl-PH Tagalog (Philippines) tn-ZA Tswana (South Africa) tr-TR Turkish (Turkey) tt-RU Tatar (Russia) uk-UA Ukrainian (Ukraine) ur-PK Urdu (Islamic Republic of Pakistan) uz-UZ Uzbek (Latin) (Uzbekistan) uz-UZ Uzbek (Cyrillic) (Uzbekistan) vi-VN Vietnamese (Viet Nam) xh-ZA Xhosa (South Africa) zh-CN Chinese (S) zh-HK Chinese (Hong Kong) zh-MO Chinese (Macau) zh-SG Chinese (Singapore) zh-TW Chinese (T) zu-ZA Zulu (South Africa)  
      مدة العمل ( ساعة ونصف ) 
      SetLocaleInfo.rar
    • By SEMO.Pa3x
      السلام عليكم، أحياناً تواجهنا مشكلة في الأكسس وهي تحول الارقام الى العربية خصوصاً اذا كان بجانب الرقم حروف عربية
      لذلك دعونا نختصر الوقت على العميل ونقوم بتعديل تنسيقات التاريخ والارقام..الخ برمجياً بدون الطلب من العميل تعديلها يدوياً
      اقدم لكم فنكشن للتعديل، يمكنكم التعديل والإضافة بحسب ماتجدوه مناسباً.
       
      Public Sub EditControlPanelInternational() 'Define a key registry path Dim strComputer Dim objRegistry Dim strKeyPath Dim strValueName Dim getValue Dim regKeyPath Dim strLocaleName, strCountry, strshortDateValue, strlongDateValue, strshortTimeValue, strlongTimeValue, strfirstDayOfWeekValue Const HKEY_CURRENT_USER = &H80000001 strComputer = "." Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") regKeyPath = "Control Panel\International" strLocaleName = "en-US" strCountry = "United States" strshortDateValue = "yyyy-MM-dd" strlongDateValue = "dddd, MMMM d, yyyy" strshortTimeValue = "h:mm tt" strlongTimeValue = "h:mm:ss tt" strfirstDayOfWeekValue = "6" srtnativedigits = "0123456789" objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "LocaleName", strLocaleName objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sCountry", strCountry objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortDate", strshortDateValue objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sLongDate", strlongDateValue objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sShortTime", strshortTimeValue objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sTimeFormat", strlongTimeValue objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "iFirstDayOfWeek", strfirstDayOfWeekValue objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sNativeDigits", srtnativedigits Debug.Print "Successfully changed system regional settings." End Sub  
      للأمانة الفنكشن من كتابة saf لذلك انا قمت بإضافة السطر
      srtnativedigits = "0123456789" objRegistry.SetStringValue HKEY_CURRENT_USER, regKeyPath, "sNativeDigits", srtnativedigits لتغيير تنسيق الأرقام من عربي إلى انجليزي ومن ثم قمت بنقله لكم.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information