نمایش نتایج 1 تا 9 از 9

نام تاپیک: بستن یک application

  1. #1
    کاربر جدید
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    5

    بستن یک application

    سلام من میخواستم ببینم که چطور می‏تونم از تو یک application یک application دیگه رو ببندم؟ :?:
    مرسی :wink:

  2. #2

    SendMessage(Handle,WM_CLOSE,0,0);

  3. #3
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702

    سوال

    سلام
    آقای syntax checking
    من نتونستم بفهمم که
    1-چطور handle برنامه ای رو که نمی دونیم پیدا کنیم.
    2- اگه اصلا اون Application را ما ننوشته باشیم چی؟
    ممنون میشم جواب بدی

  4. #4
    سلام
    ای بابا آقا رضا برنامه ای رو که نمیدونیم چی هست رو واسه چی میخوایم ببندیم آخه :wink:
    اگر اسم برنامه و یا کلاس اصلی فرم اونو بدونیم با توابع خوانواده FindWindow میشه هندلشو پیدا کرد.
    اگر هم هیچی ندونیم ازش و مثلا بخوایم پنجره ای که زیر موس هست رو پیدا کنیم میتونیم اول با GetCursorPos محل موس رو پیدا کنیم و بعدش با WindowFromPoint هندلش رو.

    پیروز و شاد باشید

  5. #5
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702

    جواب

    خوب حالا من اگه بخوام از این جور برنامه ها ببندم چکار کنم؟ :shock:

  6. #6
    کاربر دائمی
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    تهران
    پست
    484
    از اون برنامه‌ای که قراره بسته بشه چه چیزیش رو می‌دونی؟
    یا به عبارت دیگه از کجا تشخیص می‌دی که کدوم برنامه باید بسته بشه؟

  7. #7
    1) با FindWindow هندل برنامه در حال اجرا بدست میاد.
    2) با فرستادن مسیج WM_CLOSE به پنجره ای که هندلش رو بدست آوردی اونو ببند.

    حالا دقیق میخوای چیکار کنی من که نفهمیدم مشکل شما کجاست.

  8. #8
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702

    جواب

    سلام دوستان
    تنها چیزی که می دونم اسم برنامه Exe است که اجرا شده است! میخواستم اونو ببندم

  9. #9
    کاربر دائمی
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    تهران
    پست
    484
    حالا که یک چیزی از برنامه‌ای رو که می‌خوای ببندی رو گفتی می‌شه چیزی در جواب گفت. البته اگر گفته بودی که می‌خوای برنامه عادی بسته بشه یا اینکه در هر صورت اجراش رو قطع کنی بهتر بود. تو کد زیر که توضیحش رو قراره بدم فرض رو بر این گذاشتم که برنامه دیگه رو می‌خوای به طور عادی ببندی٬ به این معنا که مثلا اگر قرار Notepad بسته بشه و متن موجود درش ذخیره نشده٬ کاربر قادر باشه که متن رو قبل از خروج ذخیره کنه.

    با استفاده از اسم برنامه می‌شه مشخصه پروسه (Process ID) اون رو پیدا کرد. بعد از پیدا کردن مشخصه پروسه (Process ID) برنامه، تو تمام پنجره‌های اصلی (Top Level Windows) برنامه‌هایی که در حال اجرا هستند می‌گردیم و پنجره‌ای رو پیدا می‌کنیم که مشخصه پروسه (Process ID) اون با مشخصه پروسه (Process ID) برنامه‌ای که داریم یکی باشه تا پنجره اصلی (Main Window Handle) اون برنامه را پیدا کنیم. با داشتن پنجره اصلی (Main Window Handle) برنامه و با فرستادن پیام WM_CLOSE به اون٬ از برنامه تقاضای بسته شدن عادی رو می‌کنیم، یا می‌تونیم پیام WM_QUIT رو بفرستیم که برنامه فورا" خاتمه پیدا کنه.

    uses
    Messages, Windows, SysUtils, TLHelp32;

    function FindExecutableProcessID(const ExeName: String): DWORD;
    var
    Snapshot: THandle;
    ProcessEntry32: TPROCESSENTRY32;
    begin
    Result := 0;
    Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    try
    if Snapshot <> 0 then
    begin
    ProcessEntry32.dwSize := SizeOf(TPROCESSENTRY32);
    if Process32First(Snapshot, ProcessEntry32) then
    repeat
    if CompareText(ExeName, ExtractFileName(ProcessEntry32.szExeFile)& #41; = 0 then
    Result := ProcessEntry32.th32ProcessID;
    until (Result <> 0) or not Process32Next(Snapshot, ProcessEntry32);
    end;
    finally
    CloseHandle(Snapshot);
    end;
    end;

    type
    PFindMainWindowData = ^ TFindMainWindowData;
    TFindMainWindowData = record
    ProcessID: DWORD;
    WindowHandle: THandle;
    end;

    function EnumWindowsProc(Wnd: THandle; Param: PFindMainWindowData): BOOL; stdcall;
    var
    ProcessID: DWORD;
    begin
    Result := True;
    GetWindowThreadProcessId(Wnd, ProcessID);
    if ProcessID = Param^.ProcessID then
    begin
    Param^.WindowHandle := Wnd;
    Result := False;
    end;
    end;

    function FindMainWindowHandle(ProcessID: DWORD): THandle;
    var
    Data: TFindMainWindowData;
    begin
    Data.ProcessID := ProcessID;
    Data.WindowHandle := 0;
    EnumWindows(@EnumWindowsProc, Integer(@Data));
    Result := Data.WindowHandle;
    end;

    function CloseApplication(const ExeName: String; Normal: Boolean): Boolean;
    var
    ProcessID: DWORD;
    MainWindowHandle: THandle;
    begin
    Result := False;
    ProcessID := FindExecutableProcessID(ExeName);
    if ProcessID <> 0 then
    begin
    MainWindowHandle := FindMainWindowHandle(ProcessID);
    if MainWindowHandle <> 0 then
    begin
    if Normal then
    PostMessage(MainWindowHandle, WM_CLOSE, 0, 0)
    else
    PostMessage(MainWindowHandle, WM_QUIT, 0, 0);
    Result := True;
    end;
    end;
    end;

    به عنوان نمونه:

    if CloseApplication('notepad.exe', True) then
    MessageBox('One instance of Notepad closed.')
    else
    MessageBox('Notpad is not running to close!');

تاپیک های مشابه

  1. Windows application یا Web application
    نوشته شده توسط babak23 در بخش ASP.NET Web Forms
    پاسخ: 10
    آخرین پست: جمعه 04 آبان 1386, 14:11 عصر
  2. Web application یا Windows application
    نوشته شده توسط babak23 در بخش C#‎‎
    پاسخ: 7
    آخرین پست: جمعه 04 آبان 1386, 02:30 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •